循環隊列的存儲空間為
1. 循環隊列的存儲空間為0到7,目前rear值為2,front值為6,求隊列中有多少元素
計算隊列的元素個數:(尾-頭+表長)%表長 元素個數為(2-6+8)%8=4。所以目前隊列中有4個元素。
2. C語言問題
循環隊列的幾個公式給你總結下:
對頭指針+1:Q.front=(Q.front+1)%MAXSIZE
隊尾指針+1:Q.reae=(Q.rear+1)%MAXSIZE
初始化:Q.front=Q.rear=0
隊空:Q.front=Q.rear
隊滿:(Q.rear+1)%MAXSIZE=Q.front
求長度:(Q.rear-Q.front+MAXSIZE)%MAXSIZE
%MAXSIZE是為了防止越界,比如一共30個位置,隊尾指到30了,如果+1就到31了,這時候再取模30就得1,那麼隊尾指到的30向後+1就到了1了,循環回來了。
題目中,容量也就是MAXSIZE=30。
由上述倒數第二個共識式子(Q.rear+1)%MAXSIZE=Q.front得出(15+1)%30=16指到隊列已經滿了。
區分隊滿與對空的條件,隊滿是頭尾指針差一個,也就是隊尾指針當前位置如果再後移一個就等於對頭了。滿的情況下,最大容量是比MAXSIZE少1的。
也就是29,也就是你的題的答案。
或者你用求長度的公式來算一下,(15-16+30)%30答案也是29。
3. 假設循環隊列的元素存儲空間為data[0..m-1],隊頭指針f指向隊頭元素,隊指針r指向隊尾元素
摘要 在循環隊列中,若尾指針rear大於頭指針front,其元素個數=rear-front
4. 設循環隊列的存儲空間為Q(1:35),初始狀態為front=rear=35.現經過一系列入隊與退隊運算後,
答案是0或35。前提條件是:此循環隊列的存儲空間全部用於存儲數據,而沒有留出一個存儲空間用於判別隊滿與隊空。
在上述循環隊列中,當front = rear時,
(1)有可能是隊空:先入隊15個元素,rear = 15;再出隊15個元素,front = 15。
(2)有可能是隊滿:先入隊15個元素,rear = 15;再出隊15個元素,front =
15;最後再入隊35個元素,rear指針循環一圈後再次等於15。
綜上,隊列中元素個數為0或35。
但應注意,上述的循環隊列由於無法判別隊滿與隊空,導致其產生二義性(即有歧義),可用性降低。因此,改進的方法是少用一個存儲空間,即隊列最大隻存儲34個元素,此時可用下列方法區分隊滿與隊空:
(1)隊滿:(rear + 1)% MaxSize == front
(2)隊空:rear == front
5. java裡面,說到循環隊列的存儲空間為Q(1:35)包含什麼含義,如果front=1,front=
如果是正數就不用加35了,如果是負數才要加35
這一題明顯是個小陷阱,開始時候front=rear ,結束了還是front=rear 說明進來的和出去的一樣多啊,你看 如果這是進來一個元素rear就加1,變成rear=1(因為是1:35啊,就是說元素只能排在1-35之間,35排完了就滿了嗎,沒有 35排完了如果再進來元素就該排在1的位置上了。而不是36,這你得明白)
好了 進來一個rear加1 出去一個呢,front加1 就這樣進來出去,進來出去,到最後front和rear還是相等的,那不就說明進來和出去的一樣多嘛。 這樣一來最後的元素就和原來的元素一樣多了,明顯不是0就是35,因為要麼隊空(0個元素),要麼隊滿(35個元素)
%是求余數用的 10%3=1,就是這個意思 那個公式就是純粹數學公式,和編程,語言都沒關系。
這種題你畫一張圖最好理解了,當然短一點最好,弄個隊列長度為6的,自己動動手,出對入隊的畫畫就全明白了
6. 設循環隊列的儲存空間為Q(1:35)初始狀態為front=near=35。現經過一系列入隊和退隊運
依題意,開始時候front=rear ,結束了還是front=rear 說明進來的和出去的一樣多啊,你看 如果這是進來一個元素rear就加1,變成rear=1(因為是1:35啊,就是說元素只能排在1-35之間,35排完了就滿了嗎,沒有 35排完了如果再進來元素就該排在1的位置上了。而不是36,這你得明白)
好了 進來一個rear加1 出去一個呢,front加1 就這樣進來出去,進來出去,到最後front和rear還是相等的,那不就說明進來和出去的一樣多嘛。 這樣一來最後的元素就和原來的元素一樣多了,明顯不是0就是35,因為要麼隊空(0個元素),要麼隊滿(35個元素)
7. 循環隊列的存儲空間為(0:59),初始狀態為空,經過一系列正常的入隊與退隊操作後,front=25
設有一個用數組Q[1..m]表示的環形隊列,約定f為當前隊頭元素在數組中的位置,r為隊尾元素的後一位置(按順時針方向),若隊列非空,則計算隊列中元素個數的公式應為 (m+r-f)mod m
(60+24-25)mod 60 =59
分析:
對於順序隊列,頭指針和尾指針開始時刻都指向數組的0下標元素。當加入新元素以後,尾指針向後移動,指向最後一個元素的下一個位置。
但是尾指針不能超過數組的最大范圍。當有元素刪除時,頭指針向後移動。但是頭指針不能低於數組的0下標。這樣就會引入一種「假溢出」現象,
數組中存在空餘的空間,但是由於尾指針已經在最大位置,不能加入元素。
循環隊列就可以用來解決 假溢出 問題, 當隊列後面的滿了,就從頭在開始,形成頭尾相接的循環.
出現的問題: front=rear即頭指針和尾指針相等,但是對應兩種情況:一種是隊列是空,一種是隊列是滿。
所以,我們定義循環隊列中空出一個位置為滿隊列狀態。front指向頭元素,rear指向尾元素的下一個位置。
那麼循環隊列的長度如何計算呢?
情況一: 當rear大於front時,循環隊列的長度:rear-front
情況二: 當rear小於front時,循環隊列的長度:分為兩部分計算 0+rear 和 Quesize-front , 將兩部分的長度合並到一起即為: rear-front+Quesize
所以將兩種情況合為一種,即為: 總長度是(rear-front+Quesize)%Quesize
8. 循環隊列的存儲空間為Q(1:30)是什麼意思
就是Q存儲隊列元素用的數組下標為1~30。
等於0的話這兩個就是空指針了,而且隊列的創建需要用到循環語句不斷分配內存的,開始時頭尾指針應該同時指向隊列中第一個元素的內存空間。
此循環隊列的存儲空間全部用於存儲數據,而沒有留出一個存儲空間用於判別隊滿與隊空。
在上述循環隊列中,當front
=
rear時,
(1)有可能是隊空:先入隊15個元素,rear
=
15;再出隊15個元素,front
=
15。
(2)有可能是隊滿:先入隊15個元素,rear
=
15;再出隊15個元素,front
=
15;最後再入隊35個元素,rear指針循環一圈後再次等於15。
綜上,隊列中元素個數為0或35。
(8)循環隊列的存儲空間為擴展閱讀:
在循環隊列中,當隊列為空時,有front=rear,而當所有隊列空間全占滿時,也有front=rear。為了區別這兩種情況,規定循環隊列最多隻能有MaxSize-1個隊列元素,當循環隊列中只剩下一個空存儲單元時,隊列就已經滿了。因此,隊列判空的條件是front=rear,而隊列判滿的條件是front=(rear+1)%MaxSize。
在循環隊列結構中,當存儲空間的最後一個位置已被使用而再要進入隊運算時,只需要存儲空間的第一個位置空閑,便可將元素加入到第一個位置,即將存儲空間的第一個位置作為隊尾。循環隊列可以更簡單防止偽溢出的發生,但隊列大小是固定的。
參考資料來源:網路-循環隊列
9. 設循環隊列的存儲空間為Q(1:50),初始狀態為front=rear=50。經過一系列正常的操作後,front-1=rear
該循環隊列中共rear-front+m=49個元素
所以尋找最大元素最壞情況需要49-1=48次
10. 設循環隊列的存儲空間為Q(1:m),初始狀態為空。現經過一系列正常的入隊與退隊操作後,front=m-1,rear=m
rear-front>0,循環隊列有rear-front個元素;rear-front<0,循環隊列有rear-front+m個元素