首页 > 试题广场 >

循环队列放在一维数组A[0…M-1]中,end1指向队头元素

[单选题]

循环队列放在一维数组A[0…M-1]中,end1指向队头元素,end2指向队尾元素的后一个位置。假设队列两端均可进行入队和出队操作,队列中最多能容纳M-1个元素。初始时为空,下列判断队空和队满的条件中,正确的是()

  • 队空:end1==end2;队满:end1==(end2+1) mod M
  • 队空:end1==end2;队满:end2==(end1+1) mod (M-1)
  • 队空:end2==(end1+1) mod M;队满:end1==(end2+1) mod M
  • 队空:end1==(end2+1) mod M;队满:end2==(end1+1) mod (M-1)
循环队列的相关条件和公式:  
队尾指针是rear,队头是front,其中QueueSize为循环队列的最大长度 
1.队空条件:rear==front 
2.队满条件:(rear+1) %QueueSIze==front 
3.计算队列长度:(rear-front+QueueSize)%QueueSize 
4.入队:(rear+1)%QueueSize 
5.出队:(front+1)%QueueSize
发表于 2016-12-20 14:04:16 回复(0)
当队列为空时,end1表示队头,end2表示队尾的下一个位置,如果end1==end2.可以得出队列中是没有元素的。
当队列为满时,因为end2指向队尾下一个位置,而这个队被放在一个一维数组中,所以最多容纳M-1个元素,如果容纳了M个,队尾指针end2就变成了野指针,因为指向的就不是数组内元素。
end1==(end2+1),这样想,假如队满,队头end1在0位置,队尾元素在M-2位置,end2在M-1位置。所以得出(end2+1)modM。
发表于 2016-12-05 12:26:11 回复(0)
首先两端都可以出队入队这个需要想明白了,下面的答案都没提到这句话,不是说end1指向队头元素也可以指向队尾元素。
说白了这句两端都可以出队入队的的话就是多余的。
发表于 2018-06-16 13:58:08 回复(1)
解题思路:题中所说,队空和队满情况,也就是这个队列是初始化开始装元素和最后装满元素的状态,意味着,只考虑最开始和最后结果,不考虑中间的过程,中间怎么装,中间出栈和入栈不用管(我就是考虑太多中间因素,让自己陷入了出栈入栈一直变化的怪圈)。
开始(队列为空的时候):end1=end2,end1和end2中间灭有元素,无论他们在任何位置都是这种结果。
结束状态(队列满的时候):队满的结果就是,中间元素满了,这个容器刚好装满。所以定位end2的坐标位置,具体情况具体分析,一维数组,最多M-1个元素,end2指向队尾下一个。数组索引从零开始,end1 为 0,所以装满M-1个元素后,索性就是M-2,这个时候就是end2的位置就是 M - 2 + 1 = M - 1。所以需要找到一个等式成立条件 (M - 1 + 1) mod M,取余就是0,使得end1 = (end2 + 1)mod M 判断条件成立
发表于 2024-10-24 09:15:28 回复(0)
A
发表于 2022-11-16 11:40:05 回复(0)
end1指向队头元素,可知出队操作是先从A[end1]读数,然后end1再加1。
end2指向队尾元素的后一个位置,可知入队操作是先存数到A[end2],然后end2再加1。
若用A[0]存储第一个元素,队列初始时,入队操作是先把数据放到A[0]中,然后end2自增,即可知end2初值为0;
而end1指向的是队头元素,队头元素在数组A中的下标为0,所以得知end1的初值也为0,可知队空条件为end1==end2;
然后考虑队列满时,因为队列最多能容纳M-1个元素,假设队列存储在下标为0到M-2的M-1个区域,队头为A[0],队尾为A[M-2],此时队列满,考虑在这种情况下end1和end2的状态,end1指向队头元素,可知end1=0,end2指向队尾元素的后一个位置,可知end2=M-2+1=M-1,所以可知队满的条件为end1==(end2+1)mod M,选A。
发表于 2022-07-04 17:03:24 回复(0)
循环两列?循环队列?
end2指向队尾元素的后一个位置?如果是循环队列,那不是意味着队满的时候,end2指向M吗……
是我理解问题吗……
发表于 2019-07-02 15:34:32 回复(0)
两端都可以进行入队和出队,假如在队头进行入队操作怎么办啊?end1是++还是--呢?或者end1和end2交换位置?搞不懂
发表于 2019-05-27 08:53:35 回复(0)
此外要注意数组里面元素的个数是M
发表于 2017-11-09 09:33:26 回复(1)
队尾指针是rear,队头是front,其中QueueSize为循环队列的最大长度  
1.队空条件:rear==front  
2.队满条件:(rear+1) %QueueSIze==front  
3.计算队列长度:(rear-front+QueueSize)%QueueSize  
4.入队:(rear+1)%QueueSize  
5.出队:(front+1)%QueueSize
发表于 2017-07-23 21:11:42 回复(0)
循环队列出队front往前挪一位,入队则rear往前挪一位
相关条件:但也要具体注意front和rear指向元素本身还是前一位
队空:rear==front
队满:(rear+1)%MaxSize=front

发表于 2017-06-13 19:25:11 回复(0)
被迷惑了,看不出来这道题想问双端队列还是循环队列。。。
发表于 2017-05-12 10:41:37 回复(0)