前缀表达式与后缀表达式
前缀表达式与后缀表达式都可以由中缀表达式来转换而成,由于在转化的过程中已经考虑了优先级,所以前缀表达式和后缀表达式的求值直接借助栈就可以,不再有优先级的规则。
中缀表达式转换为前缀表达式和后缀表达式都借助栈来完成。
转换时,运算符压栈,数字直接输出。求值时,数字压栈。
原理:
1、中缀形式的四则运算,相同等级的,总是从前往后计算。
2、无论是前缀表达式还是后缀表达式的求值,最先扫描到的运算符肯定是最先求值的。所以,在中缀转换成前缀和后边表达式时,运算符的优先级越高,必须越早从栈中弹出,先弹出的在求值时,必定时先被扫描到的,也就会先计算。
3、一个事实:当前运算符(当前扫描到的运算符)不能直接输出,输出的只能是栈顶的运算符。
操作:
中缀转后缀表达式时和后缀的求值时,都是从前往后扫描,所以转换时,只要栈顶的比当前的运算符优先级高,需要弹出;等于的,由于在当前运算符的左边,左边意味着先计算,也需要弹出。然后,将当前的运算符压栈。最后需要将运算符栈中剩余的全部弹出加入到输出。
中缀转前缀和前缀表达式的求值时,都是从后往前扫描,所以转换时,只有栈顶的比当前的高,才需要弹出;等于的,由于在当前运算符的后边(意味着后计算),所以不能弹出。然后,将当前运算符压栈。最后,将运算符栈中剩余的全部弹出加入到输出中。还需要一步,将输出逆序。
example:
3+4*1-2
即 ((3+(4*1))-2)
后缀 3 4 1 * + 2 -
前缀 - + 3 * 4 1 2
中缀转前缀,逆序之前,得到的表达式为 2 1 4 * 3 + - ,这个表达式,也是前缀表达式求值时,扫描的顺序。由于转换的最后一步的逆序操作,所以求值扫描时,仍然需要从后往前扫描。
中缀转后缀,输出可以直接到队列当中,即是最后的结果。
中缀转前缀,由于最后需要逆序,所以转换过程当中,除了符号栈之外,输出到另一个栈当中,最后从此栈中弹出所有达到逆序的效果。
求值时,前缀表达式扫描到运算符时,从栈中弹出两个操作数,先弹出的操作数放在运算符的左边(先弹出的后压栈,意味着后扫描到,因为是从后往前扫描,也就是在前边)
后缀表达式求值时,扫描到运算符,从栈中弹出两个操作数,后弹出的操作数放在运算符的左边(后弹出的先压栈,意味着先扫描到,因为从前往后扫描,也就在前边)。
前缀表达式与后缀表达式相关推荐
- 前缀、中缀和后缀表达式详解,中缀表达式到后缀表达式的转换规则,以及后缀表达式的计算规则,附计算代码
1. 中缀.前缀和后缀表达式 1.1 中缀表达式 首先,中缀表达式的这个"缀"指运算符在两个操作数的位置.中缀表达式其实就是我们常用的算术表达式,比如 2 + 9 - (32 * ...
- 数据结构 - 栈 (逆波兰计算器)(栈的三种表达式)(前缀、中缀和后缀表达式,后缀也叫逆波兰表达式)(中缀表达式转后缀表达式实现步骤及完整代码)
栈的三种表达式:前缀.中缀和后缀表达式,后缀也叫逆波兰表达式 前缀(波兰表达式) 中缀(对人来讲很好理解,对于计算机来讲就方便了,一般会把中缀表达式转换成后缀表达式) 后缀(逆波兰表达式) 计算过程 ...
- 中缀表达式到前缀表达式和后缀表达式
1.算法思路 转化为后缀:从左到右遍历中缀表达式,遇到操作数,输出,遇到操作符,当前操作符的优先级大于栈顶操作符优先级,进栈,否则,弹出栈顶优先级大于等于当前操作符的操作符,当前操作符进栈. ...
- 中缀表达式转换成前缀表达式和后缀表达式的极其简单方法
35,15,+,80,70,-,*,20,/ //后缀表达方式 (((35+15)*(80-70))/20)=25 //中缀表达方式 /,*,+,35,15,-,80,70, 20 //前缀表达方式 ...
- 前缀表达式、中缀表达式、后缀表达式的区别
一.三者的概念(参考维基百科) 1.1中缀表达式 中缀表达式是符合人类直觉的一种表达方式,其特点是操作符(二元操作符)在中间,操作数在两侧. 例如 3 + 4 , 5 - 6 * 7, ( ...
- 前缀表达式与后缀表达式求法(栈的应用)
1.前缀.中缀.后缀表达式 中缀表达式即为人们熟悉的数学运算式子写法.而前缀.后缀表达式是为了计算机计算方便的写法. 前缀表达式是一种没有括号的算术表达式,与中缀表达式不同的是,其将运算符写在前面,操 ...
- 前缀表达式,中缀表达式和后缀表达式的定义与联系(超详细)
目录 前缀.中缀.后缀表达式 前缀表达式 前缀表达式的计算机求值 中缀表达式 后缀表达式 后缀表达式的计算机求值 中缀表达式转化为前缀和后缀表达式 小结 前缀.中缀.后缀表达式 前缀.中缀.后缀表达式 ...
- 【数据结构与算法】【12】前缀表达式、中缀表达式、后缀表达式
什么是前缀表达式.中缀表达式.后缀表达式 前缀表达式.中缀表达式.后缀表达式,是通过树来存储和计算表达式的三种不同方式 以如下公式为例 (a+(b−c))∗d( a+(b-c) )*d(a+(b−c) ...
- 前缀表达式和后缀表达式 - C++代码
目录 速览 前缀表达式 前缀表达式的运算规则 中缀表达式转换为前缀表达式 后缀表达式 后缀表达式的运算 中缀表达式转换为后缀表达式 刷题向文章,不介绍原理,只介绍规则 速览 算术表达式分为: 前缀表达 ...
最新文章
- SpringBoot整合MQTT服务器实现消息的发送与订阅(推送消息与接收推送)
- UI5的货币显示格式的逻辑
- P4619 [SDOI2018]旧试题
- Spring Session 2.0.0.M1 发布,分布式解决方案
- python运行方法_对python中执行DOS命令的3种方法总结
- 如何在局域网中对网线全面测试
- python后台架构Django教程——admin管理员站点
- 深度学习网络架构(三):VGG
- c语言对英文字母循环加密,RSA加密算法(C语言实现)
- Excel怎么快速选中相同背景颜色单元格
- ipv6 静态路由配置
- 俺博士三年的一点体会
- 数据是一把双刃剑,IPFS/FIL存储助力发展,合理应用技术中
- OpenCV-PS羽化操作
- 支付宝小程序集成MQTT
- Mac不同应用之间切换使用不同输入法
- LINUX暂停、挂起进程,开启进程
- Java当中的IO流-时间api(下)-上
- Flink内存管理源码解读之基础数据结构
- 【产品笔记】1.什么是精益产品探索
热门文章
- 解决UglifyJs Unexpected token punc «{», expected pun 报错问题
- k8s-------(| 二 |)资源对象Namespace,Service
- java微博开发_利用java语言在eclipse下实现在新浪微博开发平台发微博(转)
- 我服务又双叒叕奔溃了,含泪干货分享
- Codeforces Round #702 (Div. 3) A-G
- Vue——05-02组件的数据、为什么data要使用函数、父组件给子组件传递数据的三种写法、父传子以及传两种以上的值、默认值以及父传子的引用类型
- excel图表技巧:如何在折线图上标注极值
- 读《鬼谷子的局》笔记
- 学生信息结构体数组拷贝和排序(结构体,结构体数组,结构体指针)
- matlab中simulink模块,matlab中simulink模块