一、抽象資料型別佇列的定義
定義:只能在
表的一端(隊尾)進行插入,在另一端(隊頭)進行刪除運算的線性表。
邏輯結構:與線性表相同,仍為一對一關係。
儲存結構:用順序佇列或鏈隊儲存均可。
運算規則:
先進先出(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...