数据结构 栈 C++ 蓝桥杯
栈
#include<iostream>
#include<stack>
using namespace std;
// 数据结构:
// 数组、字符串、栈、队列、链表、树、图、哈希
// STL-标准模板库
// 容器:stack栈
int main() {
// 栈:先进后出、后进先出
stack<int> stk;
int n; cin >> n;
for (int i = 1; i <= n; i++) {
int x; cin >> x;
stk.push(x);//入栈,压栈
}
while (!stk.empty()) {//当栈stk不为空
cout << stk.top() << " ";//访问栈顶元素
stk.pop();//弹出栈顶元素
}
return 0;
}
栈stack知识点总结:
栈头文件 : include<stack>——导入栈头文件
创建栈:stack<int>stk —— 栈关键字+<栈里元素类型>+栈名字
压栈:stk.push(x) —— 栈名.push(待入栈的量)——从栈顶压入x
弹栈(出栈):stk.pop() ——栈名.pop() ——弹出栈顶元素
判断栈是否为空:stk.empty()——栈名.empty()——栈为为空,返回1,栈不为空,返回0
表达式括号匹配
#include<iostream>
#include<stack>
using namespace std;
int main() {
// 1.输入一个字符串,循环判断每一个字符
// 1.1是左括号,进栈
// 1.2是右括号
// 2.判断栈是否为空
// 2.1如果栈为空,不匹配,输出NO
// 2.2栈不为空,匹配,弹出栈顶元素
// 3.循环结束后(所有符号扫描完毕),判断栈是否为空
// 3.1栈为空,所有左右小括号刚好匹配,输出YES
// 3.2栈不为空,左括号多余,不匹配,输出NO
stack<int>stk;
string str; cin >> str;
for (int i = 0; i < str.size(); i++) {//1.循环判断每一个字符
if (str[i] == '(') {//1.1是左括号,进栈
stk.push(i);//这里记的是下标
}
else if (str[i] == ')') {//1.2是右括号
if (stk.empty()) {//2.判断栈是否为空
cout << "NO" << endl;//2.1如果栈为空,不匹配,输出NO
return 0;
}
else {// 2.2栈不为空,匹配,弹出栈顶元素
stk.pop();
}
}
}
// 3.循环结束后(所有符号扫描完毕),判断栈是否为空
if (stk.empty()) cout << "YES" << endl;//3.1栈为空,所有左右小括号刚好匹配,输出YES
else cout << "NO" << endl;//3.2栈不为空,左括号多余,不匹配,输出NO
return 0;
}
// 思路来源:如下图
思路:
// 1.输入一个字符串,循环判断每一个字符
// 1.1是左括号,进栈
// 1.2是右括号
// 2.判断栈是否为空
// 2.1如果栈为空,不匹配,输出NO
// 2.2栈不为空,匹配,弹出栈顶元素
// 3.循环结束后(所有符号扫描完毕),判断栈是否为空
// 3.1栈为空,所有左右小括号刚好匹配,输出YES
// 3.2栈不为空,左括号多余,不匹配,输出NO
完结!!!⠀՞⸝⸝. .⸝⸝՞˳ഒ