循环队列的存储空间为
1. 循环队列的存储空间为0到7,目前rear值为2,front值为6,求队列中有多少元素
计算队列的元素个数:(尾-头+表长)%表长 元素个数为(2-6+8)%8=4。所以目前队列中有4个元素。
2. C语言问题
循环队列的几个公式给你总结下:
对头指针+1:Q.front=(Q.front+1)%MAXSIZE
队尾指针+1:Q.reae=(Q.rear+1)%MAXSIZE
初始化:Q.front=Q.rear=0
队空:Q.front=Q.rear
队满:(Q.rear+1)%MAXSIZE=Q.front
求长度:(Q.rear-Q.front+MAXSIZE)%MAXSIZE
%MAXSIZE是为了防止越界,比如一共30个位置,队尾指到30了,如果+1就到31了,这时候再取模30就得1,那么队尾指到的30向后+1就到了1了,循环回来了。
题目中,容量也就是MAXSIZE=30。
由上述倒数第二个共识式子(Q.rear+1)%MAXSIZE=Q.front得出(15+1)%30=16指到队列已经满了。
区分队满与对空的条件,队满是头尾指针差一个,也就是队尾指针当前位置如果再后移一个就等于对头了。满的情况下,最大容量是比MAXSIZE少1的。
也就是29,也就是你的题的答案。
或者你用求长度的公式来算一下,(15-16+30)%30答案也是29。
3. 假设循环队列的元素存储空间为data[0..m-1],队头指针f指向队头元素,队指针r指向队尾元素
摘要 在循环队列中,若尾指针rear大于头指针front,其元素个数=rear-front
4. 设循环队列的存储空间为Q(1:35),初始状态为front=rear=35.现经过一系列入队与退队运算后,
答案是0或35。前提条件是:此循环队列的存储空间全部用于存储数据,而没有留出一个存储空间用于判别队满与队空。
在上述循环队列中,当front = rear时,
(1)有可能是队空:先入队15个元素,rear = 15;再出队15个元素,front = 15。
(2)有可能是队满:先入队15个元素,rear = 15;再出队15个元素,front =
15;最后再入队35个元素,rear指针循环一圈后再次等于15。
综上,队列中元素个数为0或35。
但应注意,上述的循环队列由于无法判别队满与队空,导致其产生二义性(即有歧义),可用性降低。因此,改进的方法是少用一个存储空间,即队列最大只存储34个元素,此时可用下列方法区分队满与队空:
(1)队满:(rear + 1)% MaxSize == front
(2)队空:rear == front
5. java里面,说到循环队列的存储空间为Q(1:35)包含什么含义,如果front=1,front=
如果是正数就不用加35了,如果是负数才要加35
这一题明显是个小陷阱,开始时候front=rear ,结束了还是front=rear 说明进来的和出去的一样多啊,你看 如果这是进来一个元素rear就加1,变成rear=1(因为是1:35啊,就是说元素只能排在1-35之间,35排完了就满了吗,没有 35排完了如果再进来元素就该排在1的位置上了。而不是36,这你得明白)
好了 进来一个rear加1 出去一个呢,front加1 就这样进来出去,进来出去,到最后front和rear还是相等的,那不就说明进来和出去的一样多嘛。 这样一来最后的元素就和原来的元素一样多了,明显不是0就是35,因为要么队空(0个元素),要么队满(35个元素)
%是求余数用的 10%3=1,就是这个意思 那个公式就是纯粹数学公式,和编程,语言都没关系。
这种题你画一张图最好理解了,当然短一点最好,弄个队列长度为6的,自己动动手,出对入队的画画就全明白了
6. 设循环队列的储存空间为Q(1:35)初始状态为front=near=35。现经过一系列入队和退队运
依题意,开始时候front=rear ,结束了还是front=rear 说明进来的和出去的一样多啊,你看 如果这是进来一个元素rear就加1,变成rear=1(因为是1:35啊,就是说元素只能排在1-35之间,35排完了就满了吗,没有 35排完了如果再进来元素就该排在1的位置上了。而不是36,这你得明白)
好了 进来一个rear加1 出去一个呢,front加1 就这样进来出去,进来出去,到最后front和rear还是相等的,那不就说明进来和出去的一样多嘛。 这样一来最后的元素就和原来的元素一样多了,明显不是0就是35,因为要么队空(0个元素),要么队满(35个元素)
7. 循环队列的存储空间为(0:59),初始状态为空,经过一系列正常的入队与退队操作后,front=25
设有一个用数组Q[1..m]表示的环形队列,约定f为当前队头元素在数组中的位置,r为队尾元素的后一位置(按顺时针方向),若队列非空,则计算队列中元素个数的公式应为 (m+r-f)mod m
(60+24-25)mod 60 =59
分析:
对于顺序队列,头指针和尾指针开始时刻都指向数组的0下标元素。当加入新元素以后,尾指针向后移动,指向最后一个元素的下一个位置。
但是尾指针不能超过数组的最大范围。当有元素删除时,头指针向后移动。但是头指针不能低于数组的0下标。这样就会引入一种“假溢出”现象,
数组中存在空余的空间,但是由于尾指针已经在最大位置,不能加入元素。
循环队列就可以用来解决 假溢出 问题, 当队列后面的满了,就从头在开始,形成头尾相接的循环.
出现的问题: front=rear即头指针和尾指针相等,但是对应两种情况:一种是队列是空,一种是队列是满。
所以,我们定义循环队列中空出一个位置为满队列状态。front指向头元素,rear指向尾元素的下一个位置。
那么循环队列的长度如何计算呢?
情况一: 当rear大于front时,循环队列的长度:rear-front
情况二: 当rear小于front时,循环队列的长度:分为两部分计算 0+rear 和 Quesize-front , 将两部分的长度合并到一起即为: rear-front+Quesize
所以将两种情况合为一种,即为: 总长度是(rear-front+Quesize)%Quesize
8. 循环队列的存储空间为Q(1:30)是什么意思
就是Q存储队列元素用的数组下标为1~30。
等于0的话这两个就是空指针了,而且队列的创建需要用到循环语句不断分配内存的,开始时头尾指针应该同时指向队列中第一个元素的内存空间。
此循环队列的存储空间全部用于存储数据,而没有留出一个存储空间用于判别队满与队空。
在上述循环队列中,当front
=
rear时,
(1)有可能是队空:先入队15个元素,rear
=
15;再出队15个元素,front
=
15。
(2)有可能是队满:先入队15个元素,rear
=
15;再出队15个元素,front
=
15;最后再入队35个元素,rear指针循环一圈后再次等于15。
综上,队列中元素个数为0或35。
(8)循环队列的存储空间为扩展阅读:
在循环队列中,当队列为空时,有front=rear,而当所有队列空间全占满时,也有front=rear。为了区别这两种情况,规定循环队列最多只能有MaxSize-1个队列元素,当循环队列中只剩下一个空存储单元时,队列就已经满了。因此,队列判空的条件是front=rear,而队列判满的条件是front=(rear+1)%MaxSize。
在循环队列结构中,当存储空间的最后一个位置已被使用而再要进入队运算时,只需要存储空间的第一个位置空闲,便可将元素加入到第一个位置,即将存储空间的第一个位置作为队尾。循环队列可以更简单防止伪溢出的发生,但队列大小是固定的。
参考资料来源:网络-循环队列
9. 设循环队列的存储空间为Q(1:50),初始状态为front=rear=50。经过一系列正常的操作后,front-1=rear
该循环队列中共rear-front+m=49个元素
所以寻找最大元素最坏情况需要49-1=48次
10. 设循环队列的存储空间为Q(1:m),初始状态为空。现经过一系列正常的入队与退队操作后,front=m-1,rear=m
rear-front>0,循环队列有rear-front个元素;rear-front<0,循环队列有rear-front+m个元素