資料結構 第三章 棧和佇列 佇列

2021-09-29 12:17:44 字數 2974 閱讀 8147

筆記【資料結構】第三章 棧和佇列–佇列

佇列的邏輯結構

佇列:只允許在一端進行插入操作,而另一端進行刪除操作的線性表。

空佇列:不含任何資料元素的佇列。

允許插入(也稱入隊、進隊)的一端稱為隊尾,允許刪除(也稱出隊)的一端稱為隊頭。

佇列的操作特性:先進先出(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棧的順序儲存結構及實現 順序棧類 順序棧類的宣告 ...