- 栈是后进先出LIFO(last in first out)的线性表。
- 栈的表尾称为栈顶(top),表头称为栈底(bottom),不含元素的空表称为空栈。
- 栈定义在<stack>头文件中。
栈类成员函数原型
//----容量capacity----
bool empty(); //测试是否为空栈
size_type size(); //返回栈长度
//----元素存取element access----
top(); //返回栈顶元素
//----栈运算operations----
void push(const T& x); //进栈
void pop(); //出
例题(栈应用)
- 用栈解决“符号平衡问题””。<>、{}、[]、()这些符号必须是成对 出现的,输入一个字符串,判断以上符号是否匹配。
#include<iostream>
#include<stack>
#include<string>
using namespace std;
bool isBalbance(const string &str) {
int len = str.size();
stack<char> balStack; //定义栈
for (int i = 0; i < len; i++) { //遍历str中的每个字符
if(str[i] == '[' || str[i] == '(' || str[i] == '{' || str[i] == '<') {
balStack.push(str[i]); //左括号则入栈
}
// 若是右括号,则进行判断
if (str[i] == ']' || str[i] == ')' || str[i] == '}' || str[i] == '>') {
if (balStack.empty()) return false; //栈中无左括号 ,但出现右括号
switch (str[i]) {
case ']': {
if ('[' == balStack.top()) { //str为左括号,栈顶为右括号,出栈
balStack.pop(); break;
}
return false;
}
case ')': {
if ('(' == balStack.top()) {
balStack.pop(); break;
}
return false;
}
case '}': {
if ('{' == balStack.top()) {
balStack.pop(); break;
}
return false;
}
case '>': {
if ('<' == balStack.top()) {
balStack.pop(); break;
}
return false;
}
}
}
}
if (balStack.empty()) return true; //字符串遍历结束且栈中空,则说明均配对
}
int main() {
string str;
bool flag;
cin >> str;
flag = isBalbance(str);
if (flag == true) cout << "Balanced" << endl;
else cout << "Unbalanced" << endl;
return 0;
}