Thursday, February 12, 2009

Circular Queue in C

#include
#include
#define n 5
struct cqueue{
int a[n],rear,front;
}*cq;
typedef struct cqueue cque;
int empty(cque *cq);
int full(cque *cq);
void insert(cque *cq,int);
void del(cque *cq);
void disp(cque *cq);
void main()
{
int ch,no;
clrscr();
cq->front=cq->rear=-1;
do
{
textattr(ch);
printf("\ncase 1:insert"
"\ncase 2:delete"
"\ncase 3:display"
"\ncase 4:empty"
"\ncase 5:full"
"\ncase 6:get_rear"
"\ncase 7:get_front"
"\ncase 8:exit");
cprintf("\nenter req case ");
scanf("%d",&ch);
switch(ch)
{
case 1:printf("\nenter no ");
scanf("%d",&no);
insert(cq,no);
break;
case 2:del(cq);
//printf("\ndeleted no is %d",no);
break;
case 3:disp(cq);
break;
case 4:no=empty(cq);
if(no==1)
printf("empty");
else
printf("not empty");
break;
case 5:if(cq->rear==n-1)
cq->rear=0;
else
cq->rear++;
no=full(cq);
if(no==1)
printf("full");
else
{
printf("not full");
if(cq->rear==0)
cq->rear=n-1;
else
cq->rear--;
}
break;
case 6:if(empty(cq))
printf("\nrear->-1");
else
printf("\nrear->%d value %d",cq->rear,cq->a[cq->rear]);
break;
case 7:if(empty(cq))
printf("\nfront->-1");
else
printf("\nfront->%d value %d",cq->front,cq->a[cq->front]);
break;
case 8:printf("GOOD BYE!!");
getch();
break;
default:printf("wrong case");
}
getch();
}while(ch!=8);
}

int empty(cque *cq)
{
if(cq->front==-1)
return(1);
else
return(0);
}

int full(cque *cq)
{
if(cq->rear==cq->front)
{
if(cq->rear==0)
cq->rear=n-1;
else
cq->rear--;
return(1);
}
else
return(0);
}

void insert(cque *cq,int no)
{
if(cq->rear==n-1)
cq->rear=0;
else
cq->rear++;
if(full(cq))
printf("circular queue full");
else
{
cq->a[cq->rear]=no;
if(cq->front==-1)
cq->front++;
}
}

void disp(cque *cq)
{
int i=cq->front;
if(empty(cq))
printf("\nempty");
else
{
while(i!=cq->rear)
{
printf("%d \t",cq->a[i]);
if(i==n-1)
i=0;
else
i++;
}
printf("%d",cq->a[cq->rear]);
}
}

void del(cque *cq)
{
int temp;
if(empty(cq))
{
printf("\ncircular queue empty");
}
else
{
temp=cq->a[cq->front];
if(cq->front==cq->rear)
cq->front=cq->rear=-1;
else
{
if(cq->front==n-1)
cq->front=0;
else
cq->front++;
}
printf("\ndeleted no is %d",temp);
}
}

No comments:

Post a Comment