#棧的基本原理
知識講解
棧也是一種操作(或者說運算)受到限制的特殊線性表。其插入進棧和刪除操作都限制在表的一端進行,這一端被稱為「棧頂(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++);
**如下:
例題2#include
using
namespace std;
intmain()
continue
;//直接進行i++操作,忽略本次迴圈的後續語句}if
(str[i]
=='#')}
s1.push
(str[i]);
//如果都不符合前面兩個條件那就乖乖進棧叭
}while
(!s1.
empty()
)//利用棧先進後出,後進先出的性質,
while
(!s2.
empty()
)printf
("\n");
return0;
}
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...