运行的结果
运行结果说明:
1.为了清清楚楚的表示队首队尾,我设置的打印函数把对应的队头队尾进行了打印
2.按照循环队列的知识,少使用一个位置,通过(q.rear+1)%MAXQSIZE==q.front来判断是否满,因此系统第一次插入的时候最后一个位置随机了一个大数
//循环队列的基本操作模拟实现
#include<stdio.h>
#include<stdlib.h>
#define MAXQSIZE 10
typedef struct {
int *base;
int front;
int rear;
}SqQueue;
//队列初始化
int InitQueue(SqQueue &q){
q.base=(int*)malloc(MAXQSIZE*sizeof(int));
if(!q.base){
exit(-1);
}
q.rear=q.front=0;
}
//入队的操作
int EnQueue(SqQueue &q,int e) {
//判断是否满
if((q.rear+1)%MAXQSIZE==q.front){
printf("当前的队列已满");
return 0;
}
//入队
q.base[q.rear]=e;
//修改队尾坐标
q.rear=(q.rear+1)%MAXQSIZE;
return 1;
}
//出队的操作
int DeQueue(SqQueue &q,int &e){
//判断是否空
if(q.rear==q.front){
return 0;
}
//接收出队元素
e=q.base[q.front];
//修改队头坐标
q.front=(q.front+1)%MAXQSIZE;
}
//队列的长度计算
int QueueLength(SqQueue q){
return (q.rear-q.front+MAXQSIZE)%MAXQSIZE;
}
//从头至尾打印元素
void print(SqQueue q){
printf("\n");
for(int i=0;i<MAXQSIZE;i++){
printf("%d",q.base[i]);
if(i==q.rear){
printf("队尾");
}
if(i==q.front){
printf("队头");
}
printf("\n");
}
}
int main(){
SqQueue q;
InitQueue(q);
for(int i=0;i<9;i++){
EnQueue(q,i);
}
printf("当前的队列长度为:%d",QueueLength(q));
print(q);
int e;
DeQueue(q,e);
DeQueue(q,e);
DeQueue(q,e);
EnQueue(q,11);
EnQueue(q,12);
EnQueue(q,13);
EnQueue(q,13); //队列已满,失败
print(q);
return 0;
}