資料結構 棧講解

2021-10-02 11:33:45 字數 1974 閱讀 6133

#棧的基本原理

知識講解

棧也是一種操作(或者說運算)受到限制的特殊線性表。其插入進棧和刪除操作都限制在表的一端進行,這一端被稱為「棧頂(top)」,相對a的另一端稱為「棧(bottom)」。插入操作一般稱之為「進棧(push)或者「壓棧」,刪除操作稱之為「出棧(pop)」棧的特點是「先進後出(fifo, first in last out),就像家裡洗碗吃飯先洗好的碗疊在最下面,後洗好的疊在上面,用的時候是先用後洗好(上面)的碗。

棧的儲存和實現方式也有陣列模擬與鍊錶模擬兩種,這裡主要介紹陣列方式。假設已經定義了int型別的stk陣列儲存棧,top表示頂指標,那麼stk[top]儲存的就是棧頂元素。

#棧的基本操作:

(1)初始化棧 stackvis ,定義乙個棧

(2)入棧 vis.push(x)

(3)出棧 vis.pop()

(4)判斷是否為空 vis.empty()

(5)判斷棧中元素的數量vis.size()

(6)得到棧的棧頂元素 vis.top()

綜上: #include

用則無需考慮標頭檔案。

例題1 程式設計師輸入問題

description

程式設計師輸入程式出現差錯時,可以採取以下的補救措施:按錯了乙個鍵時,可以補按乙個退格符「#」,以表示前乙個字元無效;發現當前一行有錯,可以按乙個退行符「@」,以表示「@」與前乙個換行符之間的字元全部無效。

input

輸入一行字元,個數不超過 100。

output

輸出一行字元,表示實際有效字元。

sample input

sdfosif@for (ii#=1,#;i<.#=8;i+++#);

sample output

for (i=1;i<=8;i++);

**如下:

#include

using

namespace std;

intmain()

continue

;//直接進行i++操作,忽略本次迴圈的後續語句}if

(str[i]

=='#')}

s1.push

(str[i]);

//如果都不符合前面兩個條件那就乖乖進棧叭

}while

(!s1.

empty()

)//利用棧先進後出,後進先出的性質,

while

(!s2.

empty()

)printf

("\n");

return0;

}

例題2

description

假設表示式中允許包含圓括號和方括號兩種括號,其巢狀的順序隨意,如([]())或[([][])]等為正確的匹配,[(])或([]()或(()))均為錯誤的匹配。

本題的任務是檢驗乙個給定表示式中的括號是否正確匹配。

輸入乙個只包含圓括號和方括號的字串,判斷字串中的括號是否匹配,匹配就輸出「ok」,不匹配就輸出「wrong」。

input

一行字元,只含有圓括號和方括號,個數小於 255。

output

匹配就輸出一行文字「ok」,不匹配就輸出一行文字「wrong」。

sample input

[(])

sample output

wrong

**如下:

#include

using

namespace std;

stack<

char

>s1;

char str[

1010];

int len;

char tmp;

intmain()

else

else}}

if(s1.

empty()

)else

return0;

}

python資料結構 棧講解

應用實戰 棧有時也稱作下堆疊,是乙個有序集合,以列表的形式,但是他的新增和移除操作總是發生在同一端,被稱為頂端,也叫做棧頂,另一端被稱為低端,也叫棧底。可以理解為在桌子上疊放書本,我們放上去之後如果拿的話也是從上往下拿,放的話則是從下往上,我們往往取的都是放的時間最晚的,就是這個原理。棧的操作型別有...

(資料結構)棧講解和棧實現

棧的概念 棧 一種特殊的線性表,其只允許在固定的一端進行插入和刪除元素操作。進行資料插入和刪除操作的一端稱為棧頂,另一端稱為棧底。棧中的資料元素遵守後進先出lifo last in first out 的原則。壓棧 棧的插入操作叫做進棧 壓棧 入棧,入資料在棧頂。出棧 棧的刪除操作叫做出棧。出資料也...

資料結構 棧 棧

可以把棧想像成乙個桶 進棧 就是把和桶口一樣大的燒餅往桶裡面扔 出棧 就是把燒餅拿出來 特點 先進後出。先扔進去的燒餅最後才能拿出來,最後扔進去的燒餅,第乙個拿出來 剛開始top 1 top 1 然後把進棧的元素賦值給data top 入棧操作 void push stack s,int x els...