/* 1.初始化
2.进队列
3.出队列
4.读取队列
5.判断队列是否为空
6.判断队列是否已满
7.求队列长度
*/
#include<stdio.h>
#define maxsize 5
typedef struct {
int data[maxsize];
int front,rear;
}CircQueue;
//循环队列的初始化,令对头队尾指针归零
void InitQueue(CircQueue &L){
L.rear=L.front=0;
}
//进队列
void EnQueue(CircQueue &L,int x){
if((L.rear+1)%maxsize==L.front){
printf("循环队列已满!不能再输入数据!\n");
return;
}
L.data[L.rear]=x;
L.rear=(L.rear+1)%maxsize;
return;
}
//出队列
void DeQueue(CircQueue &L){
if(L.rear==L.front){
printf("循环队列为空!");
return;
}
printf("%d",L.data[L.front]);
L.front=(L.front+1)%maxsize;
return;
}
//读取对头元素
void GetFront(CircQueue &L){
int x;
if(L.rear==L.front){
printf("循环队列为空,不存在对头元素!");
return;
}
x=L.data[L.front];
printf("对头元素为:%d\n",x);
return;
}
//半段队列是否为空
void QueueEmpty(CircQueue &L){
if(L.rear==L.front){
printf("循环队列为空!");
return;
}
}
//半段队列是否已满
void QueueFull(CircQueue &L){
if((L.rear+1)%maxsize==L.front){
printf("循环队列已满!");
return;
}
}
//求队列长度
int QueueSize(CircQueue &L){
int count;
count=(L.rear-L.front+maxsize)%maxsize;
//printf("循环队列的长度为:",count);
return count;
}
//删除对头元素
void DeQueue1(CircQueue &L){
if(L.rear==L.front){
return;
}
L.front=(L.front+1)%maxsize;
printf("删除对头元素后的对头元素为:%d\n",L.data[L.front]);
return;
}
//主函数
int main(){
int i,n,x,k;
CircQueue L;
InitQueue(L);
printf("请约定一个结束进队的数:");
scanf("%d",&n);
for(i=0;i<maxsize;i++){
printf("请输入数据:");
scanf("%d",&x);
if(x==n){
break;
}
EnQueue(L,x);
if(L.rear==maxsize-1){
break;
}
}
GetFront(L);
DeQueue1(L);
k=QueueSize(L);
printf("循环队列长度为:%d\n",k);
printf("出对!\n");
for(i=0;i<k;i++){
DeQueue(L);
}
return 0;
}

浙公网安备 33010602011771号