循环队列:我们在队列的基础上,将顺序队列臆造为一个环状的空间,称为循环队列
循环队列最重要的判别式是所有判别位置时都必须对最大存储空间进行取余操作
输入三个数据进行测试。例:1 2 3。
#include<iostream>
#include<cstdio>
#define false 0
#define ok 1
#define maxsize 100
using namespace std;
typedef struct {
int *base;
int front;
int rear;
}squeue;
int initqueue(squeue &q){
q.base=new int(maxsize);
if(!q.base){
return false;
}
q.front=q.rear=0;
return ok;
}
void scanf_squeue(squeue &q,int n){
for(int i=1;i<=n;i++){
cin>>q.base[q.rear];
q.rear=(q.rear+1)%maxsize;
}
}
void printf_squeue(squeue q){
while(q.front!=q.rear){
cout<<q.base[q.front]<<" ";
q.front=(q.front+1)%maxsize;
}
}
int queuelength(squeue &q){
return (q.rear-q.front+maxsize)%maxsize;
}
int enqueue(squeue &q,int e){
if((q.rear+1)%maxsize==q.front){
return false;
}
q.base[q.rear]=e;
q.rear=(q.rear+1)%maxsize;
return ok;
}
int dequeue(squeue &q,int &e){
if(q.front==q.rear){
return false;
}
e=q.base[q.front];
q.front=(q.front+1)%maxsize;
return ok;
}
int main(int argc, char const *argv[]) {
squeue q;
int e=0;
initqueue(q);
scanf_squeue(q,3);
enqueue(q,4);
dequeue(q,e);
cout<<e<<endl;
printf_squeue(q);
return 0;
}