首页 > 试题广场 >

大小为MAX的循环队列中,f为当前对头元素位置,r为当前队尾

[单选题]
大小为MAX的循环队列中,f为当前对头元素位置,r为当前队尾元素位置(最后一个元素的位置),则任意时刻,队列中的元素个数为
  • r-f
  • (r-f+MAX+1)%MAX
  • r-f+1
  • (r-f+MAX)%MAX
这一题有点陷阱】我来解释下为什么是B而不是D
教材上说 (也是大家记住的)求队列公式为: (rear-front+Max)%Max
该公式中的 rear指向队尾元素的下一个位置 ,而本题中 r 向队尾元素位置
发表于 2016-08-30 15:09:37 回复(30)
本题选择B,原因如下:

发表于 2017-04-03 11:01:44 回复(4)
如果不是循环队列的话,那么队列中的元素显然是rear-front+1;因为是循环队列,即队尾元素的索引有可能比队头元素要小,所以结果就是(rear-front+1+MAX)%MAX.
发表于 2016-09-01 23:03:44 回复(0)
循环队列,
默认情况,front指向队首元素的前一个位置,rear指向队尾元素,(rear-front+max)%max;
本题,front指向队首,rear指向队尾,(rear-(front-1)+max)%max;
发表于 2016-09-01 11:58:31 回复(3)
这道题套路太深了,大家可以自己模拟试一下,队MAX=10,对头head=0,队尾rear=3, 队长4.
确实只有B答案才能算出

编辑于 2016-09-01 10:36:18 回复(4)
我在百度一下之后得到的结果怎么是(rear-front+Max)%Max???这是怎么个情况啊?

发表于 2016-08-30 12:05:50 回复(0)
循环队列, 默认情况,front指向队头元素,rear指向队尾元素的下一个位置,队列的长度为(rear-front+MAXSIZE)%MAXSIZE 本题,front指向队头元素,rear指向队尾元素,队列的长度为(rear-front+MAXSIZE+1)%MAXSIZE
发表于 2019-01-09 10:31:32 回复(0)
由书可以看到,当说明数组大小是MAX的时候,为了保证可以明确判断队列空和满,常用方法是少存一个元素,本来数组边是max-1,而此时边界max-1存放的是一个标志指针,总共只有MAX-2+1个元素。 所以才有rear+1%max=front,而题目指向最后一个元素位置,也就是存了,MAX个元素,已经不在适合rear+1 %max=front. 此时满和空都是f=r 无法判断,并且当队列满的时候,B也不成立,因为存满了数组,满队计算出来是空队,综上所述这种题没有意义。屏蔽
发表于 2017-12-01 12:16:14 回复(0)
赞最多的,说的有问题,就没人发现吗
发表于 2017-09-03 11:27:50 回复(0)
求循环队列中元素个数这一问题有两个坑,首先是公式(r-f+Max)%Max,公式中要求f指向队头,r指向队尾(队列中最后一个元素的后一位),这题r指向队尾,因此需要加上1。 ------------------------- 这种题还有一类坑,就是题目没有直接告诉你数组的长度,而是给出一个数组arr[0....Max]或者arr[1....Max],前者数组的总长度为Max+1,后者为Max,它们都对应了公式中的长度,做题时需要注意
发表于 2022-07-17 10:54:51 回复(0)
<p>通常最后一个元素不存东西,方便判断队列空还是满。这题是个例外</p><p><br></p>
发表于 2020-10-23 21:43:15 回复(0)
只有我觉得答案是错的吗。我觉得正确答案应该是(r-f+max)%max+1。你们可以试一下0-3的循环队列,r=3 f=0 max=4
发表于 2017-03-07 11:26:32 回复(0)
少用一个空间的时候不用加1,包括队头指向的是前一个或者是队尾指向的是后一个 因为数组下标是从零开始的,那么总的数组的个数应该为maxsize+1个
发表于 2023-06-08 16:16:56 回复(0)
循环队列,它有一个缺点就是无法判断队空还是队满。 而通常用的三种解决法案是 1.设置一个标志来判断队空或者队满 2.设置一个变量用来记录队中元素的个数 3.少用一个空间 当用到第一和第二种方法的时候答案就是B,而用到第三种的时间就是D,因为少用了一个元素空间。 当然我说的情况是索引有0的情况。
发表于 2022-08-29 02:39:05 回复(0)
没看到有个坑
发表于 2022-02-25 15:32:51 回复(0)
队尾元素位置是指队列最后一个元素的位置还是最后一个元素后一个位置?如果是最后一个元素的位置,我觉得答案是B诶。
发表于 2016-08-29 17:38:24 回复(0)
id1头像 id1
这题有点问题,缺少了条件,在创建循环队列的时候,需要多开辟一个空间,不存储任何数据,但算到队列长度里面,这样的话再去使用选项的方法是正确的,否则在队满的情况下是无法判断个数的。或者是添加一个计数器,count单独判断队满、队空和元素个数
发表于 2024-08-22 16:20:40 回复(0)
是f指针重新定义了,原来公式里的是队首元素的前一个位置,现在题定义的是队首元素的位置
发表于 2023-06-11 16:35:07 回复(1)
这里要注意的是当前的rear指向的是最后一个元素的位置而不是最后一个元素位置的下一位
发表于 2022-09-13 22:12:02 回复(0)
简单一句话,从2到7有7-2+1=6个数,并不是5个数
发表于 2022-03-16 20:24:26 回复(0)