和昨天的棧有一些類似,小孱弱弱今天分享的資料結構-佇列,那是非常有意思~~,顧名思義呀,佇列佇列,就是排隊呀,應該還記得棧的資料操作模式吧,僅在棧尾進行插入和刪除操作,我們的佇列呢,僅在佇列頭部刪除,佇列尾部插入,這就很清楚了吧,佇列的應用很廣泛,一定要搞清楚裡面的思想哦。
進入正題:
先是迴圈佇列,為什麼不是順序佇列呢,順序佇列的有很多不足,每次我們做刪除操作時,幾乎所有元素都要移動,這顯然大大提高複雜度,並不是我們想要的,但是迴圈佇列就不一樣了,插入刪除不需要做大量元素的移動,只需要這是乙個指標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...