#include
#include
#define MaxSize 10 // 队列最大容量
typedef int DataType; //队列中的元素类型
typedef struct Queue{
DataType Queue[MaxSize];
int front;
int rear;
}Queue;
//初始化队列
void InitQueue(Queue *Q){
Q->front=Q->rear=0;
}
//判断队列是否为空
int IsEmpty(Queue *Q){
if(Q->front== Q->rear){
printf("队列为空!n");
return 1;
}
return 0;
}
// 判断队列是否为满
int IsFull(Queue *Q){
//尾指针+1追上队头指针,队列已满
if((Q->rear +1)%MaxSize == Q->front){
printf("队列已满!n");
return 1;
}
return 0;
}
// 入队操作
int EnQueue(Queue *Q,DataType e){
if(IsFull(Q)){
printf("队列已满,不能入队!n");
return 0;
}
Q->Queue[Q->rear] = e;
Q->rear = (Q->rear+1)%MaxSize; //重新设置队尾指针
}
// 出队操作
void DeQueue(Queue *Q,DataType *e){
if(IsEmpty(Q)){
printf("队列为空!n");
}
*e = Q->Queue[Q->front];
Q->front = (Q->front+1)%MaxSize; //重新设置队头指针
}
// 清空队列
void CleaQueue(Queue *Q){
Q->front = Q->rear = 0;
}
// 打印队列元素
void PrintQueue(Queue *Q){
if(IsEmpty(Q)){
printf("队列为空!n");
}
else{
int i = Q->front;
if(Q->front < Q->rear){
for(i;irear;i++){
printf("%-3d",Q->Queue[i]);
}
}
else{
for(i;irear+MaxSize;i++){
printf("%-3d",Q->Queue[i]);
}
}
}
printf("n");
}
int main(){
Queue Q;
DataType e;
int n;
printf("第一次使用必须初始化!n");
do{
printf("n-----主菜单-----n");
printf(" 1 初始化循环队列:n");
printf(" 2 进队一个元素:n");
printf(" 3 出队一个元素:n");
printf(" 4 打印队列元素:n");
printf(" 5 结束应用:n");
printf("n------------------n");
scanf("%d",&n);
switch(n){
case 1:
InitQueue(&Q);
break;
case 2:
printf("请输入要插入的元素:e = ");
scanf("%d",&e);
EnQueue(&Q,e);
PrintQueue(&Q);
break;
case 3:
DeQueue(&Q,&e);
printf("出队的元素 :e = %d",e);
printf("");
break;
case 4:
PrintQueue(&Q);
break;
}
}while(n<=4);
return 0;
}