#include<stdio.h>
#include<stdlib.h>
#define MAX 5
typedef int datatype;
typedef struct node
{
datatype data[MAX];
int front, rear;
}queue;
queue *a, *b, *c;
void initQueue(queue*& Q)
{
Q = (queue*)malloc(sizeof(queue));
Q->front = 0;
Q->rear = 0;
}
int isEmpty(queue* Q)
{
if (Q->front == Q->rear)
return 1;
else
return 0;
}
int isFull(queue* Q)
{
if ((Q->rear + 1) % MAX == Q->front)
return 1;
else
return 0;
}
void EnQue(queue*& Q, int x)
{
Q->data[Q->rear] = x;
Q->rear = (Q->rear + 1) % MAX;
}
void DeQue(queue*& Q)
{
printf(" 出队元素为:%d\n", Q->data[Q->front]);
Q->front = (Q->front + 1) % MAX;
}
void getFront(queue* Q)
{
printf(" 队头元素为:%d\n", Q->data[Q->front]);
}
void printQue(queue* Q)
{
int x = Q->front;
while (x!= Q->rear)
{
printf("%d ", Q->data[x]);
x = (x + 1) % MAX;
}
}
int main()
{
int k = 100;
int x;
do
{
printf("\n\n");
printf("\n 1.队列初始化");
printf("\n 2.判断队列是否为空");
printf("\n 3.判断队列是否未满");
printf("\n 4.将值为x的元素入队");
printf("\n 5.元素出队,并返回出队的元素");
printf("\n 6.获取对头元素");
printf("\n 7.打印队列元素");
printf("\n 0.结束程序运行");
printf("\n =====================");
printf("\n 请输入要执行的操作: ");
scanf_s("%d", &k);
switch (k)
{
case 1:
initQueue(a);
break;
case 2:
if (isEmpty(a))
printf(" 队列为空\n");
else
printf(" 队列非空\n");
break;
case 3:
if (isFull(a))
printf(" 队列已满\n");
else
printf(" 队列未满\n");
break;
case 4:
printf(" 请输入进队的值:");
scanf_s("%d", &x);
getchar();
if (isFull(a))
printf(" 队列已满\n");
else
{
EnQue(a, x);
printf(" 入队后的完整队列为:");
printQue(a);
}
break;
case 5:
if (isEmpty(a))
printf(" 队列已空\n");
else
{
DeQue(a);
printf(" ");
printQue(a);
}
break;
case 6:
getFront(a);
break;
case 7:
printf(" ");
printQue(a);
break;
}
} while (k != 0);
printf("\n 按回车键,返回...\n");
getchar();
return 0;
}