資料結構與演算法 棧

2021-10-10 01:14:45 字數 3163 閱讀 9608

鏈棧棧是一種特殊的資料儲存結構,採用先進後出的規則,先入棧的元素被**棧的元素「擠壓」在下面,出棧的時候只能等「壓在它身上」的元素都出去以後,它才能出去。就像把東西放進乙個豎桶:

如圖,1是最先進去的,所以只有別的元素都出去了,它才出得去

c++的庫里其實給我們寫好了這一資料結構,直接呼叫就可以

#include

#include

//stl中棧的標頭檔案

using

namespace std;

stack<

int> s;

//宣告乙個int型的棧

intmain()

while

(!s.

empty()

)return0;

}

輸入:

512345

輸出:

543

21

stl中的棧有如下常用函式

stl雖好,可不要貪杯哦

老師會查**,所以就算你用stl過了,估計也得涼涼

畢竟是初學,為了更好地熟悉棧的基本操作,我們還是需要手寫一下的!

就是用順序表實現棧這一資料結構

#include

#define maxsize 1000

//用來規定棧的大小

using

namespace std;

struct stack

;

top用來記錄目前棧頂元素的下標,所以它的取值範圍應該是0~maxsize-1

初始化時,將top初始化為-1,這樣以後判斷棧是不是空的,就可以用if(s.top==-1)來判斷。

void

initstack

(stack &s)

將乙個元素入棧,需要有兩個步驟:

出棧時很簡單,只要top--就可以了,因為順序表完全依賴top進行訪問,所以即使top--後,原來的資料還是存在順序表裡,並沒有受到影響,但一旦有新的元素入棧,在top的影響下新元素會自動覆蓋老元素

void

pop(stack &s)

直接返回即可

int

top(stack s)

while(!

empty

(head)

)

對於判斷棧空的函式,一般的設計規則是棧空則返回1(真),棧非空則返回0(假)。所以只需要這樣寫:

bool

empty

(stack s)

ps.bool是一種變數型別,就像int一樣,但不同的是int型別的變數取值範圍很大,可以是任何乙個整數(不超儲存範圍的前提下),但bool型的變數只有兩種可能的取值——10,即truefalse鏈棧就是用鍊錶實現棧的儲存結構,還是鍊錶那一套操作,甚至它比鍊錶簡單——它白白加了乙個先進後出的限制,搞得你不必考慮尾插法/頭插法建表,不必考慮不刪除情況下的遍歷,只要會一些基本鍊錶操作即可

ps. 我寫完才發現,書上給的鏈棧沒有頭結點,它第乙個結點就開始儲存資料了,而我套用的是鍊錶的模版,所以我給的**是有頭結點的,大家如果有把兩個結合著看的,注意一下這一點!

pps. 鏈棧跟順序棧的區別其實就是換了個載體,所以順序棧的基本思路講解完全可以搬到下面的鏈棧裡來,我就不多寫一遍啦!

struct linkstack

;

void

initlinkstack

(linkstack *

&head)

void

destorylinkstack

(linkstack *

&head)

delete pre;

}

void

push

(linkstack *

&head,

int value)

void

pop(linkstack *

&head)

int

top(linkstack *head)

bool

empty

(linkstack *head)

資料結構與演算法《棧》

概念 棧 stack 又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素 從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使...

棧(資料結構與演算法)

給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true示例 2 輸入 輸出 true示例 3 輸入 輸出 false示例 4 輸入 輸出 false示例 5 輸入 輸出 tr...

資料結構與演算法 棧

後進先出 lifo last in first out 最後插入的元素最先出來,是一種 操作受限 的線性表,只允許在端插入和刪除資料 順序棧 用陣列實現,順序棧需要動態擴容,在初始化時需要給定乙個固定大小的陣列,當棧大於固定大小時需要擴充陣列的大小。templateclass myarraystac...