筆記【資料結構】第三章 棧和佇列–佇列
佇列的邏輯結構
佇列:只允許在一端進行插入操作,而另一端進行刪除操作的線性表。
空佇列:不含任何資料元素的佇列。
允許插入(也稱入隊、進隊)的一端稱為隊尾,允許刪除(也稱出隊)的一端稱為隊頭。
佇列的操作特性:先進先出(fifo,lilo)
佇列的順序儲存結構及實現
**順序佇列:**佇列的順序儲存結構
隊頭指標和隊尾指標的說明
隊頭指標指向佇列中的第乙個元素之前的元素,隊尾指標指向佇列中的最後乙個元素
隊頭指標指向佇列中的第乙個元素,隊尾指標指向佇列中的最後乙個元素的後乙個位置
假溢位:當元素被插入到陣列中下標最大的位置上之後,佇列的空間就用盡了,儘管此時陣列的低端還有空閒空間,這種現象叫做假溢位。
如何解決假溢位?
迴圈佇列:將儲存佇列的陣列頭尾相接。
如何實現迴圈佇列?
不存在物理的迴圈結構,用軟體方法實現。
求模:rear=(rear+1)% maxsize
front=(front+1)% mazsize
如何確定不同的隊空、隊滿的判定條件?
方法一:附設乙個儲存佇列中元素個數的變數num,當num=0時隊空,當num=queuesize時為隊滿;
方法二:修改隊滿條件,浪費乙個元素空間,隊滿時陣列中只有乙個空閒單元;
方法三:設定標誌flag,當front=rear且flag=0時為隊空,當front=rear且flag=1時為隊滿。
隊滿的條件:(rear+1) mod queuesize==front
迴圈佇列類的宣告
const int queuesize=100;
template class cirqueue;
private:
t data[queuesize];
int front, rear;
};
迴圈佇列的實現——入隊
template void cirqueue::enqueue(t x)
迴圈佇列的實現——出隊
template t cirqueue::dequeue( )
迴圈佇列的實現——讀隊頭元素
template t cirqueue::getqueue( )
迴圈佇列的實現——佇列長度
template int cirqueue::getlength( )
鏈佇列類的宣告
template class linkqueue
;
鏈佇列的實現——建構函式
操作介面: linkqueue( );
演算法描述:
template linkqueue::linkqueue( )
鏈佇列的實現——入隊
操作介面: void enqueue(t x);
演算法描述:
s->next=null;
rear=s;
front=s;
template void linkqueue::enqueue(t x)
鏈佇列的實現——出隊
演算法描述:
p=front->next;
front->next=p->next;
delete p;
演算法描述:
在刪除節點之後,還要進行下面的處理
if (p->next==null)
rear=front;
template t linkqueue::dequeue( )
迴圈佇列和鏈佇列的比較
時間效能:
迴圈佇列和鏈佇列的基本操作都需要常數時間o (1)。
空間效能:
迴圈佇列:必須預先確定乙個固定的長度,所以有儲存元素個數的限制和空間浪費的問題。
鏈佇列:沒有佇列滿的問題,只有當記憶體沒有可用空間時才會出現佇列滿,但是每個元素都需要乙個指標域,從而產生了結構性開銷。
火車車廂重排過程
分別對k個佇列初始化;
初始化下乙個要輸出的車廂編號nowout = 1;
依次取入軌中的每乙個車廂的編號;
3.1 如果入軌中的車廂編號等於nowout,則
3.1.1 輸出該車廂;
3.1.2 nowout++;
3.2 考察每乙個緩衝軌佇列
for (j=1; j<=k; j++)
3.2.1 取佇列 j 的隊頭元素c;
3.2.2 如果c=nowout,則
3.2.2.1 將佇列 j 的隊頭元素出隊並輸出;
3.2.2.2 nowout++;
3.3 如果入軌和緩衝軌的隊頭元素沒有編號為nowout的車廂,則(如果前兩步工作都不成立)
3.3.1 求小於入軌中第乙個車廂編號的最大隊尾元素所在佇列編號j;
3.3.2 如果 j 存在,則把入軌中的第乙個車廂移至緩衝軌 j;
3.3.2 如果 j 不存在,但有多於乙個空緩衝軌,則把入軌中的第乙個車廂移至乙個空緩衝軌;否則車廂無法重排,演算法結束;
資料結構第三章棧和佇列
第四章 棧和佇列 1.棧 限定僅在表尾進行插入或刪除操作的線性表,表尾端稱為棧頂,表頭端稱為棧底。棧頂移動,棧底固定。特點 先進後出 後進先出 typedef struct sqstack status push sqstack s,selemtype e status pop sqstack s,...
資料結構 第三章 棧和佇列
目錄 3.1 堆疊的基本概念 3.2 堆疊的順序儲存結構 一 構造原理 二 實現 三.多棧共享連續空間問題 3.3 堆疊的鏈式儲存結構 一.構造原理 二 實現 3.4 佇列的基本概念 3.5佇列的順序儲存結構 一.構造原理 二 實現 三.迴圈佇列 3.5 佇列的鏈式儲存結構 一.構造原理 二 實現 ...
資料結構 第三章 棧和佇列
3.1特殊的線性表 棧 3.2特殊的線性表 佇列 3.1特殊的線性表 棧 3.1.1棧的邏輯結構 棧 限定僅在表尾進行插入和刪除操作的線性表。空棧 不含任何資料元素的棧。允許插入和刪除的一端稱為棧頂,另一端稱為棧底。棧的操作特性 後進先出。3.1.2棧的順序儲存結構及實現 順序棧類 順序棧類的宣告 ...