循环队列中元素的个数问题

一个循环队列的容量为50,头指针为5,为指针为25,则该循环队列中有多少元素?

答案是0或35。前提条件是:此循环队列的存储空间全部用于存储数据,而没有留出一个存储空间用于判别队满与队空。
在上述循环队列中,当front = rear时,有可能是队空:先入队15个元素,rear = 15;再出队15个元素,front = 15。有可能是队满:先入队15个元素,rear = 15;再出队15个元素,front = 15;最后再入队35个元素,rear指针循环一圈后再次等于15。
应注意,上述的循环队列由于无法判别队满与队空,导致其产生二义性(即有歧义),可用性降低。因此,改进的方法是少用一个存储空间,即队列最大只存储34个元素,此时可用下列方法区分队满与队空:

1、队满:(rear + 1)% MaxSize == front
2、队空:rear == front
计算队列的元素个数:(尾-头+表长)%表长,队列头指针为front,队列尾指针为rear,队列容量为M,则元素个数为|rear-front+M|%M,注意,这个%是求余运算。
为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。这种循环队列可以以单链表的方式来在实际编程应用中来实现。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-12-16
给你一个公式,队列元素=(尾指针-头指针+队列容量)%队列容量,所以答案是20.追问

%是什么意思?

追答

求余运算符。

本回答被提问者采纳
第2个回答  2012-12-04
能解释一下是为什么吗?
第3个回答  2011-06-16
你发的地方不好。。。最好是到贴吧发贴谢谢

循环队列中元素个数的计算
计算队列的元素个数:(尾-头+表长)%表长队列头指针为front,队列尾指针为rear,队列容量为M,则元素个数为|rear-front+M|%M,注意,这个%是求余运算。设f为队头,r为队尾,m为队长,a为元素个数,则1.f>r时,a=m+r-f;2.f<=r时,a=r-f。

简易理解循环队列元素个数=(rear+MaxSize-front)%MaxSize
在讨论循环队列中元素个数的问题时,我们假设数据只进入队列而不做任何出队列操作。此时,队列的元素个数直接等于队尾指针(rear)与队头指针(front)之间的差值。具体表达式为rear-front,而因为front固定在原处,所以队列元素个数等于rear。接下来,考虑数据既进入队列又出队列的情况。在这种动态变化中,理...

如何求循环队列的元素个数?
例如,若rear=5,front=3,说明队列中当前有2个元素。但若rear=MAXSIZE-1,front=0,这时rear-front=MAXSIZE-1,通过取模操作,得到的结果是0,表示队列中当前有0个元素,这符合循环队列的循环特性。总之,计算循环队列的元素个数,通过使用(rear-front+MAXSIZE)%MAXSIZE的公式,结合循环队列的循环...

二级计算机知识, 循环队列
循环队列的容量为50,如果头指针front=45(指向队头元素的前一个位置),尾指针rear=10(指向队尾元素),则该循环队列中共有15元素。50-45+10=15。循环队列中,由于入队时尾指针向前追赶头指针;出队时头指针向前追赶尾指针,造成队空和队满时头尾指针均相等。因此,无法通过条件front==rear来判别队列...

如图所示的循环队列中元素数目是( )。求大佬解答
循环队列的数量n永远等于[m-(front-rear)]mod(m).mod是取余。此题n=(60-(-17))mod(60)=17 选择C

循环队列中元素个数的计算公式
回答:typedef struct { int * base; int front; int rear; }SqQueue; int Queuelength(SqQueue Q) \/\/返回Q的元素个数 { return(Q.rear-Q.front+MAXQSIZE)%MAXSIZE; }

循环队列元素个数的计算方法
循环队列元素个数的计算方法指的是队列的实现方式,用一个头尾相接的循环链表,或者逻辑上头尾相接的数组(读取最后一个元素的下一个元素时会跳转到第一个元素)。顺序队列在使用过程中容易出现虚假的满状态, 为了解决这个问题,就产生了一个较巧妙的方法,将顺序队列臆造为一个环状的空间,称之为循环...

...尾指针为rear,试写出一个算法,求队列中元素的个数。
【答案】:循环队列元素个数的公式(rear-front+MAXLEN)%MAXLEN,在已知循环队列头指针front,尾指针rear和容量MAXLEN值后可方便求得。但为了对循环队列工作机制有更深入的了解,我们给出以下算法。算法由主函数和统计循环队列元素个数的两个函数组成。程序如下:include<stdio.h> define MAXLEN 20 int...

在一个容量为15的循环队列中,若头指针front=6,尾指针rear=9,则该循环...
实现循环队列时,一般头指针指向第一个元素,尾指针指向最后一个元素的下一个空间。因此,此时队列中6,7,8这三个空间存有元素,即队列中有3个元素。这种题目谈不上什么方法吧,只要知道队列是怎么实现的,再稍微想一下,实在想不出来,在纸上画一下就出来了。

求循环队列中元素个数
∵front=8 rear=7 rear<front ∴元素个数=7+100-8=99 答:元素个数为99个。第二法:∵front=8=rear+1 % 100 ∴此时循环队列为满,从而知元素个数为99个。

相似回答