佇列 順序佇列儲存結構的不足(假溢位)

2021-07-06 01:40:34 字數 864 閱讀 3416

我們假設乙個佇列有n個元素,則順序儲存的佇列需建立乙個大於n的陣列,並把佇列的所有元素儲存在陣列的前n個單元,陣列下標為0的一端即是隊頭。所謂的入佇列操作,其實就是在隊尾追加乙個元素,不需要移動任何元素,因此時間複雜度為0(1)。

可有時想想,為什麼出佇列時一定要全部移動呢,如果不去限制佇列的元素必須儲存在陣列的前n個單元這一條件,出隊的效能就會大大增加。也就是說,隊頭不需要一定在下標為0的位置,比如也可以是a[1]等。

為了避免當只有乙個元素時,隊頭和隊尾重合使處理變得麻煩,所以引入兩個指標,front指標指向隊頭元素,rear指標指向隊尾元素的下乙個位置,這樣當front等於rear時,此佇列不是還剩乙個元素,而是空佇列。

假設是長度為5的陣列,初始狀態,空佇列如所示,front與 rear指標均指向下標為0的位置。然後入隊a1、a2、a3、a4, front指標依然指向下標為0位置,而rear指標指向下標為4的位置。

出隊a1、a2,則front指標指向下標為2的位置,rear不變,如下圖所示,再入隊a5,此時front指標不變,rear指標移動到陣列之外。嗯?陣列之外,那將是**?

問題還不止於此。假設這個佇列的總個數不超過5個,但目前如果接著入隊的話,因陣列末尾元素已經占用,再向後加,就會產生陣列越界的錯誤,可實際上,我們的佇列在下標為0和1的地方還是空閒的。我們把這種現象叫做「假溢位」!!!!!!

為了解決這個問題,引入了迴圈佇列的概念。

佇列 順序儲存結構,迴圈佇列

為什麼小甲魚上節課說佇列的實現上我們更願意用鏈式儲存結構來儲存?我們先按照應有的思路來考慮下如何構造佇列的順序儲存結構,然後發掘都遇到了什麼麻煩。我們假設乙個佇列有n個元素,則順序儲存的佇列需建立乙個大於n的儲存單元,並把佇列的所有元素儲存在陣列的前n個單元,陣列下標為0的一端則是隊頭。no pic...

順序表示的佇列 順序佇列2 假溢位

要求順序迴圈佇列不損失乙個空間全部能夠得到有效利用,請採用設定標誌位tag的方法解決 假溢位 問題,實現順序迴圈佇列演算法。考察迴圈隊列入隊和出隊演算法思想。設定標誌位tag,初始時tag 0,當元素入隊成功,令tag 1 出隊成功令tag 0。則隊列為空的判定條件為front rear tag 0...

資料結構 佇列 順序儲存結構佇列 鏈式儲存結構佇列

佇列是一種只允許在一端進行插入操作,而在另外一端進行刪除操作的線性表,特徵是先進先出,包括 順序儲存結 構佇列 鏈式儲存結構佇列。重點說明 迴圈佇列和鏈隊。在佇列中front為隊頭指標 rear為隊尾指標 佇列 佇列空的條件 rear front 佇列滿的條件 rear 1 queuesize fr...