循环队列循环队列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)线性表。

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

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

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

御云(RoyalYun):香港CN2 GIA VPS仅7.9元每月起,美国vps仅8.9/月,续费同价,可叠加优惠

御云怎么样?炎炎暑期即将来临,御云(royalyun)香港、美国服务器开启大特惠模式。御云是新成立的云服务提供商,主要提供香港、美国的云服务器,不久将开启虚拟主机业务。我们的香港和美国主机采用CN2 GIA线路。目前,香港cn2 gia vps仅7.9元每月起,美国vps仅8.9/月,续费同价,可叠加优惠,香港云服务器国内延迟一般在50ms左右,是搭建网站的最佳选择,但是请不要用于违法用途。点击进...

简单测评v5.net的美国cn2云服务器:电信双程cn2+联通AS9929+移动直连

v5.net一直做独立服务器这块儿的,自从推出云服务器(VPS)以来站长一直还没有关注过,在网友的提醒下弄了个6G内存、2核、100G SSD的美国云服务器来写测评,主机测评给大家趟雷,让你知道v5.net的美国云服务器效果怎么样。本次测评数据仅供参考,有兴趣的还是亲自测试吧! 官方网站:https://v5.net/cloud.html 从显示来看CPU是e5-2660(2.2GHz主频),...

循环队列为你推荐
一致性什么是估计的一致性,和估计的相合性oracle11g下载怎么下载oracle11g的联机文档?apple以旧换新苹果以旧换新怎么换?价格是怎样的app退款app退款怎样才算恶意退款?diskgenius免费版diskgenius免费版怎么用qsv视频格式转换器爱奇艺QSV转换工具怎么将qsv格式转换mp4视频vrrp配置在ospf中配置vrrp!那么vrrp需要宣告吗?vrrp配置INTERNET协议属性里面的备用配置有什么用?第五人格抄袭第五人格逃生模式与猫和老鼠如出一辙,这是否存在抄袭?协亨协亨,话机世界,迪信通哪个买手机更便宜?
vps动态ip 阿里云os tier 表单样式 12306抢票攻略 网站监控 双11抢红包攻略 ssh帐号 lamp配置 512m内存 debian7 网站木马检测工具 什么是服务器托管 空间租赁 移动服务器托管 贵阳电信测速 防cc攻击 广州服务器托管 服务器是什么 电信测速器在线测网速 更多