Priority Queue in Data Structure

Priority Queue

• Priority queue contains data items which have some preset priority. While removing an element from a priority queue, the data item with the highest priority is removed first.
• In a priority queue, insertion is performed in the order of arrival and deletion is performed based on the priority.

Example: Program for Priority Queue

#include <stdio.h>
#include <stdlib.h>
#define MAX 5

void insert_by_priority(int);
void delete_by_priority(int);
void create();
void check(int);
void display_pqueue();

int pri_que[MAX];
int front, rear;

void main()
{
int n, ch;
printf("\n1 Insert");
printf("\n2 Delete");
printf("\n3 Display");
printf("\n4 Exit");
create();
while (1)
{
scanf("%d", &ch);
switch (ch)
{
case 1:
printf("\nInsert Element : ");
scanf("%d",&n);
insert_by_priority(n);
break;
case 2:
printf("\nEnter Element to Delete : ");
scanf("%d",&n);
delete_by_priority(n);
break;
case 3:
display_pqueue();
break;
case 4:
exit(0);
default:
printf("\n Invalid Choice");
}
}
}
void create() //Create Function
{
front = rear = -1;
}
void insert_by_priority(int data) //Insert Function
{
if (rear >= MAX - 1)
{
printf("\nQueue is Overflow");
return;
}
if ((front == -1) && (rear == -1))
{
front++;
rear++;
pri_que[rear] = data;
return;
}
else
check(data);
rear++;
}
void check(int data) //Check Function - to check priority and place element
{
int i,j;
for (i = 0; i <= rear; i++)
{
if (data >= pri_que[i])
{
for (j = rear + 1; j > i; j--)
{
pri_que[j] = pri_que[j - 1];
}
pri_que[i] = data;
return;
}
}
pri_que[i] = data;
}
void delete_by_priority(int data) //Delete Function
{
int i;
if ((front==-1) && (rear==-1))
{
printf("\nQueue is empty no elements to delete");
return;
}
for (i = 0; i <= rear; i++)
{
if (data == pri_que[i])
{
for (; i < rear; i++)
{
pri_que[i] = pri_que[i + 1];
}
pri_que[i] = -99;
rear--;
if (rear == -1)
front = -1;
return;
}
}
}
void display_pqueue() //Display Function
{
if ((front == -1) && (rear == -1))
{
printf("\nQueue is empty");
return;
}
for (; front <= rear; front++)
{
printf(" %d ", pri_que[front]);
}
front = 0;
}

Output:

1. Insert

2. Display

3. Delete