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

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

GreenCloudVPS$20/年多国机房可选,1核@Ryzen 3950x/1GB内存/30GB NVMe/10Gbps端口月流量2TB

GreencloudVPS此次在四个机房都上线10Gbps大带宽VPS,并且全部采用AMD处理器,其中美国芝加哥机房采用Ryzen 3950x处理器,新加坡、荷兰阿姆斯特丹、美国杰克逊维尔机房采用Ryzen 3960x处理器,全部都是RAID-1 NVMe硬盘、DDR4 2666Mhz内存,GreenCloudVPS本次促销的便宜VPS最低仅需20美元/年,支持支付宝、银联和paypal。Gree...

SugarHosts糖果主机商更换域名

昨天,遇到一个网友客户告知他的网站无法访问需要帮他检查到底是什么问题。这个同学的网站是我帮他搭建的,于是我先PING看到他的网站是不通的,开始以为是服务器是不是出现故障导致无法打开的。检查到他的服务器是有放在SugarHosts糖果主机商中,于是我登录他的糖果主机后台看到服务器是正常运行的。但是,我看到面板中的IP地址居然是和他网站解析的IP地址不同。看来官方是有更换域名。于是我就问 客服到底是什...

Krypt($120/年),2vCPU/2GB/60GB SSD/3TB

Krypt这两天发布了ION平台9月份优惠信息,提供一款特选套餐年付120美元(原价$162/年),开设在洛杉矶或者圣何塞机房,支持Windows或者Linux操作系统。ion.kryptcloud.com是Krypt机房上线的云主机平台,主要提供基于KVM架构云主机产品,相对于KT主站云服务器要便宜很多,产品可选洛杉矶、圣何塞或者新加坡等地机房。洛杉矶机房CPU:2 cores内存:2GB硬盘:...

循环队列为你推荐
笛卡尔乘积笛卡尔乘积的运算性质中国银行卡号中国银行卡号是几位数?scanf返回值何为函数的返回值,比如scanf()函数的返回值?电子听诊器听诊器有哪些用途的知识横幅广告如何在应用中添加Admob横幅广告实数的定义实数的定义局域网ip扫描工具安卓有没有可以像电脑那样扫描局域网IP的软件?vrrp配置这段H3C路由器上的配置什么意思?团购网源码最近看到团购挺火的,我也想做一个,请大家推荐个稳定的团购网站源码?微信收费微信平台是否要收费如何收费
xenvps 2019年感恩节 账号泄露 iis安装教程 京东云擎 轻博 英文站群 数字域名 免费的asp空间 lamp什么意思 空间申请 创速 存储服务器 广州主机托管 htaccess e-mail cc加速器 超低价 跟踪路由 内存 更多