循环队列的实现
基本思路:利用模运算来判断队列的空与满,其他操作与思路与最基本的用数组实现队列一样
整体代码:
#include<iostream>
const int quesize=10;
typedef struct Queue{
int data[quesize]={0};
int front=0;
int rear=0;
}Queue;
using namespace std;
int Isempty(Queue*); //判队空
int Isfull(Queue*); //判队满
int Enqueue(Queue*,int); //插入数据到队列中
int Dequeue(Queue*); //删除队尾元素
void Display(Queue*); //打印队列
void Inputdata(Queue*); //输入数据
int main(void){
Queue p;
Inputdata(&p);
Dequeue(&p);
Enqueue(&p,1);
Display(&p);
return 0;
}
int Isempty(Queue* p){
return p->front==p->rear;
}
int Isfull(Queue* p){
return (p->rear+1)%quesize==p->front;
}
int Enqueue(Queue* p,int x){
if(!Isfull(p)) p->data[p->rear++]=x;
else exit(0);
return 1;
}
int Dequeue(Queue* p){
if(Isempty(p)){
cout<<"The queue is empty."<<endl;
exit(0);
}else return p->data[p->front++];
}
void Inputdata(Queue* p){
int x;
while(cin>>x){
if(!Isfull(p)){
if(p->rear+1==quesize) p->rear=0;
p->data[p->rear++]=x;
}else{
cout<<"The queue is full."<<endl;
exit(0);
}
}
cin.clear();
cin.ignore();
}
void Display(Queue* p){
int i;
if(!Isempty(p))
for(i=p->front;i<p->rear;i++) cout<<p->data[i]<<endl;
else cout<<"The queue is empty."<<endl;
}