首页 > 试题广场 >

则初始时 front和 rear 的值分别是( )。

[单选题]

已知循环队列存储在一维数组A[0..n-1]中,且队列非空时 front 和 rear 分别指向队头和队尾元素。若初始时队列为空,且要求第 1 个进入队列的元素存储在 A[0]处,则初始时 front和 rear 的值分别是( )。

  • 0, 0
  • 0, n-1
  • n-1, 0
  • n-1, n-1
推荐
插入时,队头指针不变,队尾指针后移一位。该题约定队列非空时 front 和 rear 分别指向队头和队尾元素,即插入第一个元素在下标为0的位置后,队头队尾指针皆指向A[0],此时可以反推出插入前,队头指针仍旧指向下标0,而队尾指针应指向前一位,也就是下标n-1的位置。注意,这道题的约定与大多数题约定队列为空时front=rear=0是不一样的约定,都是根据题意解题。
编辑于 2017-06-21 10:19:03 回复(4)
做这个题时,看到网上一篇博客分析的很有道理,借鉴过来看看:
队列是两头操纵,队尾进,队头出。还要小心进队时下标的更新方向,有时候就是特别奇怪,假定下标减为进队。

本题,我们从一般情况分析:

这里写图片描述

当进元素时,rear将后移,以便指向新的队尾元素。出队时,front后移,更新指向新的队头。

那么我们想,只有最初只有一个元素时:

这里写图片描述

反推,front不用动,但是rear要退一个位置,往哪退?按照循环,第一个元素位置可以直接到最后一个位置上,因此,如图所示。所以在数组中初态就是0,n-1.

有一个问题,为什么front初态不是在最后一个位置呢?因为为了操作的统一性,进队时,并不更新front,所以front初态在第一个元素的位置,即下标为0处。

编辑于 2017-08-23 15:22:59 回复(5)
 首先根据循环队列的公式,插入元素,front不变rear=(rear+1)%n。在本题中,即(rear+1)%n=0,可得rear=n-1。此时队列中只有一个元素,则front与rear应该指向同一个位置,即front也应该为0。
综上,front=0, rear=n-1
编辑于 2017-03-08 14:23:45 回复(6)
加入一个元素,队尾指针肯定要后移一位,当队中只存在一个元素时,队头和队尾都是这个元素,因此自然都指向下标0,反推即可知道队尾指针初始指向n-1
发表于 2016-12-16 18:06:04 回复(0)
初始队列为空 为什么 rear不等于 front ?
发表于 2017-06-10 16:45:31 回复(2)
注意先后移(加一取模),再入队
发表于 2018-04-14 12:53:32 回复(2)
循环队列,队尾插入,队首删除。所以插入元素时,队尾指针要后移,队首指针不变。
发表于 2017-02-26 08:17:11 回复(1)
要求非空时rear指向队尾元素,那么第一个元素入队后,reat指向0。因此reat初始指向n-1。注意是循环队列
发表于 2022-07-15 13:24:50 回复(0)
注意是 循环队列 !!!
发表于 2017-07-17 09:46:28 回复(0)
公理:进队时头不变,出队时尾不变,尾进头出。

在此基础上分析:
要求第一个原粗插入在A[0],因为进队时头不变,所以头front一定指向 0

若此题定义进队的时候 rear先++,再赋值,即可解决问题。
> 图示见下:
队列是两头操纵,队尾进,队头出。还要小心进队时下标的更新方向,有时候就是特别奇怪,假定下标减为进队。

本题,我们从一般情况分析:

这里写图片描述

当进元素时,rear将后移,以便指向新的队尾元素。出队时,front后移,更新指向新的队头。

那么我们想,只有最初只有一个元素时:

这里写图片描述

反推,front不用动,但是rear要退一个位置,往哪退?按照循环,第一个元素位置可以直接到最后一个位置上,因此,如图所示。所以在数组中初态就是0,n-1.

有一个问题,为什么front初态不是在最后一个位置呢?因为为了操作的统一性,进队时,并不更新front,所以front初态在第一个元素的位置,即下标为0处。

发表于 2022-03-01 14:16:15 回复(0)
本体要求非空时候front=rear,插入一个元素后再A[0],插入元素队头指针不变,可判定队头指针是0,但是根据对位指针公式(rear+1)%n=0知道插入之前rear=n-1
发表于 2017-08-04 11:27:24 回复(0)
⊙0⊙
发表于 2016-12-08 21:13:36 回复(0)
循环队列中只有一个元素时,队头和队尾指针都指向这个元素
发表于 2022-05-27 17:46:19 回复(0)
题目问的 front在前rear在后
发表于 2022-02-22 19:29:43 回复(0)
注意题干rear和front均指向元素
发表于 2021-11-16 13:59:19 回复(1)
队尾指针指向下一个位置,这是下一个位置为什么会是n-1呢?为什么不是1呢?
发表于 2017-03-01 10:53:11 回复(2)
首先需要明确,当队列只有一个元素a时,队头和队尾指针指向同一个元素a 这就意味着,a如果在A[0],那么front和rear都是0。 其次,入队时,头指针不变,尾指针后移,所以front没变,rear后移,front最终是0,所以初始也是0。 至于rear,后移后成为0,自然就是n-1。
发表于 2023-05-21 17:32:31 回复(0)
  • 入队操作:rear=(rear+1)%maxsize,在本题中0=(rear+1)%n
  • 在入队的时候front指针位置不变
  • 出队操作:front=(front+1)%maxsize
  • 在出队的时候rear指针位置不变
发表于 2023-01-26 16:02:34 回复(0)
这题只是要求插入后第一个进入队列的元素存储在 A[0]处,也就是说那个时候还没插入,那么A为什么不对?虽然没有约定队列为空时front=rear=0,但这种情况也是可以成立的
发表于 2018-05-29 15:51:53 回复(0)
需要注意的一点是这里的rear指向的是队尾元素而不是队尾元素的下一个位置,做几次错几次,不好好看题的下场
发表于 2024-03-16 22:52:12 回复(0)
这题明确说了rear指向队尾元素,而不是一般认为的指向队尾元素的下一个位置
发表于 2023-11-25 11:56:55 回复(0)