資料結構與演算法 佇列(佇列 迴圈佇列 鏈式佇列)

2021-10-06 06:02:36 字數 1071 閱讀 6199

和昨天的棧有一些類似,小孱弱弱今天分享的資料結構-佇列,那是非常有意思~~,顧名思義呀,佇列佇列,就是排隊呀,應該還記得棧的資料操作模式吧,僅在棧尾進行插入和刪除操作,我們的佇列呢,僅在佇列頭部刪除,佇列尾部插入,這就很清楚了吧,佇列的應用很廣泛,一定要搞清楚裡面的思想哦。

進入正題:

先是迴圈佇列,為什麼不是順序佇列呢,順序佇列的有很多不足,每次我們做刪除操作時,幾乎所有元素都要移動,這顯然大大提高複雜度,並不是我們想要的,但是迴圈佇列就不一樣了,插入刪除不需要做大量元素的移動,只需要這是乙個指標front指向隊頭,乙個指標指rear向隊尾的下一位,並且規定:佇列queue滿的條件是(rear+1)%queuesize==front。具體請看**實現:

相比順序佇列,鏈式佇列的優點就體現出來了,**實現和原理都非常簡單,具體參考**實現:

還有不明白的地方,請參考單鏈表

//順序迴圈佇列(定義)

typedef

struct

sqqueue;

//初始化空佇列

intinitqueue

(sqqueue *q)

//返回佇列長度操作

intqueuelength

(sqqueue q)

//增int

enqueue

(sqqueue *q,

int e)

//刪int

dequeue

(sqqueue *q,

int*e)

//鏈式佇列(定義)

typedef

struct qnode

qnode,

*queueptr;

//頭尾指標

typedef

struct

linkqueue;

//增 (入隊操作)

intenqueueu

(linkqueue *q,

int e)

//刪(出隊操作)

intdequeue

(linkqueue *q,

int*e)

資料結構與演算法 佇列 迴圈佇列

部分內容來自於 資料結構 c語言版 清華大學出版社,嚴蔚敏 吳偉民 編著 如果我們將佇列設定為順序儲存結構,那麼,因為出隊的時候是從隊首出隊,入隊的時候是從隊尾入隊,而入隊需要在後面的記憶體中開闢空間,一直這樣總會把所有的記憶體耗盡.雖然我們在出隊的時候會釋放空間,但是釋放的空間是在靠前的記憶體位址...

資料結構與演算法 迴圈佇列鏈式佇列

佇列 1 也是一種操作受限的線性表,規定只能在一端插入,一端刪除,有先進先出的特點。2 順序佇列,隊首指標指向隊首元素,隊尾指標指向隊尾元素的前乙個元素,此時隊列為空的判定條件是 q.front q.rear 0 2 順序佇列會有假溢位的現象,為此設計了迴圈佇列。1 為了區分隊滿和隊空的條件,迴圈佇...

資料結構與演算法系列 佇列 佇列的鏈式儲存

定義 佇列的鏈式儲存結構稱為鏈佇列。在鏈佇列中,有乙個頭指標和乙個尾指標。佇列空的條件 front rear.即頭尾指標都指向表頭結點。鏈佇列的基本操作 include includetypedef struct nodenode,lqnode void create linkqueue lqnod...