全部问题 > 当前问题

课件中讲的初始位置都是0,所以队列的元素等于rear-front,但是第七题这种题它的初始位置全在m上,那运行过程中岂不是队尾要比队头要小?为什么还是用20-15?


galaxyfanfan 2016-8-4 15:59:10

共 6 个回答

最佳答案

纪念& 2016-8-4 17:02:24

知识点:当front<rear,队列中元素个数为rear-front

        当front>rear,队列中元素个数为m-front+rear

        当front=rear,队列为空或满,即队列中元素个数为0或m。


解析:因为初始状态为front=rear=m,所以列队为空或满,即列队中元素个数为0或m。

      又因为front=15,rear=20,(front<rear),所以队列个数为rear-front=5.

      又因为要在该循环列队中寻找最大值的元素,所以最坏的情况下需要比较的次数应该为5-1=4次。

      故选择A。


满意请采纳,谢谢


galaxyfanfan 2016-8-5 06:06:57

回复 赛赛:谢谢你的回答,但有时候回答的时候请注意,提问者并不是希望复制粘贴一下答案解析,他是希望回答者能针对他的问题给出回答。比如这题,后面我都知道,我是对最开始的公式产生疑问,为什么是rear-front,课件中讲的全是初始位置front=rear=0的时候元素个数一般用rear-front,但练习题中设置的条件是front=rear=m,是不是正好反过来?以前rear-front等于一个正数的话,那么现在岂不是是负数?

galaxyfanfan 2016-8-5 06:11:03

回复 纪念&:谢谢,这些我都明白,我是再问为什么用队尾减去队首,课件中初始位置都是0.用队尾减去队首很容易理解,但这题里面是初始位置都是m,那公式是不是要反过来?

纪念& 2016-8-5 10:33:39

       在这里公式是不需要反过来的。

       首先你需要知道题目中所说的是循环队列,而循环队列的初始位置不一定是0,也许就是这道题中的m,这是因为该队列是循环的,而在队列中有进来的也有出去的,而且队列遵循的原则是先进先出(与栈是不同的哦),所以下面的出去了那么初始位置就会发生变化,不再是之前的初始位置0,而是现在的初始位置m了。

       在这道题中,已知初始状态为front=rear=m,front=15,rear=20,(因为front<rear),所以队列个数为rear-front=5.~~~~~(这里在“队列”课件中的4:25左右的时间有详细区分“普通队列”与“循环队列”,以及两道简单的循环队列中front<rear与front>rear的计算,详细看看这里,相信聪明的你会明白了的!


满意请采纳,谢谢啦!

赛赛 2016-8-5 12:17:48

回复 galaxyfanfan:队列和栈,进制里面所有的题详细解释在群里面都有,打好基础才是解题的关键。考试这些都很简单的,听懂了课就会做了

纪念& 2016-8-8 17:57:51

回复 galaxyfanfan:亲,如果对我的解释满意的话请采纳好吗。谢谢了!

问题来自: 队列
设循环队列为Q(1: m),其初始状态为front=rear=m。经过一系列入队与退队运算后,front=15,rear=20。现要在该循环队列中寻找最大值的元素,最坏情况下需要比较的次数为( )
A. 4
B. 6
C. m-5
D. m-6
答案:A
解析:初始状态为front=rear=m,m-m=0,此时队列为空。经过一系列入队与退队运算后,front=15,rear=20。队尾大于对头,则队尾减对头等于5个元素。由于寻找的是最大值的元素,需要比较四次。因此选择A。