目錄
1、佇列的鏈式儲存
2、鏈式佇列的基本操作
2.1、初始化
2.2、判隊空
2.3、入隊
2.4、出隊
3、雙端佇列
3.1、輸出受限的雙端佇列
3.2、輸入受限的雙端佇列
佇列的鏈式表示稱為鏈佇列 ,它實際上是乙個同時帶有隊頭指標和隊尾指標的單鏈表。頭指標指向隊頭結點。尾指標指向隊尾結點,即單鏈表的最後乙個結點。
圖17.1 不帶頭結點的鏈式佇列
佇列的鏈式儲存型別可描述為
//鏈式佇列結點
typedef struct
linknode;
//鏈式佇列
typedef struct
linkqueue;
當q.front == null && q.rear == null時u,鏈式隊列為空。
出隊時,首先判斷隊是否為空,若不空,則取出隊頭元素,將其從鍊錶中華摘除,並讓q,front = q.front->next;
入隊時,建立乙個新的結點,將該結點插入到鍊錶的尾部,並讓q.rear = q.rear->next。
從上述描述看出,出現了和順序佇列同樣的問題,就是操作浪費空間(空間只能用一次),且耗時。
void initqueue(linkqueue &q)
bool isempty(linkqueue q)
void enqueue(linkqueue &q,elemtype x)
//不帶頭結點的鏈式佇列
bool dequeue(linkqueue &q,elemtype &x)
//帶頭結點的鏈式佇列
bool dequeue(linkqueue &q,elemtype &x)
雙端佇列是指允許兩端都可以進行入隊和出隊操作的佇列。如圖17.2所示。其元素的邏輯結構仍是線性結構。將佇列的兩端分別稱為前端和後端,兩端都可以入隊和出隊。
圖17.2 雙端佇列
在雙端佇列進隊時,前端進的元素排列在佇列中後端進的元素的前面,後端進的元素排列在佇列中前端進的元素的後面。
在雙端佇列出隊時,無論是前端還是後端,先出的元素排在後出的元素的前面。
那麼,如何由入序佇列a,b,c,d得到出序佇列d,c,a,b?
一種方法是後端先出隊元素d,c,完了前端再出隊元素a,b。
允許在一端進行插入和刪除,但在另一端只允許插入的雙端佇列稱為輸出受限的雙端佇列,如圖17.3 所示。
圖17.3 輸出受限的雙端佇列
允許在一端進行插入和刪除,但另一端只允許刪除的雙端佇列稱為輸入受限的雙端佇列,如圖17.4所示
圖17.4 輸入受限的雙端佇列
你,總要埋頭去做一些事情,不是嗎
資料結構 佇列 順序儲存結構佇列 鏈式儲存結構佇列
佇列是一種只允許在一端進行插入操作,而在另外一端進行刪除操作的線性表,特徵是先進先出,包括 順序儲存結 構佇列 鏈式儲存結構佇列。重點說明 迴圈佇列和鏈隊。在佇列中front為隊頭指標 rear為隊尾指標 佇列 佇列空的條件 rear front 佇列滿的條件 rear 1 queuesize fr...
資料結構 佇列(鏈式儲存)
資料結構和演算法 摘要 前一篇部落格主要討論迴圈佇列,但是迴圈佇列都是事先申請好空間,使用期間是不能釋放的。但是鏈佇列,每次都可以進行申請和釋放結點。再無法預估佇列長度的時候,我們可以考慮用鏈佇列。1 設計佇列資料結構 結點結構 typedef struct queue node queue nod...
資料結構 佇列的鏈式儲存
佇列的順序儲存 佇列的鏈式儲存 佇列的應用 列印楊輝三角 include include typedef struct nodenode,nodep typedef struct baglinklist linklistp void initialquene linklistp q intpushq...