資料結構 佇列

2021-08-18 18:33:51 字數 1606 閱讀 4539

一、抽象資料型別佇列的定義

定義:只能在

表的一端(隊尾)進行插入,在另一端(隊頭)進行刪除運算的線性表。

邏輯結構:與線性表相同,仍為一對一關係。

儲存結構:用順序佇列或鏈隊儲存均可。

運算規則:

先進先出(fifo)

實現方式:關鍵是編寫入隊和出隊函式,具體實現依順序隊或鏈隊的不同而不同。

佇列的抽象資料型別:

adt queueadt queue

二、鏈佇列——佇列的

鏈式表示和實現

鏈佇列:用

鍊錶表示的佇列(佇列的鏈式表示),需要兩個分別指向隊頭和隊尾的

指標(頭指標和尾指標)才能唯一確定。

佇列的鏈式儲存結構:

typedef struct qnodeqnode, *queueptr

typedef struct linkqueue;

出佇列和入佇列:

基本操作的演算法描述:

status initqueue (linkqueue &q)

status destroyqueue (linkqueue &q)   

return ok;}

status enqueue(linkqueue &q,qelemtype e)

status dequeue (linkqueue &q,qelemtype &e)

一般情況下,刪除佇列頭元素時僅需修改頭結點中的指標,但當佇列中最後乙個元素被刪除之後,佇列尾指標也丟失了,因此需對隊尾指標進行重新賦值(指向頭結點)

三、迴圈佇列——佇列的

順序表示和實現

1.順序佇列的缺點:

一開始的時候乙個空隊:

front=rear=0

使用一維陣列base[m]表示

空隊標誌:front= =rear

入隊:base[rear++]=x;

出隊:x=base[front++];

當陣列的大小為m時:

(1)front=0

rear=m時

再入隊—

真溢位(2)front¹0

rear=m時

再入隊—

假溢位2.解決方法:使用

迴圈佇列

base[0]接在base[m-1]之後

若rear+1==m

則令rear=0;

實現:利用「模」運算

入隊:base[rear]=x;

rear=(rear+1)%m;

出隊:x=base[front];

front=(front+1)%m;

如果使用者的應用程式中設有迴圈佇列,則必須為它設定乙個最大佇列長度;若使用者無法預估所用佇列的最大長度,則宜採用鏈。

佇列的鏈式儲存結構:

#define maxsize  100   //最大佇列長度

typedef struct sqqueue;

status initqueue(sqqueue &q)

int queuelength (sqqueue q)

status enqueue (sqqueue &q,qelemtype e)

status dequeue (linkqueue &q,qelemtype &e)

資料結構 佇列

一 佇列的迴圈陣列實現。1 初始化 空佇列。令rear front 0。2 入佇列 約定rear指向佇列尾元素的下乙個位置。入佇列時,先判斷佇列是否已滿,而後將array rear x 然後rear 3 出佇列 約定front指向佇列的首元素位置。出佇列時,先判斷佇列是否為空,而後返回隊首元素re ...

資料結構 佇列

資料參考自 資料結構c 語言描述 佇列是一種先進先出的資料結構,這與棧正好相反。下例是簡單的queue實現 queue.h檔案 ifndef queue h define queue h include include 資料元素結構 自定義 struct datatype 佇列元素最大數 const...

資料結構 佇列

code for fun created by dream whui 2015 1 25 include stdafx.h include include using namespace std define true 1 define false 0 define ok 1 define erro...