当前位置: 首页 > news >正文

单调栈《数组模拟》

#include <iostream>using namespace std;const int N = 100010;int m;
int stk[N], tt;int main()
{cin >> m;while (m -- ){string op;int x;cin >> op;if (op == "push"){cin >> x;stk[ ++ tt] = x;//插入x}else if (op == "pop") tt -- ;//弹出  stk[tt]取出栈顶元素else if (op == "empty") cout << (tt ? "NO" : "YES") << endl;else cout << stk[tt] << endl;//判断是不是空的// if(tt>0)// cout << "不空";// else // cout << "空"}return 0;
}

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;const int N = 100010;int n;            // n表示输入的元素个数
int stk[N], tt;   // stk[]数组模拟栈, tt表示栈顶指针int main()
{cin >> n;     // 读取元素的个数for(int i = 0; i < n; i++){int x;cin >> x; // 读取当前元素x// 核心部分:维护栈的过程// 如果栈不为空,并且栈顶元素大于等于当前元素x,则弹出栈顶元素while(tt && stk[tt] >= x) tt--;// 如果栈中还有元素,说明栈顶元素就是最近的一个比当前元素x小的数if(tt) cout << stk[tt] << " ";else // 否则栈为空,说明前面没有比当前元素小的数cout << -1 << " ";// 将当前元素x压入栈中,栈顶指针tt加1stk[++tt] = x;}return 0;
}

执行过程
// 初始状态
// n = 5(表示输入的元素个数为5)。
// 栈 stk[] 和栈顶指针 tt 初始化为空,tt = 0。
// 逐步执行过程
// 处理第1个元素 3:

// 读取 x = 3。
// 当前栈为空(tt = 0),没有比 3 小的数,输出 -1。
// 将 3 压入栈中,栈状态为 [3],栈顶指针 tt = 1。
// 处理第2个元素 4:

// 读取 x = 4。
// 栈顶元素 stk[tt] = 3 小于 4,输出 3。
// 将 4 压入栈中,栈状态为 [3, 4],栈顶指针 tt = 2。
// 处理第3个元素 2:

// 读取 x = 2。
// 栈顶元素 stk[tt] = 4 大于 2,弹出 4,栈状态变为 [3],栈顶指针 tt = 1。
// 栈顶元素 stk[tt] = 3 也大于 2,继续弹出 3,栈状态变为 [],栈顶指针 tt = 0。
// 栈为空,输出 -1。
// 将 2 压入栈中,栈状态为 [2],栈顶指针 tt = 1。
// 处理第4个元素 7:

// 读取 x = 7。
// 栈顶元素 stk[tt] = 2 小于 7,输出 2。
// 将 7 压入栈中,栈状态为 [2, 7],栈顶指针 tt = 2。
// 处理第5个元素 5:

// 读取 x = 5。
// 栈顶元素 stk[tt] = 7 大于 5,弹出 7,栈状态变为 [2],栈顶指针 tt = 1。
// 栈顶元素 stk[tt] = 2 小于 5,输出 2。
// 将 5 压入栈中,栈状态为 [2, 5],栈顶指针 tt = 2。
// 最终输出
// 对于每个元素,输出结果分别是:-1 3 -1 2 2。

// 栈的状态变化
// 输入 3:输出 -1,栈 [3]
// 输入 4:输出 3,栈 [3, 4]
// 输入 2:输出 -1,栈 [2]
// 输入 7:输出 2,栈 [2, 7]
// 输入 5:输出 2,栈 [2, 5]

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 极狐 GitLab 依赖扫描:助力开发者管理软件供应链
  • SQL数据抽样:精准洞察的高效策略
  • 开放平台: 签名密钥、回调地址、ip白名单管理。
  • excel导入
  • vue3中引入插件报ts报错Could not find a declaration file for module
  • 学懂C++(二十四):高级教程——C++ 多线程编程中 std::thread 的深入详解
  • java 面试 PDF 资料整理
  • 【vue】浏览器兼容相关
  • 关于近期安卓开发书籍阅读观后感
  • 【自动驾驶】ROS中参数服务器通信(c++)
  • R语言文本挖掘-万字详细解析tm包
  • Android 开发中常用的布局类型及其选择指南
  • Hadoop之DataNode启动源码解析
  • Mybatis XML 数据源为 Oracle 之批量插入或更新 Merge Into 的具体介绍与使用
  • Android MediaRecorder 视频录制及报错解决
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • 〔开发系列〕一次关于小程序开发的深度总结
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • JDK9: 集成 Jshell 和 Maven 项目.
  • nginx 配置多 域名 + 多 https
  • orm2 中文文档 3.1 模型属性
  • PHP 7 修改了什么呢 -- 2
  • spark本地环境的搭建到运行第一个spark程序
  • SwizzleMethod 黑魔法
  • 成为一名优秀的Developer的书单
  • 高性能JavaScript阅读简记(三)
  • 记录:CentOS7.2配置LNMP环境记录
  • 思考 CSS 架构
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 用Visual Studio开发以太坊智能合约
  • ​flutter 代码混淆
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • (52)只出现一次的数字III
  • (C语言)共用体union的用法举例
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (四)图像的%2线性拉伸
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (正则)提取页面里的img标签
  • (状压dp)uva 10817 Headmaster's Headache
  • ***检测工具之RKHunter AIDE
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .gitignore文件---让git自动忽略指定文件
  • .NET技术成长路线架构图
  • @requestBody写与不写的情况
  • @我的前任是个极品 微博分析
  • [\u4e00-\u9fa5] //匹配中文字符
  • [023-2].第2节:SpringBoot中接收参数相关注解
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [20190401]关于semtimedop函数调用.txt
  • [Android Pro] Notification的使用
  • [AutoSAR系列] 1.3 AutoSar 架构
  • [C#]C#学习笔记-CIL和动态程序集
  • [C#]winform部署官方yolov10目标检测的onnx模型