1.棧(stack)是一種特殊的線性資料結構,棧中的元素是按照入棧順序線性的排列。
2.棧的結構如下圖所示,僅允許在表的一端進行插入和刪除運算,這一端被稱為棧頂,相對地,把另一端稱為棧底。
3.棧的特點是後進先出(LIFO,Last In First Out),即最後入棧的元素最先出棧。
陣列模擬(手工棧):
STL棧:
接下來有的小盆友可能會問:「這玩意有啥用?沒陣列簡便,執行還賊慢!」
其實在遞迴函數中,就是不斷壓棧彈棧的一個過程。
初識應用:
假設一個表示式有英文字母(小寫)、運運算元(+,—,∗,/+,—,∗,/)和左右小(圓)括號構成,以「@@」作為表示式的結束符。請編寫一個程式檢查表示式中的左右圓括號是否匹配,若匹配,則返回「YESYES」;否則返回「NONO」。表示式長度小於255255,左圓括號少於2020個。
一行資料,即表示式。
一行,即「YESYES」 或「NONO」
2*(x+y)/(1-x)@
YES
【樣例輸入2】
(25+x)*(a*(a+b+b)@
【樣例輸出2】
NO
【程式碼】
又去洛古提交了顯示「RE」,說明爆棧,但是這個棧怎麼變大???????????????
於是換了種思路:
兩邊都AC了!!!
程式碼:
思路都差不多
#include<bits/stdc++.h> using namespace std; int main(){ string s; int top=0; getline(cin,s); for(int i=0;i<s.size()-1;i++){ if(s[i]=='(') top++; else if(s[i]==')') top--; if(top<0) break; } if(top!=0) cout<<"NO"; else cout<<"YES"; return 0; }
棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧棧