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

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

CYUN(29元/月)美国、香港、台湾、日本、韩国CN2,续费原价

关于CYUN商家在之前有介绍过一次,CYUN是香港蓝米数据有限公司旗下的云计算服务品牌,和蓝米云、蓝米主机等同属该公司。商家主要是为个人开发者用户、中小型、大型企业用户提供一站式核心网络云端部署服务,促使用户云端部署化简为零,轻松快捷运用云计算。目前,CYUN主要运营美国、香港、台湾、日本、韩国CN2线路产品,包括云服务器、站群服务器和独立服务器等。这次看到CYUN夏季优惠活动发布了,依然是熟悉的...

vpsdime:VPS内存/2核/VPS,4G内存/2核/50gSSD/2T流量/达拉斯机房达拉斯机房,新产品系列-Windows VPS

vpsdime上了新产品系列-Windows VPS,配置依旧很高但是价格依旧是走低端线路。或许vpsdime的母公司Nodisto IT想把核心产品集中到vpsdime上吧,当然这只是站长个人的猜测,毕竟winity.io也是专业卖Windows vps的,而且也是他们自己的品牌。vpsdime是一家新上来不久的奇葩VPS提供商,实际是和backupspy以及crowncloud等都是同一家公司...

易探云香港云服务器价格多少钱1个月/1年?

易探云怎么样?易探云是目前国内少数优质的香港云服务器服务商家,目前推出多个香港机房的香港云服务器,有新界、九龙、沙田、葵湾等机房,还提供CN2、BGP及CN2三网直连香港云服务器。近年来,许多企业外贸出海会选择香港云服务器来部署自己的外贸网站,使得越来越多的用户会选择易探云作为网站服务提供平台。今天,云服务器网(yuntue.com)小编来谈谈易探云和易探云服务器怎么样?具体香港云服务器多少钱1个...

循环队列为你推荐
笛卡尔乘积离散数学的集合问题。。 第一个笛卡尔的乘积:A={1,2},B={a,b},那么AXB^2是什么逗号运算符c语言中逗号运算符是从左向右算,还是从右向左算啊电子听诊器听诊器的构造及原理是……visio使用教程如何使用microsoft visio 2013微信红包封面11位兑换码微信红包兑换码怎么用程序员段子有哪些好笑的关于程序员的笑话廖华《学学孔子怎样当老师》读后感 南京廖华网页错误详细信息打开网页,出现网页错误详细信息 求解决,谢了!刷荣誉怎么刷荣誉最快最快?it之家论坛win10蓝屏video_tdr_failure(igkdmd32.sys)原因与解决办法
北京域名注册 长沙域名注册公司 日本vps 香港vps 免备案cdn win8.1企业版升级win10 100x100头像 国外代理服务器地址 最好的qq空间 重庆双线服务器托管 ca187 360云服务 空间租赁 东莞idc 国外在线代理服务器 lamp架构 免费php空间 fatcow 美国vpn服务器 电信测速器在线测网速 更多