C语言 环形队列
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//环形队列,实现队列的入队,出队和显示操作//注意:
只有一个数组。
#define MaxSize 10
#include<stdio.h>
#include<malloc.h>
typedef struct que {int qu[MaxSize];
int front;//front和rear表示数组值的序号
int rear;
int tag; //front==rear时表示队列满或空的标志:
tag==1表示满,tag==0表示空}Que;
Que *InitQu()//初始化{Que *q;
q=(Que *)malloc(sizeof(Que));//分配空间
q->front=0;
q->rear=0;
q->tag=0;
return q;}int EnQu(Que *q,int x)//入队{if(q->rear==q->front && q->tag==1)//表示队列已满
return 0;
else {printf("入队成功!\n");
q->qu[q->rear]=x;
q->rear=(q->rear+1)%MaxSize; //尾指针向后走一步
if(q->rear==q->front) //若有元素入队以后出现q->rear==q->front,则表示队列满q->tag=1;
return 1;}}
int DeQu(Que *q)//出队{if(q->rear==q->front && q->tag==0)//表示队空
return 0;
else {printf("出队成功!\n");
q->qu[q->front]=0;//将队头元素的值赋值为0
q->front=(q->front+1)%MaxSize;//头指针向后走一步
if(q->rear==q->front)//若有元素出队以后出现q->rear==q->front,则表示队列空q->tag=0;
return 1;}}
void Display(Que *q)//显示{int n,i;//n为队列中元素的个数
if(q->rear==q->front && q->tag==1)//队列满
n=MaxSize;
else
n=(q->rear-q->front+MaxSize)%MaxSize;
for(i=0;i<n;i++)
printf("%4d",q->qu[(q->front+i)%MaxSize]);
printf("\n");}int main(){Que *q;
int c,x;//代表选择项
q=InitQu();
while
(1){printf("[0]退出[1]入队[2]出队[3]显示:
");
scanf("%d",&c);
if(c==0)break;
else if(c==1){scanf("%d",&x);
if(!EnQu(q,x))printf("队已满!\n");}else if(c==2){if(!DeQu(q))printf("队已空!\n");}else if(c==3)Display(q);
else printf("输入不合理,请重新输入:
");}return 0;}。