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

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

NameCheap优惠活动 新注册域名38元

今天上午有网友在群里聊到是不是有新注册域名的海外域名商家的优惠活动。如果我们并非一定要在国外注册域名的话,最近年中促销期间,国内的服务商优惠力度还是比较大的,以前我们可能较多选择海外域名商家注册域名在于海外商家便宜,如今这几年国内的商家价格也不贵的。比如在前一段时间有分享到几个商家的年中活动:1、DNSPOD域名欢购活动 - 提供域名抢购活动、DNS解析折扣、SSL证书活动2、难得再次关注新网商家...

CloudCone 新增洛杉矶优化线路 年付17.99美元且简单线路测试

CloudCone 商家在以前的篇幅中也有多次介绍到,这个商家也蛮有意思的。以前一直只有洛杉矶MC机房,而且在功能上和Linode、DO、Vultr一样可以随时删除采用按时计费模式。但是,他们没有学到人家的精华部分,要这样的小时计费,一定要机房多才有优势,否则压根没有多大用途。这不最近CloudCone商家有点小变化,有新人洛杉矶优化线路,具体是什么优化的等会我测试看看线路。内存CPU硬盘流量价格...

TmhHost香港三网CN2 GIA月付45元起,美国CN2 GIA高防VPS季付99元起

TmhHost是一家国内正规公司,具备ISP\ICP等资质,主营国内外云服务器及独立服务器租用业务,目前,商家新上香港三网CN2 GIA线路VPS及国内镇江BGP高防云主机,其中香港三网CN2 GIA线路最低每月45元起;同时对美国洛杉矶CN2 GIA线路高防及普通VPS进行优惠促销,优惠后美国洛杉矶Cera机房CN2 GIA线路高防VPS季付99元起。香港CN2 GIA安畅机房,三网回程CN2 ...

循环队列为你推荐
RFILCM是什么意思?请详解波浪号word里波浪号怎么打php开发工具1. 常用PHP 代码开发工具有哪些?安全防护一般防护安全用具有几种apple以旧换新苹果手机以旧换新划算吗?exe文件打不开为什么我的电脑打不开exe类的文件了?diskgenius免费版diskgenius 破解版?电子听诊器怎样选择听诊器html源代码求html代码蓝牙开发蓝牙技术到底是指什么?
inmotionhosting ix主机 私人服务器 香港cdn 流媒体服务器 美国便宜货网站 贵州电信宽带测速 好看qq空间 电子邮件服务器 200g硬盘 静态空间 网站卫士 防cc攻击 lamp兄弟连 登陆qq空间 hdsky 防盗链 godaddy域名 建站行业 ftp是什么东西 更多