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

数据结构中双栈的实现方法分享

不卖关子,直接进入主题:

首先最重要的,我们需要两个和栈 数值栈 和 运算符栈 

在遍历时,需要同时对后缀表达式的 生成方式 和 计算方式 这两方面同步进行。

核心就是在每次运算符栈的弹栈操作均伴随着一次数值的计算,共三处

  1. 遍历到运算符
  2. 遍历到右括号
  3. 遍历完处理非空的运算符栈

根据运算符的种类,对数值栈的栈顶元素和栈顶倒数第二个元素进行运算,并将计算结果再次保存到数值栈中。

  • 预处理和辅助细节
  1. 过滤原表达式无用的空格。
  2. 对于单元运算符 +/- 在左括号后的出现,可以添加占位 0 构成 0 + num 或 0 - num 的操作。
  3. 对于一些特殊表达式如 -1 可以在数字栈放一个占位的 0,保证每次的操作在数字栈中能有至少两个操作数。
  4. 可以用一个哈希表维护各类运算符的优先级问题。

​下面代码以:针对如 772. 基本计算器 III 包含加减乘除小括号的综合应用展示。
由于 772 是会员题,读者可以分别练习 224. 基本计算器 和 227. 基本计算器 II 作为代替。
其中 224 为处理加减小括号,227 为处理加减乘除。

小结

表达式求值是数据结构的学习中非常经典的一个应用。将中缀表达式化为后缀表达式的核心就是两点

  1. 后缀表达式的单次计算方式;
  2. 后缀表达式的生成方式。

在考研中一般要求学生能够写出单次计算和后缀表达式生成的全过程。而求职中则需要能够 ac 掉笔试的代码题。因此每位读者都应该熟练掌握应对知识点和方法。

最后基于双栈的方法除了处理本文中提到的常见四则运算外,还可以针对四则运算以外的运算符或者自定义的运算符进行处理。对于这点读者可以作为拓展自行尝试。

相关文章:

  • PH热榜 | 2025-05-15
  • 解码生命语言:深度学习模型TranslationAI揭示RNA翻译新规则
  • Quic如何实现udp可靠传输
  • 缓存的相关内容
  • 该如何了解联排半孔的使用规范?
  • FPGA: UltraScale+ bitslip实现(ISERDESE3)
  • 2025年长三角+山东省赛+ 认证杯二阶段资料助攻说明
  • 快速搭建一个electron-vite项目
  • 套路化编程:C# winform ListView 自定义排序
  • 学习笔记:黑马程序员JavaWeb开发教程(2025.4.4)
  • MySQL DBA数据运维管理经验分享:新手入门快速提升效率的新工具与技巧
  • NuGet程序包还原失败
  • 智能包装机控制终端技术方案:基于EFISH-SCB-RK3588/SAIL-RK3588的全场景国产化替代解析
  • Docker 安装 MySQL8
  • 【iOS】源码阅读(四)——isa与类关联的原理
  • Vue 学习随笔系列二十三 -- el-date-picker 组件
  • Inventor 转 STP 全攻略:软件操作与迪威模型在线转换推荐
  • 从零开始创建一个 Next.js 项目并实现一个 TodoList 示例
  • sap migo 保存增强点
  • 专项智能练习(加强题型)
  • 牛市早报|持续推进城市更新行动意见印发,证监会强化上市公司募资监管
  • 韧性十足的中国外贸企业:“不倒翁”被摁下去,还会再弹起来
  • “大型翻车现场”科技满满,黄骅打造现代化港口和沿海新城典范
  • 长三角首次,在铁三赛事中感受竞技与生态的共鸣
  • 陕西一村民被冒名贷款40余万续:名下已无贷款,将继续追责
  • 海运港口股掀涨停潮!回应关税下调利好,有货代称美线舱位爆了