佇列(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指向...