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

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

百纵科技云主机首月9元,站群1-8C同价,美国E52670*1,32G内存 50M 899元一月

百纵科技:美国高防服务器,洛杉矶C3机房 独家接入zenlayer清洗 带金盾硬防,CPU全系列E52670、E52680v3 DDR4内存 三星固态盘阵列!带宽接入了cn2/bgp线路,速度快,无需备案,非常适合国内外用户群体的外贸、搭建网站等用途。官方网站:https://www.baizon.cnC3机房,双程CN2线路,默认200G高防,3+1(高防IP),不限流量,季付送带宽美国洛杉矶C...

ProfitServer$34.56/年,西班牙vps、荷兰vps、德国vps/不限制流量/支持自定义ISO

profitserver怎么样?profitserver是一家成立于2003的主机商家,是ITC控股的一个部门,主要经营的产品域名、SSL证书、虚拟主机、VPS和独立服务器,机房有俄罗斯、新加坡、荷兰、美国、保加利亚,VPS采用的是KVM虚拟架构,硬盘采用纯SSD,而且最大的优势是不限制流量,大公司运营,机器比较稳定,数据中心众多。此次ProfitServer正在对德国VPS(法兰克福)、西班牙v...

Sharktech鲨鱼服务器商提供洛杉矶独立服务器促销 不限流量月99美元

Sharktech(鲨鱼服务器商)我们还是比较懂的,有提供独立服务器和高防服务器,而且性价比都还算是不错,而且我们看到有一些主机商的服务器也是走这个商家渠道分销的。这不看到鲨鱼服务器商家洛杉矶独立服务器纷纷促销,不限制流量的独立服务器起步99美元,这个还未曾有过。第一、鲨鱼机房服务器方案洛杉矶机房,默认1Gbps带宽,不限流量,自带5个IPv4,免费60Gbps / 48Mpps DDoS防御。C...

循环队列为你推荐
provisionedNIST的云计算定义订单详情请问拼多多如何查看订单详情?怎么将购买的订单详情全部导出?豆瓣fm电台豆瓣和蜻蜓fmvisio使用教程如何使用microsoft visio 2013mapsource怎么用mapsource制作地球化学航迹图实数的定义数学中的“实数”是什么?色温图色温是什么意思?色温图表赵锡成美国杰出华人廖华100个成语典故及其历史人物故事 南京廖华网页错误详细信息打开网页,出现网页错误详细信息 求解决,谢了!
网站域名备案查询 burstnet 站群服务器 特价空间 哈喽图床 双12活动 火车票抢票攻略 win8升级win10正式版 好看qq空间 徐正曦 可外链相册 河南移动网 gtt 微软服务器操作系统 vip域名 如何注册阿里云邮箱 in域名 cloudlink 512mb 789 更多