首页 > 试题广场 >

有一个用数组 C[1..m]表示的环形队列,m 为数组的长度

[单选题]
有一个用数组 C[1..m]表示的环形队列,m 为数组的长度。假设 f 为队头元素在数组中的位置,r 为队尾元素的后一位置(按顺时针方向)。若队列非空,则计算队列中元素个数的公式应为?
  • (m+r-f)mod m
  • r-f
  • (m-r+f) mod m
  • (m-r-f) mod m
  • (r-f) mod m
A,r-f是长度,为防止出现负数+m,然后mod m。
发表于 2015-05-25 09:35:21 回复(3)
环形队列即循环队列,题中说m 为数组的长度, f 为队头元素在数组中的位置,r 为队尾元素的后一位置(按顺时针方向),即f和m都是数组中的位置即(1,2),而非索引。 看图说话:可知选A
编辑于 2015-06-15 16:07:20 回复(3)
根据Clifford A.Shaffer写的数据结构与算法分析,环形(顺序)队列的元素个数的公式应为(r+m-f)%m+1,最后还要加上1
发表于 2015-03-28 15:19:41 回复(5)
都是取模运算了,+m有什么区别吗
发表于 2017-09-12 08:35:14 回复(0)
分成r>f和r<f两种情况,关键是理解r<f的情况,取模是为了将两者合并
发表于 2015-03-27 14:24:32 回复(0)
mod m求余数
发表于 2019-04-12 10:35:51 回复(0)
因为是环形队列,所以是在增加元素的时候是队尾的指针r移动,删除元素的时候是队头指针f移动,都是顺时针一个方向上移动.理解错移动先后错选了C.
发表于 2017-03-28 11:08:53 回复(0)
是否加m是取决于存储方向吗,逆时针就不用加m了吧
发表于 2017-03-17 12:18:24 回复(1)
把数组长度变成两倍来考虑
发表于 2017-02-13 15:39:47 回复(0)
最简单省时的方法是画个图,选三种进行代入排除1正好过最后一个2正常的3同样的(也就是链表满了) 举例: 1 m--7 f--6 r--2 2 m--7 f--2 r--5 3 m--7 f--1 r--1
发表于 2016-02-22 19:41:59 回复(0)
考虑两种情况,第一种情况,r>f,设 m为10,r=0;f=9则表示队列长度为10,当r<f 时,大家带入算算就可以了
发表于 2015-03-31 15:38:50 回复(0)
注解:加M保证不会出现负数
发表于 2014-10-25 00:25:56 回复(0)
Dan头像 Dan
发表于 2014-10-25 00:19:09 回复(0)