#include<stdio.h>
#include<stdlib.h>
int sizec,sizep;
struct queue
{
int *item;
int f,r,cnt;
};
typedef struct queue QUE;
void insertpriority(QUE *q)
{
if(q->cnt==sizep)
{
printf("Queue FULL\nReallocating\n");
q->item=((int *)realloc(q->item,2*sizep));
sizep=2*sizep;
}
printf("Enter item : ");int items;scanf("%d",&items);
int j=q->r;
while(j>=q->f && *(q->item+j)>items)
{
*(q->item+j+1)=*(q->item+j);
j--;
}
*(q->item+j+1)=items;
q->r++;q->cnt++;
}
void delete(QUE *q)
{
if(q->cnt==0)
return;
printf("Deleted %d\n",*(q->item+q->f));
q->f++;q->cnt--;
if(q->f>q->r)
{
q->r=-1;q->f=0;
}
}
void display(QUE q)
{
if(q.cnt==0)
{
printf("Queue is Empty\n");return;
}
int j=0;
while(j<q.cnt)
{
printf("%d ",*(q.item+q.f));
q.f=(q.f+1)%sizec;
j++;
}
printf("\n");
}
void insertcircular(QUE *q)
{
if(q->cnt==sizec)
{
printf("Queue FULL\nReallocating\n");
q->item=((int *)realloc(q->item,2*sizec*sizeof(int)));
sizec=2*sizec;
}
printf("Enter item : ");int items;scanf("%d",&items);
q->r=(q->r+1)%sizec;
*(q->item+q->r)=items;
q->cnt++;
}
void priority(QUE *QP)
{
printf("1.Insert\n2.Delete\n3.Display\nEnter Your Choice : ");int ch1;scanf("%d",&ch1);
switch(ch1)
{
case 1:insertpriority(QP);break;
case 2:delete(QP);break;
case 3:return;
default:exit(0);
}
}
void circular(QUE *QC)
{
printf("1.Insert\n2.Delete\n3.Display\nEnter Your Choice : ");int ch1;scanf("%d",&ch1);
switch(ch1)
{
case 1:insertcircular(QC);break;
case 2:delete(QC);break;
case 3:return;
default:exit(0);
}
}
void main()
{
printf("Enter Size of Circular Queue : ");scanf("%d",&sizec);
QUE QC;QC.item=((int *)malloc(sizec*sizeof(int)));
printf("Enter Size of Priority Queue : ");scanf("%d",&sizep);
QUE QP;QP.item=((int *)malloc(sizep*sizeof(int)));
QC.f=QP.f=QC.cnt=QP.cnt=0;
QC.r=QP.r=-1;
int ch,ch1;
for(;;)
{
printf("1.Circular Queue\n2.Priority Queue\nEnter Your Choice : ");scanf("%d",&ch);
if(ch==1)
{
circular(&QC);display(QC);
}
else if(ch==2)
{
priority(&QP);display(QP);
}
else
{
printf("Invalid Choice\n");break;
}
}
}
In Circular Queue , assuming size of it is 3,after performing following set of operations,it results in garbage value Storage 1)Size of Circular Queue=3 2)Insert 3 elements 3) Delete once 4)Perform Insertion twice again