priority queue in c

A priority Queue is an extension of the queue with some specific properties.

A typical priority queue supports the following operations.

priority queue in c using linked list

Declaring priority queue

struct pqueue
{
  int key;
  int data;
  struct pqueue*next;
};
typedef struct pqueue QUEUE;
QUEUE*front=NULL;

QInsert operation

void qinsert()
{
  QUEUE*temp,*q;
  temp=(QUEUE*)malloc(sizeof(QUEUE));
  printf("\nEnter key: ");
  scanf("%d",&temp->key);
  printf("\nEnter data: ");
  scanf("%d",&temp->data);
  if(front==NULL||temp->key < front->key)
  {
    temp->next=front;
    front=temp;
    return;
  }
  else
  {
    q=front;
    while(
  q->next!=NULL&&q->next->key<=temp->key)
     q=q->next;

    temp->next=q->next;
    q->next=temp;
    return;
  }
}

QDelete operation

void qdelete()
{
  QUEUE*temp;
  if(front==NULL)
  {
   printf("\nQUEUE IS UNDERFLOW(EMPTY):");
   return;
  }
  else
  {
    temp=front;
    front=front->next;
    temp->next=NULL;
  printf("\ndeleted data:%d",temp->data);
    free(temp);
    temp=NULL;
    return;
  }
}

QDisplay operation

void qdisplay()
{
  QUEUE*temp;
  if(front==NULL)
  {
   printf("\nQUEUE IS EMPTY: ");
   return;
  }
  else
  {
    printf("\nQUEUE DATA: ");
    temp=front;
    do
    {
     printf("%d ",temp->data);
     temp=temp->next;
    }while(temp!=NULL);
  }
}

main() implementation

int main()
{
  int option;
  while(1)
  {
   clrscr();
   printf("\n1.FOR INSERT :");
   printf("\n2.FOR DELETE :");
   printf("\n3.FOR DISPLAY: ");
   printf("\n4.FOR EXIT...:");
   scanf("%d",&option);
   switch(option)
   {
    case 1: qinsert();
          break;
    case 2: qdelete();
          getch();
          break;
    case 3: qdisplay();
          getch();
          break;
    case 4: return 0;

  default: printf("\ninvalid option: ");
   }
  }
}

Leave a Reply

Your email address will not be published. Required fields are marked *