本文涉及的循环队列的操作如下:
- 入队操作
- 出对操作
- 获得队首
/*循环队列test*/
#include<iostream>
#include<stdlib.h>
#define MaxSize 11
typedef int status;
typedef int ElemType;
typedef struct Queue{
ElemType *base;
int rear,front;
}SqQueue;
//队列的初始化
status initQueue(SqQueue &q){
q.base=new ElemType;
if(!q.base) return 0;
q.front=q.rear=0;
return 1;
}
//判断队列是否满了(入队)
status Enter(SqQueue &q,ElemType e){
if((q.rear+1)%MaxSize==q.front)return 0;
q.base[q.rear]=e;
q.rear=(q.rear+1)%MaxSize;
return 1;
}
//入队
void EnQueue(SqQueue &q){
int n,flag;
ElemType e;
printf("请输入所入队元素个数:");
scanf("%d",&n);
for(int i=0;i<n;i++){
printf("请输入第%d个数:",i+1);
scanf("%d",&e);
flag=Enter(q,e);
if(flag){
printf("入队成功!!\n");
}
else{
printf("队列已满!!\n");break;
}
}
}
//判断队列是否为空(出队)
status QueueEmpty(SqQueue &q,ElemType &e){
if(q.rear==q.front)return 0;
e=q.base[q.front];
q.front=(q.front+1)%MaxSize;
return 1;
}
//出队
void DeQueue(SqQueue &q){
int n,flag;
ElemType e;
printf("请输入出队元素的个数:");
scanf("%d",&n);
for(int i=0;i<n;i++){
flag=QueueEmpty(q,e);
if(flag)printf("%d已出队!!\n",q.base[q.front-1]);
else {
printf("队列为空!!\n");
break;
}
}
}
//判断是否队空
status Empty(SqQueue &q){
if(q.rear==q.front)return 0;
else
return 1;
}
//获得队头元素
void GetFront(SqQueue &q){
int flag=Empty(q);
if(flag) printf("队头元素为:%d\n",q.base[q.front]);
else
printf("队头为空!!\n");
}
void menu(){
printf("——————————操作代码——————————\n");
printf("入队————1\t出队————2\t获得队头————3\t退出————0\n");
printf("——————————操作代码——————————\n");
}
int main(){
int c;
SqQueue q;
initQueue(q);
while(1){
menu();
printf("请输入操作代码:");
scanf("%d",&c);
if(c==0)break;
switch(c){
case 1:EnQueue(q);break;
case 2:DeQueue(q);break;
case 3:GetFront(q);break;
default :printf("操作代码不在范围内!!!\n");
}
}
return 0;
}