資料結構(17)佇列的鏈式儲存結構和雙端佇列

2021-10-06 13:24:14 字數 1783 閱讀 9532

目錄

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...