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 queue
Priority Queue Insertion and Deletion in C

Priority 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
By default, if nothing is mentioned it means that the Priority queue is a min priority queue. A Priority Queue can be implemented using –
  • Arrays
  • Linked List
  • Heaps
You can check these pages here for implementation using Linked List and arrays We will be discussing the array approach here.

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

Checkout list of all the video courses in PrepInsta Prime Subscription

Checkout list of all the video courses in PrepInsta Prime Subscription

Stacks

Queues

Circular Queues

Priority Queue

  • Application of Priority Queue
  • Priority Queue Example
  • Priority Queue Introduction – C | C++ | Java
  • Priority Queue Implementation using Array – C | C++ | Java
  • Priority Queue using Linked List – C | C++ | Java
  • Priority Queue Insertion and Deletion- C | C++ | Java

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

Priority Queue

  • Application of Priority Queue
  • Priority Queue Example
  • Priority Queue Introduction –
    C | C++ | Java
  • Priority Queue Implementation using Array –
    C | C++ | Java
  • Priority Queue using Linked List –
    C | C++ | Java
  • Priority Queue Insertion and Deletion-
    C | C++ | Java