大話資料結構 迴圈佇列 2020 6 28

2021-10-07 13:38:58 字數 1361 閱讀 2996

佇列(queue)是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。

佇列是一種先進先出的線性表,簡稱fifo(first in first out)。允許插入的一端稱為隊尾,允許刪除的一端稱為隊頭。

佇列順序儲存結構的不足:入隊操作時間複雜度為o(1),出隊操作時間複雜度為o(n)。因此,使用迴圈佇列可大大降低出隊操作的時間複雜度。

所謂迴圈佇列,即使用兩個指標分別指向佇列的頭和尾,即頭指標和尾指標,而不必關注用於儲存佇列資料的陣列下標。此處規定:頭指標為front,尾指標為rear,頭指標指向佇列的第乙個元素,尾指標指向佇列最後乙個元素的後面的乙個位置,因此。不難發現,當頭指標front與尾指標rear值相等時,隊列為空。

特別注意:最難理解的部分,應是何時隊列為滿,不可再執行插入操作。此處規定,隊列為空時,佇列中不包含元素,隊列為滿時,修改條件,保留乙個元素空間,也就是說,隊滿時,陣列中還有乙個空餘空間,即(rear+1)% queuesize == front 時,隊滿。(使用文字說明過於抽象,詳見下圖

計算佇列長度的公式:(rear-front+queuesize)% queuesize

此處僅奉上迴圈佇列的類定義與必要類方法,而不闡明主函式。

#include

#include

using

namespace std;

typedef

int elemtype;

const

int maxn=

25000

;class

sqqueue

intqueuelength()

bool

enqueue

(elemtype n)

;//佇列插入操作

bool

dequeue

(elemtype *element)

;//佇列刪除操作 };

bool sqqueue::

enqueue

(elemtype n)

bool sqqueue::

dequeue

(elemtype *element)

迴圈佇列確實抽象,筆者自學這一部分時也不是很好理解,且迴圈佇列又面臨著陣列可能溢位的風險,因此此處不作過多的說明,稍後將奉上佇列的鏈式儲存結構。

大話資料結構 佇列

佇列 queue 只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。fifo結構 adt 佇列 queue data operation initqueue q 初始化操作,建立乙個空佇列q。destroyqueue q 若佇列q存在,則銷毀它。clearqueue q 將佇列q清空。que...

大話資料結構 佇列

佇列是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。佇列是一種先進先出的線性表,簡稱fifo。允許插入的一端稱為隊尾,允許刪除的一端稱為隊頭。佇列的抽象資料型別 adt 佇列 queue data 同線性表。元素具有相同的型別,相鄰元素具有前驅和後繼的關係。operation initq...

資料結構 佇列 迴圈佇列

在佇列的陣列實現中,我們很容易發現數在出隊後,陣列的前面部分會有剩餘空間沒有被使用,所以我們為了最大程度的利用固定長度的陣列,我們採用迴圈佇列的儲存方式,這種方式的最大問題在於resize的時候比較麻煩,所以我們不考慮resize的情況。基本結構如下,這裡front指向第乙個元素的位置,rear指向...