採用順序儲存實現迴圈佇列的初始化、入隊、出隊操作。
//////////////////////下面為迴圈佇列
#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;
}
////////////