//循环队列
#include<stdio.h>
#define MaxSize 50
typedef struct{
int data[MaxSize];
int front,rear;
}SqQueue;
//初始化
void InitQueue(SqQueue &Q){
Q.rear=Q.front=0;
}
//判队空
bool isEmpty(SqQueue Q){
if(Q.rear==Q.front)
return true;
else
return false;
}
//入队
bool EnQueue(SqQueue &Q,int x){
if((Q.rear+1)%MaxSize==Q.front)//队满
return false;
Q.data[Q.rear]=x;
Q.rear=(Q.rear+1)%MaxSize;//队尾指针+1取模(循环)
return true;
}
//出队
bool DeQueue(SqQueue &Q,int &x){
if(Q.rear==Q.front)//队空报错
return false;
x=Q.data[Q.front];
Q.front=(Q.front+1)%MaxSize;
return true;
}
//打印队列
bool PrintQueue(SqQueue Q){
if(isEmpty(Q))
return false;
for(int i=Q.front;i<Q.rear;i=(i+1)%MaxSize){
printf("%d ",Q.data[i]);
}
return true;
}
int main(){
SqQueue Q;
int x;
InitQueue(Q);
EnQueue(Q,1);
EnQueue(Q,2);
EnQueue(Q,3);
EnQueue(Q,4);
EnQueue(Q,5);
DeQueue(Q,x);
printf("出队:%d\n",x);
DeQueue(Q,x);
printf("出队:%d\n",x);
PrintQueue(Q);
}
运行结果:
出队:1
出队:2
3 4 5