You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组实现的循环队列rear_index计算式含义及入队应用逻辑咨询

循环队列 rear 索引计算公式逻辑及入队应用说明

首先明确数组实现循环队列的核心设计背景:
数组是固定长度的结构,容量arraySize一旦定义就不会动态变化。如果按照普通非循环队列的逻辑,入队时直接让rear_index +=1,当rear_index到达数组最大下标arraySize -1之后,再入队就会触发数组越界错误。但此时数组头部很可能因为之前的出队操作已经空出了可用位置,普通队列的实现会直接浪费这部分空间,循环队列就是为了解决这个问题,将数组从逻辑上模拟成首尾相接的环形结构。


公式运行逻辑拆解

你提到的公式rear_index = (rear_index + 1) % arraySize就是实现环形跳转的核心,拆分两部分理解:

  • rear_index + 1:和普通队列的逻辑完全一致,入队后尾部索引向后移动一位,指向新的可插入位置
  • 取模运算% arraySize:是实现「循环」的关键,分两种情况生效:
    • 当rear_index +1 < arraySize时,取模结果和rear_index +1完全相等,和普通队列行为没有差异
    • 当rear_index已经是数组最后一个下标arraySize-1时,rear_index +1 = arraySize,此时arraySize % arraySize = 0,尾部索引直接跳转到数组第一个下标0,实现了绕回数组头部的效果,刚好可以复用之前出队空出的头部空间

入队操作中的实际生效流程

完整的入队操作步骤如下,公式会在最后一步执行:

  1. 先执行队列满判断(避免新元素覆盖还未出队的有效数据,不同判满逻辑可以参考循环队列的标准实现)
  2. 将待入队的新元素写入数组中当前rear_index指向的位置
  3. 执行rear_index = (rear_index + 1) % arraySize更新尾部索引,指向下一个可插入的位置

实际示例

我们用容量为5的数组举例,数组下标范围为0~4,初始状态front = 0,rear_index = 0:

  • 依次入队A、B、C、D、E,每次入队后rear_index分别更新为1、2、3、4、(4+1)%5=0,此时队列触发满判定,停止入队
  • 执行两次出队操作,front移动到下标2的位置,数组下标0、1的空间已经被释放
  • 再次入队元素F:此时rear_index为0,将F写入下标0的位置,更新rear_index = (0+1)%5=1,成功复用了之前空出的头部空间,没有触发越界错误

补充:该逻辑完全可以复用给出队时的front索引更新,出队时执行front = (front + 1) % arraySize即可实现front的环形跳转。


内容的提问来源于stack exchange,提问作者samurai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 18:09:01