第一次用棧(stack) 這種題我覺得天生棧思想,
這題主要做法是 左括號入棧,遇到右括號 從棧裡取出和棧.top匹配,
#include#include#include#includeusing namespace std;
bool left(char a)
bool right(char a)';
}bool pan(char a,char b)';
}bool isdui(string t)
棧的幾個基本用法,
1、棧(stack)是一種線性儲存結構,它具有如下特點:
(1)棧中的資料元素遵守「先進後出"(first in last out)的原則,簡稱filo結構。
(2)限定只能在棧頂進行插入和刪除操作。
(1)棧頂與棧底:允許元素插入與刪除的一端稱為棧頂,另一端稱為棧底。
(2)壓棧:棧的插入操作,叫做進棧,也稱壓棧、入棧。
(3)彈棧:棧的刪除操作,也叫做出棧。
3、棧的常用操作為:
(1)彈棧,通常命名為pop
(2)壓棧,通常命名為push
(3)求棧的大小
(4)判斷棧是否為空
(5)獲取棧頂元素的值
4、棧的常見分類:
(1)基於陣列的棧——以陣列為底層資料結構時,通常以陣列頭為棧底,陣列頭到陣列尾為棧頂的生長方向
(2)基於單鏈表的棧——以煉表為底層的資料結構時,以煉表頭為棧頂,便於節點的插入與刪除,壓棧產生的新節點將一直出現在鍊錶的頭部
5、例項分析
s.empty(); //如果棧為空則返回true, 否則返回false;
s.size(); //返回棧中元素的個數
s.top(); //返回棧頂元素, 但不刪除該元素
s.pop(); //彈出棧頂元素, 但不返回其值
s.push(); //將元素壓入棧頂
參考還有一種簡單模擬的,
#includeusing namespace std;
int main()') cnt3--;
if(cnt3 < 0 || cnt2 < 0 || cnt1 < 0)
} if(cnt1 == 0 && cnt2 == 0 && cnt3 == 0) cout << "yes";
else cout << "no";
return 0;
}
括號匹配 棧 c
問題描述 假設乙個算術表示式中可以包含三種括號 圓括號 方括號 及花括號 且這三種括號可以任意次序巢狀。編寫演算法判斷給定表示式中所含括號是否配對出現。解答 假設表示式已存入字元陣列a n 中,具體演算法如下 include using namespace std char s 99 棧儲存 int...
括號匹配 棧 C
描述 假設表示式中只包含三種括號 圓括號 方括號和花括號,它們可相互巢狀,如 或 等均為正確的格式,而 或均為不正確的格式.輸入一串括號 如果輸入的右括號多餘,輸出 extra right brackets 如果輸入的左括號多餘,輸出 extra left brackets 如果輸入的括號不匹配,輸...
C 括號匹配問題
用棧來解決 1.建立乙個棧 2.遍歷字串如果是左括號就壓棧 3.如果是有括號 判斷此時棧是否為空 3.1如果為空則不匹配 3.2如果不為空則彈出乙個元素 4.遍歷結束後判斷棧是否為空 若為空則匹配,不為空不匹配 bool ismatch string str 如果當前字元為右括號 if str i ...