【问题标题】:What is the point of the remainder operand in a circular array queue循环数组队列中余数操作数的意义是什么
【发布时间】:2019-02-26 06:15:16
【问题描述】:

我正在研究如何编写循环数组队列,而 enqueue 方法的一部分让我感到困惑,特别是 back 变量变为 (back+1) % SIZE 的部分

void enqueue(char x) {
    Q[back] = x
    back = (back+1) % SIZE;
}

得到余数有什么意义?我不明白。 (该数组称为Qint front = -1int back = 0int size = 0

【问题讨论】:

  • 想一想当添加足够多的项目以到达数组末尾时会发生什么。数据会去哪里?想象一下如果SIZE 不是零
  • 是的:你可以写成:back = (back+1) % Q.length;

标签: java arrays data-structures queue


【解决方案1】:

由于这是一个循环队列,一旦队列的尾部到达数组的末尾,如果再添​​加一个元素,它应该添加到数组的开头。

数组的有效索引是0SIZE - 1(假设SIZE == Q.length)。

因此,在Q[back == SIZE-1] 处添加元素后,队列的后面应变为(back+1) % SIZE == (SIZE-1+1) % SIZE == 0

附:我不确定您是否包含了enqueue 方法的完整代码。在添加新元素之前,您似乎没有检查队列是否已满。

【讨论】:

  • 你是对的。请建议 OP 跟踪入队元素的数量。否则读取数组可能会导致比输入更长的结果。
  • 是的,它在常规代码中占了,我只是决定添加部分方法。谢谢你的解释!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 2012-09-27
  • 2015-09-29
  • 2020-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多