Priority Queue Insertion and Deletion in C
C Program to Insert or Delete Element from Priority Queue
On this page we will discuss about Priority Queue Insertion and Deletion in C and how its implemented using arrays and write a program to insert and delete elements in the priority queuePriority Queue Insertion And Deletion
Introduction
A priority is basically an extension of the general queue. A major difference is that dequeuing happens based on the priority of each item in the queue. We have two types of priority queue –- Max Priority Queue – A larger priority value means higher priority
- Min Priority Queue – A smaller priority value means lower priority
- Arrays
- Linked List
- Heaps
Operations
- enqueue(): To insert a new item at the end of the queue.
- dequeue(): To remove the element with the highest priority from the queue.
- peek()/top(): To get the highest priority element in the queue without dequeuing the item.
Time Complexity
- enqueue(): O(1)
- dequeue(): O(n)
- peek()/top(): O(n)
C Program for Inserting and Deleting elements in Priority Queue
Run
// Write a program to insert and delete elements in the priority queue #include<stdio.h> #include<limits.h> #define MAX 100 // denotes where the last item in priority queue is // initialized to -1 since no item is in queue int idx = -1; // pqData holds data for each index item // pqPriority holds priority for each index item int pqData[MAX]; int pqPriority[MAX]; int isEmpty () { return idx == -1; } int isFull () { return idx == MAX - 1; } // enqueue just adds item to the end of the priority queue | O(1) void enqueue (int data, int priority) { if (!isFull ()) { // Increase the index idx++; // Insert the element in priority queue pqData[idx] = data; pqPriority[idx] = priority; } } // returns item with highest priority // NOTE: Low priority number means higher priority | O(N) int peek () { int maxPriority = INT_MAX; int indexPos = -1; // Linear search for highest priority for (int i = 0; i <= idx; i++) { // If two items have same priority choose the one with // higher data value if (maxPriority == pqPriority[i] && indexPos > -1 && pqData[indexPos] < pqData[i]) { maxPriority = pqPriority[i]; indexPos = i; } // note low priority number means higher priority // ex: Two processes P1 - 1 priority and P2 - 5 priority // P1 will get executed first, thus comes out of ready queue first else if (maxPriority > pqPriority[i]) { maxPriority = pqPriority[i]; indexPos = i; } } // Return index of the element where return indexPos; } // This removes the element with highest priority // from the priority queue | O(N) void dequeue () { if (!isEmpty ()) { // Get element with highest priority int indexPos = peek (); // reduce size of priority queue by first // shifting all elements one position left // from index where the highest priority item was found for (int i = indexPos; i < idx; i++) { pqData[i] = pqData[i + 1]; pqPriority[i] = pqPriority[i + 1]; } // reduce size of priority queue by 1 idx--; } } void display () { for (int i = 0; i <= idx; i++) { printf ("(%d, %d)\n", pqData[i], pqPriority[i]); } } // Driver Code int main () { // To enqueue items as per priority enqueue (10, 1); enqueue (20, 3); enqueue (30, 4); enqueue (40, 5); enqueue (1000, 2); printf ("Before: \n"); display (); // Dequeue the top element dequeue (); // 10 dequeued dequeue (); // 1000 dequeued printf ("\nAfter: \n"); display (); return 0; }
Output
Before: (10, 1) (20, 3) (30, 4) (40, 5) (1000, 2) After: (20, 3) (30, 4) (40, 5)
Prime Course Trailer
Related Banners
Get PrepInsta Prime & get Access to all 200+ courses offered by PrepInsta in One Subscription
Get over 200+ course One Subscription
Courses like AI/ML, Cloud Computing, Ethical Hacking, C, C++, Java, Python, DSA (All Languages), Competitive Coding (All Languages), TCS, Infosys, Wipro, Amazon, DBMS, SQL and others
Stacks
- Introduction to Stack in Data Structure
- Operations on a Stack
- Stack: Infix, Prefix and Postfix conversions
- Stack Representation in – C | C++ | Java
- Representation of a Stack as an Array. – C | C++ | Java
- Representation of a Stack as a Linked List. – C | C++ | Java
- Infix to Postfix Conversion – C | C++ | Java
- Infix to prefix conversion in – C | C++ | Java
- Postfix to Prefix Conversion in – C | C++ | Java
Queues
- Queues in Data Structures (Introduction)
- Queues Program in C and implementation
- Implementation of Queues using Arrays | C Program
- Types of Queues in Data Structure
- Application of Queue Data Structure
- Insertion in Queues Program (Enqueuing) – C | C++ | Java
- Deletion (Removal) in Queues Program(Dequeuing) – C | C++ | Java
- Reverse a Queue – C | C++ | Java
- Queues using Linked Lists – C | C++ | Java
- Implement Queue using Stack – C | C++ | Java
- Implement Queue using two Stacks – C | C++ | Java
Circular Queues
- Circular queue in Data Structure
- Applications of Circular Queues
- Circular queue in – C | C++ | Java
- Circular queue using Array – C | C++ | Java
- Circular Queue using Linked Lists – C | C++ | Java
Priority Queue
Stacks
- Introduction to Stack in Data Structure
Click Here - Operations on a Stack
Click Here - Stack: Infix, Prefix and Postfix conversions
Click Here - Stack Representation in –
C | C++ | Java - Representation of a Stack as an Array. –
C | C++ | Java - Representation of a Stack as a Linked List. –
C | C++ | Java - Infix to Postfix Conversion –
C | C++ | Java - Infix to prefix conversion in –
C | C++ | Java - Postfix to Prefix Conversion in –
C | C++ | Java
Queues
- Queues in Data Structures (Introduction)
Click Here - Queues Program in C and implementation
Click Here - Implementation of Queues using Arrays | C Program
Click Here - Types of Queues in Data Structure
Click Here - Application of Queue Data Structure
Click Here - Insertion in Queues Program (Enqueuing) –
C | C++ | Java - Deletion (Removal) in Queues Program(Dequeuing) –
C | C++ | Java - Reverse a Queue –
C | C++ | Java - Queues using Linked Lists –
C | C++ | Java - Implement Queue using Stack –
C | C++ | Java - Implement Queue using two Stacks –
C | C++ | Java
Circular Queues
- Circular queue in Data Structure
Click Here - Applications of Circular Queues
Click Here - Circular queue in –
C | C++ | Java - Circular queue using Array –
C | C++ | Java - Circular Queue using Linked Lists –
C | C++ | Java
Login/Signup to comment