循环队列循环队列的入队和出队

循环队列  时间:2021-08-11  阅读:()

循环队列的基本操作

#define MaxSize 5 #include<stdio.h> #include<malloc.h> struct queue{ int qu[MaxSize]; int front; int rear; int tag; //front==rear时表示队列满或空的标志:tag==1表示满,tag==0表示空 }; struct queue *InitQu() {struct queue *q; q=(struct queue *)malloc(sizeof(struct queue));//分配空间 q->front=0; q->rear=0; q->tag=0; return q; } int EnQu(struct queue *q,int x) { if(q->rear==q->front && q->tag==1)//表示队列已满 return 0; else { 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(struct queue *q) { if(q->rear==q->front && q->tag==0)//表示队空 return 0; else { 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(struct queue *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(" "); } main() {struct queue *q; int c,k,x; q=InitQu(); loop: printf("---------(1).入队列请按数字键1.---------------"); printf(" ---------(2).出队列请按数字键2.---------------"); printf(" ---------(3).打印队列请按数字键3.-------------"); printf(" 请选择要进行的操作:"); scanf("%d",&c); switch(c) { case 1:{ do{ printf("请输入入队元素的值:"); scanf("%d",&x); EnQu(q,x); printf(" 是否继续入队,是请按数字键1,否则请按其他数字键!"); scanf("%d",&k); }while(k==1); goto loop; break; } case 2:{ do{ DeQu(q); printf(" 是否继续出队,是请按数字键1,否则请按其他数字键!"); scanf("%d",&k); }while(k==1); goto loop; break; } case 3:{ Display(q); goto loop; break; } } printf(" "); }

循环队列为空,s=0,front=rear=m 循环队列为满,s=1,front=rear 这两个

选c。

当frontrear,队列中元素个数为m–front+rear 当front=rear,队列为空或满,即队列中元素个数为0或m。

所以此题中队列个数为m–20+15=m–5 因为顺序查找,所以最坏结果是比较完所有数,所以为m–5

什么是循环队列的入队运算和退队运算?(好难理解啊)

循环队列:在一段固定存储空间(内存中一段顺序存储空间、等同于一个数组)实现队列的先进先出功能! 用一个指针指向队头,另一个指向队尾! 每次入队一个元素:把这个元素放在队尾指针位置,同时指针地址加1,若超出存储空间边界的末端则指向存储空间首位......

循环队列的入队和出队

例、 用带头结点的单循环链表表示一个队列,且只设一个指向队尾元素的指针p,试分别写出入队和出队算法。

入队算法 typedef struct node { <datatype> data; struct node *next; }Qnode; Qnode * in_queue ( Qnode *p, <datatype> x ) { Qnode * q; q = (Qnode*)malloc( sizeof(Qnode) ); /*取得一个新结点*/ q->data = x; /*将x置入新结点数据域中*/ q->next = p->next; p->next = q; /*将新结点插在原队列之后*/ p = q; /*p指向新的队尾结点*/ return ( p ); } 出队算法 Qnode * out_queue ( Qnode *p, <datatype> *x ) { Qnode * front, *q; if ( p->next == p ) /*空队列*/ exit; front = p->next; /*front指向表头结点*/ q = front->next; /*q指向队头元素结点*/ *x = q->data; front->next = q->next; /*删除队头元素结点*/ free ( q ); if ( front->next == front ) /*原队列只有一个元素时*/ p = front; return ( p ); }

2021年全新Vultr VPS主机开通云服务器和选择机房教程(附IP不通问题)

昨天有分享到"2021年Vultr新用户福利注册账户赠送50美元"文章,居然还有网友曾经没有注册过他家的账户,薅过他们家的羊毛。通过一阵折腾居然能注册到账户,但是对于如何开通云服务器稍微有点不对劲,对于新人来说确实有点疑惑。因为Vultr采用的是预付费充值方式,会在每月的一号扣费,当然我们账户需要存留余额或者我们采用自动扣费支付模式。把笔记中以前的文章推送给网友查看,他居然告诉我界面不同,看的不对...

个人网站备案流程及注意事项(内容方向和适用主机商)

如今我们还有在做个人网站吗?随着自媒体和短视频的发展和兴起,包括我们很多WEB2.0产品的延续,当然也包括个人建站市场的低迷和用户关注的不同,有些个人已经不在做网站。但是,由于我们有些朋友出于网站的爱好或者说是有些项目还是基于PC端网站的,还是有网友抱有信心的,比如我们看到有一些老牌个人网站依旧在运行,且还有新网站的出现。今天在这篇文章中谈谈有网友问关于个人网站备案的问题。这个也是前几天有他在选择...

华纳云-618大促3折起,18元/月买CN2 GIA 2M 香港云,物理机高防同享,10M带宽独享三网直连,无限流量!

官方网站:点击访问华纳云活动官网活动方案:一、香港云服务器此次推出八种配置的香港云服务器,满足不同行业不同业务规模的客户需求,同时每种配置的云服务都有不同的带宽选择,灵活性更高,可用性更强,性价比更优质。配置带宽月付6折季付5.5折半年付5折年付4.5折2年付4折3年付3折购买1H1G2M/99180324576648直达购买5M/17331556710081134直达购买2H2G2M892444...

循环队列为你推荐
bft请问BFT高级是什么水平的?app退款app退款怎样才算恶意退款?ucosiiucosii操作系统能运行什么软件巴西时区巴西和中国的时差是多少 里约和北京时差怎么算diskgenius免费版给我发一个 DISKGenius恢复数据破解版的可以吗,或者其他破解版的也可以,只要能恢复数据,感激不尽,...电子听诊器听诊器有哪些用途的知识rs485协议RS485和RS232协议的区别数据管理制度求一份工时定量管理制度阶乘函数C语言中有计算阶乘的函数吗 不是自己写,,,是那种可以直接调用的函数武汉教育云平台武汉天喻教育科技有限公司怎么样?
东莞服务器租用 qq云存储 flashfxp怎么用 联通c套餐 香港加速器 加勒比群岛 BWH 香港新世界电讯 免费网络电视 嘟牛 699美元 789电视剧 如何建立邮箱 沈阳主机托管 浙江服务器 稳定空间 服务器防御 国外免费网盘 腾讯云平台 .htaccess 更多