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

循环队列  时间: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 ); }

提速啦:美国多IP站群云服务器 8核8G 10M带宽 7IP 88元/月

提速啦(www.tisula.com)是赣州王成璟网络科技有限公司旗下云服务器品牌,目前拥有在籍员工40人左右,社保在籍员工30人+,是正规的国内拥有IDC ICP ISP CDN 云牌照资质商家,2018-2021年连续4年获得CTG机房顶级金牌代理商荣誉 2021年赣州市于都县创业大赛三等奖,2020年于都电子商务示范企业,2021年于都县电子商务融合推广大使。资源优势介绍:Ceranetwo...

选择Vultr VPS主机不支持支付宝付款的解决方案

在刚才更新Vultr 新年福利文章的时候突然想到前几天有网友问到自己有在Vultr 注册账户的时候无法用支付宝付款的问题,当时有帮助他给予解决,这里正好顺带一并介绍整理出来。毕竟对于来说,虽然使用的服务器不多,但是至少是见过世面的,大大小小商家的一些特性特征还是比较清楚的。在这篇文章中,和大家分享如果我们有在Vultr新注册账户或者充值购买云服务器的时候,不支持支付宝付款的原因。毕竟我们是知道的,...

华为云(69元)828促销活动 2G1M云服务器

华为云818上云活动活动截止到8月31日。1、秒杀限时区优惠仅限一单!云服务器秒杀价低至0.59折,每日9点开抢秒杀抢购活动仅限早上9点开始,有限量库存的。2G1M云服务器低至首年69元。2、新用户折扣区优惠仅限一单!购云服务器享3折起加购主机安全及数据库。企业和个人的优惠力度和方案是不同的。比如还有.CN域名首年8元。华为云服务器CPU资源正常没有扣量。3、抽奖活动在8.4-8.31日期间注册并...

循环队列为你推荐
extractdataxp3文件怎么打开怎样进入观看?逗号运算符c语言中逗号运算符是从左向右算,还是从右向左算啊exe文件打不开我的电脑里面的EXE文件打不开啦cs躲猫猫cs躲猫猫的游戏叫什么局域网ip扫描工具局域网的IP段怎么扫描rs485协议485总线上modbus通信协议?qsv视频格式转换器简单好用的qsv格式转换器有哪些?没有nvidia控制面板没有nvidia控制面板有什么用没有nvidia控制面板电脑没有nvidia显卡控制面板是怎么回事移动硬盘提示格式化急!!移动硬盘提示:需要格式化才可以使用 怎么办??
vps论坛 网通vps 花生壳免费域名申请 ftp空间 外贸主机 softbank官网 mobaxterm 本网站在美国维护 大容量存储器 合租空间 中国电信测速网 中国电信宽带测速器 中国电信网络测速 七牛云存储 ncp是什么 美国代理服务器 卡巴斯基免费下载 ddos攻击工具 大容量存储方案 更多