#i nclude<stdio.h>
#i nclude<stdlib.h>
#define MAXASIZE 15
#define OVERFLOW 0
#define ERROR 0
#define OK 1
typedef struct
{
char *base;
int front;
int rear;
}SqQueue;
void quit()
{
system("cls");
}
void menu()
{
printf("***********请选择您对循环队列进行的操作************\n");
printf("1.插入数据\n");
printf("2.删除数据\n");
printf("3.输出数据\n");
printf("4.退出菜单\n");
}
int InitQueue(SqQueue &Q)//构建一个空队列
{
Q.base=(char*)malloc(MAXASIZE*sizeof(char));
if(!Q.base)exit(OVERFLOW);
Q.front=Q.rear=0;
return OK;
}
char EnQueue(SqQueue &Q ,int e,int &k)//插入元素e为队列的新的队尾元素
{
if((Q.rear+1)%MAXASIZE==Q.front) return printf("队满\n");
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXASIZE;
k++;
}
char DeQueue(SqQueue &Q ,int &e,int &k)//删除对头元素
{
if(Q.rear==Q.front) return printf("队空\n");
e=Q.base[Q.front];
printf("删除元素为:%d\n",e);
Q.front=(Q.front+1)%MAXASIZE;
k--;
return e;
}
void show(SqQueue Q,int k)
{ int i;
printf("循环队列中的元素有:\n");
for(i=0;i<k;i++)
{ printf("%d ",Q.base[Q.front]);
Q.front=(Q.front+1)%MAXASIZE;
}
printf("\n");
}
void main (){
int n,x,y,k=0,a,d,flag;
x=0;
SqQueue q;
InitQueue(q);
printf("请输入你所要输入元素的个数,请少于6个\n");
scanf("%d",&y);
printf("请输入元素\n");
for(a=0;a<y;a++)
{ scanf("%d",&x);
EnQueue(q,x,k);
}
show(q,k);
menu();
do{
printf("请选择你需要的操作(1--4):\n");
scanf("%d",&n);
if(n>=1&&n<=4)
flag=1;
else
{
flag=0;
printf("您输入有误,请重新选择!");
}
} while(flag==0);
while(flag==1)
{
switch(n)
{case 1:
{
printf("你想在队列中插入的元素是:\n");
scanf("%d",&x);
EnQueue(q,x,k);
show(q,k); break;}
case 2:
{
DeQueue(q,d,k);
show(q,k);break;
}
case 3:show(q,k);break;
case 4:quit();break;
default :break;
}
if(n==4)
{
printf("********************\n");
printf(" 谢谢使用!\n");
printf("********************\n");break;
}
else
{
menu(); /*调用菜单函数*/
do{
printf("请选择你需要的操作(1--4):\n");
scanf("%d",&n);
if(n>=1&&n<=4)
flag=1;
else
{
flag=0;
printf("您输入有误,请重新选择!");
}
} while(flag==0);
printf("\n");
}
}
}