#include <stdio.h>
#include <stdlib.h>
#define N 5
typedef struct Node
{
int elem[N];
int front;
int rear;
}SeqQueue;
int initQueue(SeqQueue *Q);//初始化循环队列
int enterQueue(SeqQueue *Q);//循环队列入队
int deleteQueue(SeqQueue *Q);//循环队列出队
void display(SeqQueue *Q);//循环队列显示
int main(void)
{
SeqQueue Q;
int a;
int b;
while (1)
{
printf("\n************************\n");
printf("1.InitQueue\n");
printf("2.EnterQueue\n");
printf("3.DeleteQueue\n");
printf("4.DisplayQueue\n");
printf("5.EXIT\n");
printf("*************************\n");
printf("Please input the number of the menu\n");
scanf("%d",&a);
switch (a)
{
case 1:b = initQueue(&Q);
if (b == 1)
{
printf("Init Queue Success\n");
}
else
{
printf("Init Queue Fial\n");
}
break;
case 2:b = enterQueue(&Q);
if (b==1)
{
printf("Enter Queue Success\n");
}
else
{
printf("Enter Queue Fail\n");
}
break;
case 3:b = deleteQueue(&Q);
if (b==1)
{
printf("Delete Queue Success\n");
}
else
{
printf("Delete Queue Fail\n");
}
break;
case 4:display(&Q);
break;
case 5:exit(0);
default:printf("You input the number of menu is error\n");
printf("Please input the number again\n");
break;
}
}
}
int initQueue(SeqQueue *Q)
{
Q->front = Q->rear = 0;//将头指针和尾指针都指向第一个
return 1;
}
int enterQueue(SeqQueue *Q)
{
int x;
if ((Q->rear + 1) % N == Q->front)//尾指针加上一,则追上头指针,表示队列满
return 0;
printf("Please input the figure that you want to add\n");
scanf("%d",&x);
Q->elem[Q->rear] = x;
Q->rear = (Q->rear + 1) % N;//重新设置尾指针
return 1;
}
int deleteQueue(SeqQueue *Q)
{
if (Q->front==Q->rear)//如果两个指针相同,表示队列为空
{
return 0;
}
printf("Delete data success\n");
printf("The number is %d\n",Q->elem[Q->front]);
Q->front = (Q->front + 1) % N;//重设头指针
return 1;
}
void display(SeqQueue *Q)
{
int i = Q->front;//先将i指向头指针
while (i!=Q->rear)
{
printf("%d\t",Q->elem[i]);
i = (i + 1) % N;//注意i的更新也要想尾指针那样更新,否则将陷入死循环中,因为i一直增长,而Q->rear循环
}
printf("\n");
}
循环队列
最新推荐文章于 2019-07-22 14:37:16 发布