#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//Start-----------循环队列定义----------
#define SIZE 10
#define DataType int
typedef struct{
DataType data[SIZE];
int front,rear;
}CirQueue;
void InitQueue(CirQueue *);//置空队列
int QueueEmpty(CirQueue *);//判空
int QueueFull(CirQueue *);//判满
void EnQueue(CirQueue *,DataType);//入队
DataType DeQueue(CirQueue *);//出队
DataType GetFront(CirQueue *);//得到队首元素
//End-----------循环队列定义----------
//Start-----------控制定义----------
int MenuSelect(); //菜单
void DisplayQueue(CirQueue *);//显示队列内容
//End-----------控制定义----------
void main(){
CirQueue Q;
char str[10];
int menu;
printf("\t\t\t循环队列操作\n\n");
InitQueue(&Q);
while(1){
menu=MenuSelect();
switch(menu){
case 1:
printf("请输入队列:(exit结束)");
while(!QueueFull(&Q)){
scanf("%s",&str);
if(strcmp(str,"exit")==0){
break;
}
EnQueue(&Q,atoi(str));
}
break;
case 2:
printf("出队操作的结果为:%d\n",DeQueue(&Q));
break;
case 3:
DisplayQueue(&Q);
break;
case 4:{
printf("队首元素为:%d\n",GetFront(&Q));
break;
}
case 5:{
printf("队列已满:%s\n",QueueFull(&Q)?"是":"不是");
break;
}
case 6:{
printf("队列为空:%s\n",QueueEmpty(&Q)?"是":"不是");
break;
}
case 7:
exit(0);
}
}
}
//function
//Start-----------控制定义----------
int MenuSelect(){
int menu;
printf("1.数据入队\t\t2.数据出队\t\t3.查看队列\n4.队首元素\t\t5.判断队满\t\t6.判断队空\n7.退出\n");
printf("请输入:");
while(1){
scanf("%d",&menu);
if(menu<1 || menu >7){
printf("输入有误!请重新输入:");
}else{
break;
}
}
return menu;
}
void DisplayQueue(CirQueue * Q){
int i;
printf("队头->");
for(i=Q->front;i!=Q->rear;i=(i+1)%SIZE){
printf("%d ",Q->data[i]);
}
printf("<-队尾\n");
}
//End-----------控制定义----------
//Start-----------循环队列方法----------
void InitQueue(CirQueue * Q){
Q->front=Q->rear=0;
}
int QueueEmpty(CirQueue * Q){
return Q->front==Q->rear;
}
int QueueFull(CirQueue * Q){
return (Q->rear+1)%SIZE==Q->front;
}
void EnQueue(CirQueue * Q,DataType d){
if(QueueFull(Q)){
printf("Queue is full");
return;
}
Q->data[Q->rear]=d;
Q->rear=(Q->rear+1)%SIZE;
}
DataType DeQueue(CirQueue * Q){
DataType d;
if(QueueEmpty(Q)){
printf("Queue is Empty");
exit(0);
}
d=Q->data[Q->front];
Q->front=(Q->front+1)%SIZE;
return d;
}
DataType GetFront(CirQueue * Q){
if(QueueEmpty(Q)){
printf("Queue is Empty");
exit(0);
}
return Q->data[Q->front];
}
//End-----------循环队列方法----------