Cristiano的棧和佇列總結

2021-10-07 07:10:36 字數 2697 閱讀 4000

一、棧和佇列的概念

棧和佇列常應用在作業系統、編譯程式等各種軟體系統中,是操作受限的線性表。

二、棧

2.1 棧的邏輯結構

棧是限定僅在表尾進行插入和刪除操作的線性表,允許插入和刪除的一端成為棧頂,另一端稱為棧低,不含任何資料元素的棧稱為空棧。

棧中的元素具有後進先出的特徵,即最**棧者最先出棧

2.2 棧的儲存結構

2.2.1 棧的順序儲存結構——順序棧

順序棧的本質上是順序棧的簡化,唯一需要確定的是用陣列的哪一段表示棧底。

一般用陣列中下標為0的一端作為棧底,同時附設指標top = -1;元素入棧時top要加1,出棧時top要減1;棧滿時top == maxsize-1;top指標始終指向棧頂,即陣列的最末尾的位置

2.2.2 兩棧共享空間

顧名思義,即兩個棧共用乙個陣列(陣列長度足夠長),且兩個指標top1 =-1,top2 = maxsize;即從兩邊雙向新增進元素

2.2.3 棧的連線儲存結構——鏈棧

通常鏈棧用單鏈表實現,一般採用頭插法將資料元素入棧,因為這樣top指標始終指向鏈棧的頭節點,就滿足後進先出的特徵。

鏈棧不需要設定first頭節點,只需要top = null即可,就成功建立了乙個空鏈棧

2.2.4 鏈棧和順序棧的比較

2.2.4.1 時間效能比較

兩者的時間效能差不多,比較意義不大

2.2.4.2 空間效能比較

順序棧必須確定乙個固定的長度;而鏈棧不存在棧滿的問題,但是每個節點的指標域會產生結構性開銷。

因此當棧的元素個數變化較大時,使用鏈棧;反之使用順序棧

三、佇列

3.1 佇列的邏輯結構

佇列是只允許在一端進行插入操作,在另一端進行刪除操作的線性表。允許插入(入隊、進隊)的一端稱為隊尾,允許刪除(出隊)的一端稱為隊頭,佇列中的元素具有先進先出的特點

3.2 佇列的儲存結構

3.2.1 佇列的順序儲存結構——迴圈佇列

迴圈佇列與單向佇列不同,單向佇列是一昧的往後面新增元素,可能會出現「假溢位」的情況,使用迴圈佇列就可以解決這種現象。

如何使得rear(front)指標指向「下乙個」位置的呢?初始化一般:rear = front = 0;

只需令

rear =

(rear+1)

%size;

front =

(front+1)

%size;

即可

如何區分佇列是滿還是空?

我們可以浪費乙個儲存空間,裡面的值為空,在初始化時令front指標指向它,rear指標指向它的下乙個空間,這樣front指標和rear指標就正好相差一。則當front == rear 時隊列為空;當front == (rear+1)%size時佇列已滿

3.2.2 佇列的連線儲存結構——鏈式佇列

鏈式佇列是在單鏈表的基礎上進行修改,與鏈棧不同的是,鏈式佇列需要設定first頭指標,再令front = rear = first指標即可。

插入時採用尾插法,刪除時從頭節點開始刪除,滿足先進先出的特徵

刪除時要注意佇列長度等於1時的特殊情況

char linkquese::

dequese()

else

delete p;

msize--

;return ch1;

}}

3.2.3 迴圈佇列和鏈式佇列的比較

3.2.3.1 時間效能比較

二者的時間效能相同

3.2.3.2 空間效能比較

當佇列的元素個數變化較大時,使用鏈式佇列;反之使用迴圈佇列

//棧

//如果棧為空則返回true, 否則返回false;

//返回棧中元素的個數

//返回棧頂元素, 但不刪除該元素

//彈出棧頂元素, 但不返回其值

//將元素壓入棧頂

//佇列

//如果隊列為空返回true, 否則返回false

//返回佇列中元素的個數

//返回隊首元素但不刪除該元素

//彈出隊首元素但不返回其值

//將元素壓入佇列

//返回隊尾元素的值但不刪除該元素

#include

#include

#include

using

namespace std;

//定義

stack<

int>s;

queue<

int>q;

棧和佇列 單調佇列 單調棧

講解部落格鏈結 一 單調棧 1 什麼是單調棧?單調棧是指乙個棧內部元素具有嚴格單調性 單調遞增,單調遞減 的一種資料結構。2 單調棧的兩個性質 滿足從棧頂到棧底具有嚴格的單調性 滿足後進先出的特徵,越靠近棧底的元素越早的進棧。3 元素進棧的過程 對於當前進棧元素x 如果x 棧頂元素,x 進棧。否則 ...

棧和佇列 佇列

佇列 又一種特殊的線性表 佇列 queue 是只允許在一端進行插入,而在另一端進行刪除的運算受限的線性表 允許刪除的一端稱為隊頭 front 允許插入的一端稱為隊尾 rear 當佇列中沒有元素時稱為空佇列。佇列的修改是依先進先出的原則進行的。新來的成員總是加入隊尾 即不允許 加塞 每次離開的成員總是...

棧和佇列(佇列)

列隊類 public class myqueue 帶引數構造方法,引數為陣列大小 public myqueue int maxsize 新增資料 從隊尾插入 public void insert int value arr end value 注意是 end 不是end element 刪除資料,從...