我正在研究数据结构的基础(队列),到目前为止我理解队列的流程但是我不明白队列何时应用Mod运算符。有几个问题使我的脑子感到困惑。如何回答这个问题(参考图片)?
答案 0 :(得分:5)
处理循环队列的最佳方法是将它们绘制出来。由于圆圈不能很好地发布ASCII艺术,我将使用线性数组。
+---+---+---+---+---+
| | | | | |
+---+---+---+---+---+
0 1 2 3 4
^
Rear
REAR位于指数4.
让我们一步一步地进行操作 第一步:向REAR添加1。这使REAR指向数组之外:
+---+---+---+---+---+
| | | | | |
+---+---+---+---+---+
0 1 2 3 4 5
^
Rear
应用模运算%,这将给出5 / 5
的余数为零:
+---+---+---+---+---+
| | | | | |
+---+---+---+---+---+
0 1 2 3 4
^
Rear
因此模运算环绕数组,就像一个圆圈。
接下来的问题是你要解决的问题。记得绘制数组或队列。你可以使用圆圈(想象一个切成薄片或披萨切成薄片)。
编辑1:模数详情
当N是除数时,模运算将给出0..N范围内的值。
给定N == 4,以下是模数的一些结果:
Index result
0 0
1 1
2 2
3 3
4 0 --> The remainder of 4 / 4 == 0.
5 1
6 2
7 3
8 0 --> The remainder of 8 / 4 == 0.
答案 1 :(得分:2)
Modulus返回两个操作数的其余部分。例如,4%2=0
自4/2=2
以来没有余数,而4%3=1
自4/3=1
以及余数为1.因为您的余数不能高于右操作数,所以0
到(n-1)
的任何模数的答案的有效“范围”。考虑到这一点,只需插入变量的数字((4+1)%5=?
和(1+1)%4=?
)。通常要找到剩余部分,你会使用长除法,但要记住的一个有用的事情是任何数字除以它自己的余数为0,任何数字除以更大的数字都会有一个等于它自己的余数。