2014-10-18 59 views
2

我正在研究數據結構(隊列)的基礎知識,到目前爲止我理解隊列的流程,但是我不明白隊列應用Mod操作符時的情況。有幾個問題混淆了我的大腦。如何回答這個問題(參考圖片)?使用mod操作的隊列

Here the example of questions.

+0

你的問題也困惑我的大腦。我看不到隊列和發佈的問題之間的相關性。你能提供更多的上下文嗎? – honk 2014-10-18 18:52:04

+0

@honk我不知道如何回答這個問題(參考圖片)。 Exp,REAR =(REAR = 4; N = 5)後REAR =(REAR + 1)%N的值是什麼? (N)是最大隊列大小。 – Edie 2014-10-18 18:57:13

+0

請閱讀@Namfuak的答案。他給出了足夠的解釋,以便你能夠自己解決方程。 – honk 2014-10-18 19:03:28

回答

3

處理循環隊列的最佳方法是繪製它們。由於圓形不能很好地展現ASCII藝術,我將使用線性數組。

+---+---+---+---+---+ 
| | | | | | 
+---+---+---+---+---+ 
    0 1 2 3 4 
       ^ 
       Rear 

後的索引爲4

讓我們執行由步驟的操作步驟。
第一:將REAR加1。這使得REAR點陣列超越:

+---+---+---+---+---+ 
| | | | | | 
+---+---+---+---+---+ 
    0 1 2 3 4 5 
        ^ 
         Rear 

運用模運算,%,這會給我們的5/5它是一個零餘數:

+---+---+---+---+---+ 
| | | | | | 
+---+---+---+---+---+ 
    0 1 2 3 4  
^ 
Rear 

因此,模運算陣列周圍包裹,像一個圓圈。

下一個問題是給你解決的。請記住繪製數組或隊列。你可以使用圈子(想想餡餅切片或披薩切片)。

編輯1:模詳述
模運算將給予的範圍0..N的值,當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. 
+0

謝謝先生的解釋......我非常感謝你。我現在得到了這個隊列的流程.. – Edie 2014-10-18 19:06:53

+0

記得點擊複選標記。 – 2014-10-18 19:56:58

2

模返回兩個操作數的剩餘部分。例如,4%2=04/2=2以來沒有剩餘部分,而4%3=1自從4/3=1以及其餘部分1.由於您永遠不會有高於右操作數的餘數,因此您對0(n-1)的任何模數都有有效的「範圍」答案。考慮到這一點,只需插入變量的編號((4+1)%5=?(1+1)%4=?)。通常要找到餘數要使用長整數,但要記住的一件有用的事情是任何除數自己的數字都有0的餘數,任何數字除以更大的數字都會有一個等於它自己的餘數。

+0

Ohhhh ..我記得現在,謝謝你的解釋先生。很高興你來這裏幫忙。我現在明白了這個問題..對不起。 ^^ – Edie 2014-10-18 19:03:08