使用mod操作进行队列

时间:2014-10-18 18:46:36

标签: c++ queue

我正在研究数据结构的基础(队列),到目前为止我理解队列的流程但是我不明白队列何时应用Mod运算符。有几个问题使我的脑子感到困惑。如何回答这个问题(参考图片)?

Here the example of questions.

2 个答案:

答案 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=04/2=2以来没有余数,而4%3=14/3=1以及余数为1.因为您的余数不能高于右操作数,所以0(n-1)的任何模数的答案的有效“范围”。考虑到这一点,只需插入变量的数字((4+1)%5=?(1+1)%4=?)。通常要找到剩余部分,你会使用长除法,但要记住的一个有用的事情是任何数字除以它自己的余数为0,任何数字除以更大的数字都会有一个等于它自己的余数。