Wednesday 11 February 2015

priority queue

#include<stdio.h>
#include<conio.h>
#define MAX 5
struct queue
{
      int a[5];
      int rear,front;
}
st;
void enqueue(int x);
void dequeue();
void display();
void main()
{
      int op,x;
      st.rear=st.front=-1;
      do
      {
            printf("n1.Insertion\n2.Deletion\n3.Print\n4.Exit");
            printf("\nEnter choice=");
            scanf("%d",&op);
            switch(op)
            {
                  case 1:if((st.rear+1)%MAX==st.front)
                  printf("\nQueue is full");
                  else
                  enqueue(x);
                  break;
                  case 2:if(st.front==-1)
                  printf("\nEmpty queue");
                  else
                  {
                        dequeue();
                  }
                  break;
                  case 3:display();
                  break;
            }
      }while(op!=4);
      getch();
}
void enqueue(int x)
{
      int i;
      printf("\nEnter data:");
      scanf("%d",&x);
      if(st.rear==-1)
      {
            st.rear++;
            st.front++;
            st.a[st.rear]=x;
      }
      else
      {
            i=st.rear;
            while(x>st.a[i])
            {
                  st.a[(i+1)%MAX]=st.a[i];
                  i=(i-1+MAX)%MAX;
                  if((i-1)%MAX==st.front)
                  break;
            }
            i=(i+1)%MAX;
            st.a[i]=x;
            st.rear=(st.rear+1)%MAX;
      }
}
void dequeue()
{
      int y;
      if(st.rear==st.front)
      {
            y=st.a[st.front];
            st.front=-1;
            st.rear=-1;
      }
      else
      {
            y=st.a[st.front];
            st.front=(st.front+1)%MAX;
      }
      printf("\nDeleted element=%d",y);
}
void display()
{
      int i;
      if(st.rear==-1)
      printf("\nEmpty queue");
      else
      {
            printf("\nQueue is:");
            i=st.front;
            while(i!=st.rear)
            {
                  printf("<%d>",st.a[i]);
                  i=(i+1)%MAX;
            }
            printf("<%d>",st.a[st.rear]);
      }
}

                  

No comments:

Post a Comment