我正在学习数据结构的基础知识(队列),目前我理解了队列的流程,但我不明白何时需要使用取模运算符。有几个问题让我感到困惑。如何回答这些问题(参见图片)?
+---+---+---+---+---+
| | | | | |
+---+---+---+---+---+
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.
求模运算返回两个操作数的余数。例如,4%2=0
,因为4/2=2
没有余数,而4%3=1
,因为4/3=1
有余数1。由于余数永远不能大于右操作数,对于任何模数,您都有一个有效的答案“范围”,从0
到(n-1)
。考虑到这一点,只需为变量插入数字((4+1)%5=?
和(1+1)%4=?
)。通常,要找到余数,您需要使用长除法,但需要记住的一个有用的事情是,任何数除以自己的余数为0,而任何数除以较大的数的余数等于它本身。
REAR=4;N=5
时,执行操作REAR=(REAR+1)%N
后,REAR
的值是多少?其中 (N) 是队列的最大大小。 - Edie