//下面为循环队列
#include<stdio.h>
#include<stdlib.h>
#define OVERFLOW -2
#define MAXQSIZE 100 /*队列的最大长度*/
typedef struct {
int *base; // 队列的元素空间头指针指示器
int front;
int rear; /*尾指针指示器*/
}SqQueue;
int InitQueue(SqQueue &Q) {//初始化操作
Q.base = (int * )malloc(MAXQSIZE*sizeof(int));
if (!Q. base) exit (OVERFLOW);
Q.front=Q.rear =0;
return 1;
}
int EnQueue(SqQueue &Q) {//入队操作
int e;
if ((Q. rear+ 1) % MAXQSIZE == Q. front)
{
printf("队列已满,不能进队\n");
return -1;//满标志
}
printf("请输入进队元素:");
scanf("%d",&e);
Q.base[Q.rear] = e;//进队
Q.rear = (Q. rear + 1) % MAXQSIZE;//队尾指针后移
return 1;
}
int DeQueue (SqQueue &Q) {//出队操作
int e;
if (Q. front == Q. rear) {
printf("队列已经为空\n");
return -1;
}
e = Q. base[Q. front];//队头出队
printf("%d 出队\n",e);
Q.front = (Q.front + 1) % MAXQSIZE;//队头下标后移
return 1;
}
void tip()
{
printf("*************\n");
printf("*输入1 进队 *\n");
printf("*输入2 出对 *\n");
printf("*输入0 退出 *\n");
printf("*请选择: *\n");
printf("*************\n");
}
int main()
{
int k;
SqQueue Q;
InitQueue(Q);//初始化
tip();
while(scanf("%d",&k),k)
{
switch(k)
{
case 1:
EnQueue(Q);
tip();
printf("操作完毕\n");
break;
case 2:
DeQueue(Q);
tip();
printf("操作完毕\n");
break;
}
}
return 0;
}