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

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

随风云25元/月 ,德阳高防云服务器 2核2G 10M 75元/月 内蒙古三线BGP服务器 2核2G 5M

公司介绍成都随风云科技有限公司成立于2021年,是国内领先的互联网业务平台服务提供商。公司专注为用户提供低价高性能云计算产品,致力于云计算应用的易用性开发,并引导云计算在国内普及。目前公司研发以及运营云服务基础设施服务平台(IaaS),面向全球客户提供基于云计算的IT解决方案与客户服务,拥有丰富的国内BGP、双线高防、香港等优质的IDC资源。公司一直秉承”以人为本、客户为尊、永续创新&...

RAKsmart美国VPS上市,活动期间5折抢购仅$30,$1.99/月

RAKsmart机房将于7月1日~7月31日推出“年中大促”活动,多重惊喜供您选择;爆款I3-2120仅30美金秒杀、V4新品上市,活动期间5折抢购、爆款产品持续热卖、洛杉矶+硅谷+香港+日本站群恢复销售、G口不限流量产品超低价热卖。美国VPS、日本VPS及香港VPS享全场7折优惠;爆款VPS $ 1.99/月限量秒杀,10台/天,售完即止, VPS 7折优惠码:VPS-TP-disRAKsmar...

10GBIZ(月$2.36 ), 香港和洛杉矶CN2 GIA

10GBIZ服务商经常有看到隔壁的一些博客分享内容,我翻看网站看之前有记录过一篇,只不过由于服务商是2020年新成立的所以分享内容比较谨慎。这不至今已经有将近两年的服务商而且云服务产品也比较丰富,目前有看到10GBIZ服务商有提供香港、美国洛杉矶等多机房的云服务器、独立服务器和站群服务器。其中比较吸引到我们用户的是亚洲节点的包括香港、日本等七星级网络服务。具体我们看看相关的配置和线路产品。第一、香...

循环队列为你推荐
好私服完美国际什么有什么好私服啊sap是什么SAP是什么东西订单详情淘宝购物记录具体指什么?是订单详情还是交易聊天记录???cs躲猫猫cs1.6捉迷藏模式怎么玩啊cs躲猫猫CS1.6捉迷藏具体的玩法?visio使用教程怎样使用visio画E-R图实数的定义什么是实数?实数的概念是什么rs485协议485总线上modbus通信协议?rs485协议HART modbus profibus 这三种协议有什么区别?这几种协议都是干什么用的?讯飞tts有用过科大讯飞TTS语音合成系统的吗
如何查询ip地址 高防dns 香港vps99idc godaddy域名优惠码 双12活动 win8升级win10正式版 好看的桌面背景图片 云图标 panel1 华为4核 小米数据库 ftp教程 免费全能主机 申请网页 空间租赁 空间登陆首页 沈阳主机托管 沈阳idc 美国主机 中美互联网论坛 更多