循环队列循环队列Q(1:m),初始状态为front=rear=m.

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

循环队列的优点是什么?如何判断它的空和满?

优点: 相对于直线队列来讲,直线队列在元素出队后,头指针向后移动,导致删除元素后的空间无法在利用,即使元素个数小于空间大小,依然无法再进行插入,即所谓的“假上溢”。

当变成循环队列之后,删除元素后的空间仍然可以利用,最大限度的利用空间。

判断方式: 1、采用计数器来判断,空时,计数器为0,满时,计数器为maxsize。

2、另设一个布尔变量以匹别队列的空和满。

3、少用一个元素的空间,约定入队前,测试尾指针在循环意义下加1后是否等于头指针,若相等则认为队满。

扩展资料: 三种基本运算: 1、置队空 voidInitQueue(CirQueue*Q){ Q->front=Q->rear=0;Q->count=0; }//计数器置0。

2、判队空 intQueueEmpty(CirQueue*Q){ returnQ->count==0; }//队列无元素为空。

3、判队满 intQueueFull(CirQueue*Q){ returnQ->count==QueueSize;}//队中元素个数等于QueueSize时队满。

注意: 队列的操作特点是“先进先出”。

前者主要是头指针、尾指针的使用,后者主要是理解循环队列提出的原因及其特点。

两者都要掌握队列空与满的判定条件以及出队列、入队列操作的实现。

参考资料来源:搜狗百科--循环队列

循环队列有哪些优缺点?

1、循环队列的优点:   可以有效的利用资源。

用数组实现队列时,如果不移动,随着数据的不断读写,会出现假满队列的情况。

即尾数组已满但头数组还是空的;循环队列也是一种数组,只是它在逻辑上把数组的头和尾相连,形成循环队列,当数组尾满的时候,要判断数组头是否为空,不为空继续存放数据。

  2、循环队列的缺点:   循环队列中,由于入队时尾指针向前追赶头指针;出队时头指针向前追赶尾指针,造成队空和队满时头尾指针均相等。

因此,无法通过条件front==rear来判别队列是"空"是"满"。

  3、拓展知识:   为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。

存储在其中的队列称为循环队列。

循环队列如何实现啊??

提供C语言的实现,你自己读下代码,学习下: #include<stdio.h> #include<process.h> #include<iostream.h> #include<stdlib.h> #define MaxSize 100 typedef int ElemType; typedef struct { ElemType data[MaxSize]; int front; int rear; }CircSeqQueue; //顺序循环队列的初始化 void QueueInitial(CircSeqQueue *pQ) { //创建一个又指针pQ所指向的空顺序循环队列 pQ->front=pQ->rear=0; } //顺序循环队列判空 int IsEmpty(CircSeqQueue *pQ) {//顺序循环队列为空时返回1,否则返回0 return pQ->front==pQ->rear; } //顺序循环队列判满 int IsFull(CircSeqQueue *pQ) {//循环队列为满时返回1,否则返回0 return (pQ->rear+1)%MaxSize==pQ->front; } //元素进队 void EnQueue(CircSeqQueue *pQ, ElemType e) {//若队列不满,则元素e进队 if(IsFull(pQ))//队列已满,退出 { printf("队列溢出! "); exit(1); } pQ->rear=(pQ->rear+1)%MaxSize;//队尾指针后移 pQ->data[pQ->rear]=e; } //元素出队 ElemType DeQueue(CircSeqQueue *pQ) {//若循环队列不为空,则删除队头元素,并返回它的值 if(IsEmpty(pQ))//队列为空,退出 { printf("空队列! "); exit(1); } pQ->front=(pQ->front+1)%MaxSize;//队头指针后移 return pQ->data[pQ->front]; } //取队头元素 ElemType GetFront(CircSeqQueue *pQ) {//若队列不为空,则返回队头元素的值 if(IsEmpty(pQ)) { printf("空队列! "); exit(1); } return pQ->data[(pQ->front+1)%MaxSize]; } //循环队列置空 void MakeEmpty(CircSeqQueue *pQ) {//将由指针pQ所指向的队列变为孔队 pQ->front=pQ->rear=0; } void output() { int i; for(i=0;i<32;i++) printf("+"); printf(" "); printf("1.元素进队 "); printf("2.元素出队 "); printf("3.队首元素读取 "); printf("4对列制空 "); printf("5.退出 "); for(i=0;i<32;i++) printf("+"); printf(" "); } void main() { int k,m,n,i; CircSeqQueue *pQ; ElemType e; pQ=new CircSeqQueue; QueueInitial(pQ); output(); while(k) { printf("请选择:1-5 "); scanf("%d",&m); switch(m) { case 0:return; case 1: printf("请输入入队元素的个数: "); scanf("%d",&n); printf("输入元素,入队 "); for(i=0;i<n;i++) { scanf("%d",&e); EnQueue(pQ,e); } break; case 2: { printf("请输入出队元素的个数 "); scanf("%d",&n); for(i=0;i<n;i++) { e=DeQueue(pQ); printf("%d ",e); } break; } case 3: { printf("取出队首元素 "); e=GetFront(pQ); printf("%d ",e); break; } case 4: { printf("队列置空 "); MakeEmpty(pQ); printf(" "); break; } default:return; } printf("是否继续(1|0) "); scanf("%d",&k); if(!k) return; } }

问什么用循环队列

为了解决顺序队列的“假上溢”现象。

假上溢:由于入队和出队操作中,头尾指针只增加不减少,致使被删元素的空间永远无法重新利用。

当队列中实际元素个数远远小于向量空间的规模时,也可能由于尾指针已超越向量空间的上界而不能做入队操作。

利用循环队列可以循环使用队列就可以解决顺序队列“假上溢”现象。

循环队列Q(1:m),初始状态为front=rear=m.

由front=20,rear=15,知道队列中从front到尾有(m-20)个元素,尾到rear共有15个元素,则该循环队列共有(m-5)个元素。

寻找最小值时,先令最小值为第一个元素,遍历第2至第(m-5)个元素并更新最小值。

因此最坏情况下需要比较(m-6)次。

扩展资料: 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。

进行插入操作的端称为队尾,进行删除操作的端称为队头。

队列中没有元素时,称为空队列。

队列的数据元素又称为队列元素。

在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。

因为队列只允许在一端插入、另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表。

参考资料:队列-搜狗百科

WHloud Date鲸云数据($9.00/月), 韩国,日本,香港

WHloud Date(鲸云数据),原做大数据和软件开发的团队,现在转变成云计算服务,面对海内外用户提供中国大陆,韩国,日本,香港等多个地方节点服务。24*7小时的在线支持,较为全面的虚拟化构架以及全方面的技术支持!官方网站:https://www.whloud.com/WHloud Date 韩国BGP云主机少量补货随时可以开通,随时可以用,两小时内提交退款,可在工作日期间全额原路返回!支持pa...

CloudCone:洛杉矶MC机房KVM月付1.99美元起,支持支付宝/PayPal

CloudCone是一家成立于2017年的国外VPS主机商,提供独立服务器租用和VPS主机,其中VPS基于KVM架构,多个不同系列,譬如常规VPS、大硬盘VPS等等,数据中心在洛杉矶MC机房。商家2021年Flash Sale活动继续,最低每月1.99美元,支持7天退款到账户,支持使用PayPal或者支付宝付款,先充值后下单的方式。下面列出几款VPS主机配置信息。CPU:1core内存:768MB...

cera:秋季美国便宜VPS促销,低至24/月起,多款VPS配置,自带免费Windows

介绍:819云怎么样?819云创办于2019,由一家从2017年开始从业的idc行业商家创办,主要从事云服务器,和物理机器819云—-带来了9月最新的秋季便宜vps促销活动,一共4款便宜vps,从2~32G内存,支持Windows系统,…高速建站的美国vps位于洛杉矶cera机房,服务器接入1Gbps带宽,采用魔方管理系统,适合新手玩耍!官方网站:https://www.8...

循环队列为你推荐
免费erp免费的ERP哪家好用巴西时区巴西现在和北京时间 的时间差是多少啊?visio使用教程怎样使用visio画E-R图局域网ip扫描工具局域网的IP段怎么扫描qsv视频格式转换器爱奇艺QSV转换工具怎么将qsv格式转换mp4视频qsv视频格式转换器手机qsv怎么转换成mp4格式转换器武汉教育云平台武汉天喻教育科技有限公司怎么样?手机壳生产厂家请问哪里有便宜的手机壳批发?谢谢!充值卡充值移动如何用充值卡充话费软件群发有谁用过微信能群发的软件吗?在哪买的?
移动服务器租用 骨干网 星星海 国外主机 paypal认证 360抢票助手 大容量存储 hnyd 中国电信测速112 softbank邮箱 吉林铁通 华为云盘 华为云服务登录 网购分享 免费asp空间申请 789电视剧网 学生机 空间排行榜 web服务器 hosting 更多