栈
定义:
1.栈(stack)是一种特殊的线性数据结构,栈中的元素是按照入栈顺序线性的排列。
2.栈的结构如下图所示,仅允许在表的一端进行插入和删除运算,这一端被称为栈顶,相对地,把另一端称为栈底。
3.栈的特点是后进先出(LIFO,Last In First Out),即最后入栈的元素最先出栈。
栈的实现:
数组模拟(手工栈):
STL栈:
栈的应用:
接下来有的小盆友可能会问:“这玩意有啥用?没数组简便,运行还贼慢!”
其实在递归函数中,就是不断压栈弹栈的一个过程。
初识栈:
例题:
http://ybt.ssoier.cn:8088/problem_show.php?pid=1353
1353:表达式括号匹配(stack)
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 23740 通过数: 12484
【题目描述】
假设一个表达式有英文字母(小写)、运算符(+,—,∗,/+,—,∗,/)和左右小(圆)括号构成,以“@@”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YESYES”;否则返回“NONO”。表达式长度小于255255,左圆括号少于2020个。
【输入】
一行数据,即表达式。
【输出】
一行,即“YES” 或“NO”。
【输入样例】
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; }
栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现