首页 > 其他 > 详细

栈之中缀表达式转后缀表达式(逆波兰表达式)思路

时间:2019-11-07 16:05:28      阅读:90      评论:0      收藏:0      [点我收藏+]

一、前言

此篇只着重讲解中缀转后缀的过程,多次查阅他人讲解,都觉得讲解甚是云里雾里,记录思考过程,以便回顾,如有错误,欢迎指出,正确的知识总是在不断的知识碰撞中得出

二、 逻辑图示

技术分享图片

 

 

 

三、 案例图解

1. 技术分享图片

 

根据上图所示

1.1 "9" 为操作数 -> 直接输出

 技术分享图片

 

1.2 "+" 为操作符且不等于"(" || ")"且栈为空 -> 压栈

技术分享图片

 

 1.3 "(" 直接-> 压栈

技术分享图片

 

 1.4 "3" 为操作数 -> 输出

技术分享图片

 

 1.5 "-" 位操作数,由于当前栈顶元素为左括号,不需要比较 -> 压栈

 技术分享图片

 

1.6  “1” -> 输出

技术分享图片

 

 

 

1.7 ")" : 遇到右括号,此时将左括号上的元素依次弹出,并将弹出的元素除了左右括号之外依次输出

技术分享图片

 

 

1.8  “*”: 此时操作符的优先级大于栈顶元素 -> 压栈

技术分享图片

 

 

1.9 “3” -> 输出

技术分享图片

1.10 “+” : 此时改操作符的优先级不大于栈顶,依次将比自己优先级打的操作符出栈,知道找到比自己优先级高的栈顶为止,这里由于 在栈内的元素分别是 “*” 和 “+” ,当前操作符 “+” 都小于这两个操作符,于是这两个操作符都依次出栈并输出,并将当前操作符入栈

技术分享图片

 

 1.11 "10" -> 输出

1.12 “/” 操作符优先级> 栈顶元素(“+”) -> 压栈

技术分享图片

 

 1.13 “2” -> 输出

1.14 当元素都遍历完后,检查栈是否为空,如果非空,依次出栈并输出

技术分享图片

 

 

四、 总结

  如果做到中缀转后缀后,可以往下做后缀的计算,大致思路是,如果是操作数就压栈,如果是操作符就连续出两个栈的数字并计算结果,将结果压栈
 

 

栈之中缀表达式转后缀表达式(逆波兰表达式)思路

原文:https://www.cnblogs.com/timetimetime/p/11811767.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!