| Article Index |
|---|
| CIRCULAR QUEUE IMPLEMENTATION USING ADT |
| SOURCE CODE |
| DOCUMENTATION |
| TEST CASES AND COMPATIBILITY |
| All Pages |
Page 2 of 4
CODE:
#include"stdio.h"
#include"stdlib.h"
typedef struct qrec
{
int *a;
int front,rear,cap,size;
}*queue;
queue makeempty(queue q)
{
q->rear=-1;
q->front=-1;
return q;
}
queue createqueue(int max)
{
queue q;
q=(queue)malloc(sizeof(struct qrec));
q->a=(int*)malloc(sizeof(int)*max);
makeempty(q);
q->cap=max;
return q;
}
int isfull(queue q)
{
return q->rear==q->cap-1 && q->front==0 || q->front==q->rear+1;
}
int isempty(queue q)
{
return q->front==-1;
}
void enqueue(queue q,int x)
{
if(isfull(q))
printf("\n Overflow");
else
{
q->rear=(q->rear+1)%(q->cap);
q->a[q->rear]=x;
if(q->front==-1)
q->front=0;
}
}
int dequeue(queue q)
{
if(isempty(q))
printf("\n Underflow");
else
{
if(q->rear==q->front)
makeempty(q);
else
{
q->front=(q->front+1)%(q->cap);
return q->a[q->front];
}
}
}
int front(queue q)
{
if(isempty(q))
printf("\n Underflow");
else
return q->a[q->front];
}
int frontanddelete(queue q)
{
int p;
if(isempty(q))
{
printf("underflow");
return 0;
}
else
{
p=front(q);
dequeue(q);
return p;
}
}
void display(queue q)
{
int i;
printf("\n CONTENTS");
for(i=q->front;i!=q->rear;i=(i+1)%q->cap)
printf("\t%d",q->a[i]);
printf("\t%d",q->a[i]);
}
int main()
{
int m,b,c;
queue q;
printf("\nEnter the max size");
scanf("%d",&m);
q=createqueue(m);
printf("\n MENU\n1.Enqueue\n2.Dequeue\n3.Front\n4.Front and delete\n5.Exit");
while(1)
{
printf("\n ENTER UR CHOICE");
scanf("%d",&b);
switch(b)
{
case 1:
printf("\n Enter a no");
scanf("%d",&c);
enqueue(q,c);
display(q);
break;
case 2:dequeue(q);
printf("\n Deq");
display(q);
break;
case 3:printf("\n Front value is %d",front(q));
display(q);
break;
case 4:frontanddelete(q);
display(q);
break;
case 5:exit(0);
break;
default:printf("\n Invalid option");
break;
}
}
}




