📄 dqueue.c
字号:
/* TO PERFORM DIFFERENT OPERATIONS ON DQUEUE */
#include<stdio.h>
#include<conio.h>
#include<string.h>
#define MAX 5
typedef struct
{
int arr[MAX];
int front;
int rear;
}dqueue;
void init(dqueue *q1);
int full(dqueue *q1);
int empty(dqueue *q1);
void insertbeg(dqueue *q1,int ele);
void insertend(dqueue *q1,int ele);
int deletebeg(dqueue *q1);
int deleteend(dqueue *q1);
void display(dqueue *q1);
void main()
{
int ch,ele;
char yn;
dqueue q;
init(&q);
do
{
clrscr();
printf("\n\t ***** OPERATIONS ON CIRCULAR DQUEUE *****");
printf("\n\t 1.Insertion at Beginning..");
printf("\n\t 2.Insertion ..");
printf("\n\t 3.Deletion..");
printf("\n\t 4.Deletion at End..");
printf("\n\t 5.Exit..");
printf("\n\t Enter your choice..");
scanf("%d",&ch);
switch(ch)
{
case 1: printf("\n\t Enter the element to insert..");
scanf("%d",&ele);
insertbeg(&q,ele);
display(&q);
break;
case 2: printf("\n\t Enter the element to insert..");
scanf("%d",&ele);
insertend(&q,ele);
display(&q);
break;
case 3: ele = deletebeg(&q);
display(&q);
break;
case 4: ele = deleteend(&q);
display(&q);
break;
case 5: exit(0);
break;
default: printf("\n \t Oops!! Wrong Choice Entered...\n");
getch();
exit(0);
}
printf("\n\t Do you want to perform more operations(y/n):");
fflush(stdin);
scanf("%c",&yn);
}
while( yn =='Y' || yn == 'y');
}
void init(dqueue *q1)
{
q1->rear = -1;
q1->front = -1;
}
int full(dqueue *q1)
{
if((q1->front== 0 && q1->rear == MAX-1)||(q1->front==q1->rear+1))
return (1) ;
else
return (0);
}
int empty(dqueue *q1)
{
if(q1->front==-1 && q1->rear==-1)
return(1);
else
return(0);
}
void insertbeg(dqueue *q1,int ele)
{
int temp;
if(full(q1))
{
printf("\n\t\t!! QUEUE IS FULL !!OVERFLOW...");
getch();
}
else
{
if(q1->rear == 0)
q1->front = q1->rear = 1;
else if(q1->front > 1)
q1->front = q1->front - 1;
else
{
temp = q1->rear+1;
while(temp!=q1->front)
{
q1->arr[temp] = q1->arr[temp - 1];
temp--;
}
q1->rear++;
}
q1->arr[q1->front] = ele;
}
}
void insertend(dqueue *q1,int ele)
{
if(full(q1))
{
printf("\n\t The Queue Is Full , Overflow!");
return;
}
else if(q1->front == -1)
q1->rear = q1->front = 0;
else if(q1->rear == MAX-1)
q1->rear=0;
else
q1->rear++;
q1->arr[q1->rear]=ele;
}
int deletebeg(dqueue *q1)
{
int ele;
if(empty(q1))
{
printf("\n \t The Queue Is Empty,Underflow!");
return NULL;
}
else
{
ele = q1->arr[(q1->front)];
if(q1->front == q1->rear)
q1->front=q1->rear=-1;
else if(q1->front == MAX-1)
q1->front = 0;
else
q1->front++;
}
printf("\n\tDELETED ELEMENT IS : %d\n\n",ele);
return (ele);
}
int deleteend(dqueue *q1)
{
int ele;
if(empty(q1))
{
printf("\n\t!! Queue Is Empty !!Underflow...");
return NULL;
}
else
{
ele = q1->arr[q1->rear];
if (q1->front == q1->rear)
q1->front = q1->rear = -1;
else
q1->rear--;
}
printf("\n\tDELETED ELEMENT IS : %d\n\n",ele);
return (ele);
}
void display(dqueue *q1)
{
int i;
if(empty(q1))
return;
else
{
printf("\n \t The Contents of Queue From Front to Rear are:\n\t\t");
if(q1->front <= q1->rear)
{
for(i = q1->front ; i <= q1->rear ; i++)
printf(" %d ", q1->arr[i]);
}
else if(q1->front > q1->rear)
{
for(i = q1->front ; i <= MAX-1 ; i++)
printf(" %d ", q1->arr[i]);
for(i = 0 ; i <= q1->rear ; i++)
printf(" %d ", q1->arr[i]);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -