靜態佇列為什麼必須是迴圈佇列

2021-08-14 15:41:31 字數 1270 閱讀 3114

首先靜態佇列是基於陣列實現的,如果是普通陣列,規定font指向第乙個元素的位置,rear指向最後乙個元素位置的下乙個位置

假設現在進行入隊操作,此時 rear(後面)指標往後移動一位;出隊則是font向後移動一位,此時會出現乙個問題,

就是已經刪除的元素所使用的空間無法繼續使用;

因為每次入隊或者出隊都是font或者rear向後移動一位,font指標無法往前移動,此時就會造成刪除的空間無法使用!!

到此處應該就想到了另外一種解決方法,迴圈佇列即可解決問題

需要明白以下幾個問題

1.靜態佇列為什麼必須要是迴圈佇列?

因為靜態佇列是基於陣列實現的,如果不用迴圈佇列,會導致刪除的元素所使用的空間無法繼續使用,造成空間的浪費 

2.迴圈佇列需要幾個引數來確定?以及各個引數的含義

需要2個引數,第乙個引數是front(前面),第二個引數是rear(後面);

2個引數在不同的場合下有不同的含義

1.佇列初始化

front和rear的值都為0;

2.佇列非空

front代表佇列的第乙個元素,

rear代表佇列的最後乙個有效元素的下乙個元素 

3. 佇列空

front和rear的值相等,但是不一定是0;因為是迴圈佇列; 

3. 迴圈隊列入隊偽演算法

兩步完成:

1 .將值存入rear代表的位置

2.將 rear的值變成(rear+1)%陣列的長度  (這樣就可以迴圈) 

4.迴圈佇列出隊偽演算法

將front的值變成(front+1)%陣列的長度 

5.如何判斷迴圈佇列是否是空?

如果front和rear的值相等,隊列為空 

6.如何判斷迴圈佇列是否已滿? 

預備知識

front的值可能比rear的值大,也可能小,也可能相等

兩種方式

1. 多增加乙個標識引數,用於表示元素的個數,這種不常用,因為要多維護乙個引數 

2. 少放乙個元素(假設有6個元素,放5個就規定滿了)  

條件 當(rear+1)%陣列的長度=front時,佇列就滿了 

什麼是迴圈佇列?

對於佇列最好的方法是使用鍊錶實現,因為對於陣列來說,佇列可能會出現下面這種情況 如圖所示,不可以繼續新增元素,否則會造成陣列越界而遭致程式出錯。然而此時又不應該擴充陣列,因為還有大量實際空間未被占用。此時我們應該如何解決這個問題呢?我們將其實現為迴圈佇列。何謂迴圈佇列?首先我們要說明的是迴圈佇列仍然...

什麼是訊息佇列?

訊息佇列有無數開源實現,一般沒必要自己實現。zmq也好rabbitmq也好甚至redis也好,找乙個合適的裝上用就行 就好像rdbms nosql一樣 技術都是解決問題的,訊息佇列解決的是將突發大量請求轉換為後端能承受的佇列請求,比如你的伺服器一秒能處理100個訂單,但秒殺活動1秒進來1000個訂單...

什麼是訊息佇列

訊息 是在兩台計算機間傳送的資料單位。訊息能夠很easy,比如僅僅包括文字字串 也能夠更複雜,可能包括嵌入物件。訊息被傳送到佇列中。訊息佇列 是在訊息的傳輸過程中儲存訊息的容器。訊息佇列管理器在將訊息從它的源中繼到它的目標時充其中間人。佇列的主要目的是提供路由並保證訊息的傳遞 假設傳送訊息時接收者不...