中缀表达式 转 前缀表达式
上一篇文章讲述了 中缀表达式 转成 后缀表达式
接着说 中缀表达式 转 前缀表达式
原理相同
中缀表达式: (6+3*(7-4))-8/2
1.直接转换法
- 确定表达式的运算方式, 加括号, 给每一次能运算的都加上:
- (6+(3*(7-4)))-8/2
- (6+(3*(7-4)))-(8/2)
- ((6+(3*(7-4)))-(8/2))
- 确定表达式的运算方式, 加括号, 给每一次能运算的都加上:
- 从最里面的一层括号开始运算,转换成后缀表达式的方法为:(忽略括号)符号在前,数字在后
- (7-4) => -74
- (3*(7-4)) => (3*(-74)) => *3-74 (把-74看成一个整体)
- (6+(3*(7-4))) => (6+ (*3-74 )) => +6 3-74 (把3-74看成一个整体)
- (8/2) => /82
- ((6+(3*(7-4)))-(8/2)) => (+6 *3-74 ) - ( /82 ) => - +6 *3-74 /82 (把(+6 *3-74 ) 和 ( /82)) 看成一个整体
前缀表达式: - +6 *3-74 /82
- 从最里面的一层括号开始运算,转换成后缀表达式的方法为:(忽略括号)符号在前,数字在后
2.利用栈
以下来自百度百科:
- (1) 首先构造一个
运算符
栈(也可放置括号),运算符(以括号为分界点)在栈内遵循越往栈顶优先级不降低的原则进行排列。 - (2)从
右至左
扫描中缀表达式,从右边第一个字符开始判断:
如果当前字符是数字,则分析到数字串的结尾并将数字串直接输出。
如果是运算符
,则比较优先级。如果当前运算符的优先级大于等于栈顶运算符的优先级(当栈顶是括号时,直接入栈),则将运算符直接入栈;否则将栈顶运算符出栈并输出,直到当前运算符的优先级大于等于栈顶运算符的优先级(当栈顶是括号时,直接入栈),再将当前运算符入栈。
如果是括号,则根据括号的方向进行处理。如果是向右的括号,则直接入栈;否则,遇向左的括号前将所有的运算符全部出栈并输出,遇右括号后将向左、向右的两括号一起出栈(并不输出)。 - (3) 重复上述操作(2)直至扫描结束,将栈内剩余运算符全部出栈并输出,再
逆缀
输出字符串。中缀表达式也就转换为前缀表达式了。
– 如果表达式结束,但栈中还有元素,将所有元素出栈
,添加到前缀表达式中
可能
中缀表达式 转 前缀表达式相关推荐
- 中缀表达式到前缀表达式和后缀表达式
1.算法思路 转化为后缀:从左到右遍历中缀表达式,遇到操作数,输出,遇到操作符,当前操作符的优先级大于栈顶操作符优先级,进栈,否则,弹出栈顶优先级大于等于当前操作符的操作符,当前操作符进栈. ...
- 数据结构 - 拓展突破(C++实现中缀表达式转前缀表达式,中缀表达式转后缀表达式,前缀表达式求值,中缀表达式求值)
文章目录 1. C++中缀表达式转后缀表达式 2. C++中缀表达式转前缀表达式 3. C++后缀表达式求值 4. C++前缀表达式求值 1. C++中缀表达式转后缀表达式 输入中缀表达式样例: 2+ ...
- 中缀表达式转换为前缀表达式(lisp实现)
使用weight.opcode和infix_to_prefix三个函数实现中缀表达式到前缀表达式的转换. 算符优先级函数weight 首先定义函数weight,它返回一个算术运算符(可简称为算符)的优 ...
- 【数据结构】中缀表达式转前缀表达式求值
中缀表达式转前缀表达式求值 首先将中缀表达式转换成前缀表达式 前缀表达式中,操作符在前 例如:1+2*(5-3)+4 后缀表达式:++1*2-534 一.转换思路 转换思路为将输入的中缀表达式字符串从 ...
- 后缀表达式、前缀表达式
后缀表达式和前缀表达式是什么呢? 前缀表达式:不包括括号的算术表达式,将运算符写在前面,操作数写在后面的表达式.为纪念其发明者波兰数学家Jan Lukasiewcz,也称"波兰式" ...
- 使用栈解决的一类经典问题:表达式转换及求值;中缀表达式;前缀表达式,后缀表达式,中缀转前缀;中缀转后缀;后缀表达式求值;波兰式,逆波兰式
文章目录 背景知识 表达式转换问题(考研经典) 一:手工转换 (1)中缀转前缀和中缀转后缀 (2)前缀转中缀和后缀转中缀 二:用栈实现表达式转换 (1)中缀转后缀 (2)中缀转前缀 表达式计算问题(使 ...
- 中缀表达式转为前缀表达式,然后根据前缀表达式计算结果
相关原理 理论部分请参照上面的博客,写的很清楚. 好的我们来看代码 举个栗子 (9-((1+3)*2))/2 结果是0.5 def infix_to_prefix(expression):assert ...
- 中缀表达式To前缀表达式 (python实现)
1.名词解释 1.1 中缀表达式 普通表达式,即操作符位于操作数的中间.如''2+3*5'',''(2+3)*5''.这种表达式的特点是根据运算符的优先级不同,计算顺序不同.可以通过添加括号来改变计算 ...
- C语言中缀表达式转为前缀表达式
思想: (1) 初始化两个栈:运算符栈S1和储存中间结果的栈S2: (2) 从右至左扫描中缀表达式: (3) 遇到操作数时,将其压入S2: (4) 遇到运算符时,比较其与S1栈顶运算符的优先级: (4 ...
- c语言前缀编码,C语言实现中缀表达式转前缀表达式
1.实现的基本思想 (1) 初始化两个栈:运算符栈S1和储存中间结果的栈S2: (2) 从右至左扫描中缀表达式: (3) 遇到操作数时,将其压入S2: (4) 遇到运算符时,比较其与S1栈顶运算符的优 ...
最新文章
- jquery生成二维码
- Redis 一个key-value存储系统 简介
- SpringBoot 中添加jsp支持遇到的问题
- Oracle分区表之创建维护分区表索引的详细步骤
- SpringBoot : BeanFactory和FactoryBean的区别
- 每天一点正则表达式积累(五)
- HTML跳转php没反应的问题解决
- 博士毕业论文英文参考文献换行_Endnote教程丨本科研究生毕业论文参考文献格式模板,一键搞定...
- Python运维开发(CMDB资产管理系统)——环境部署(下)
- 三友硅业的化工厂人员定位系统——新导智能
- Cocos2dx 之 cocosbuilder的使用
- 【在ubantu20.04上安装google chrome】
- 2010年科技领域20大败笔
- c++/VS XP系统 无法定位程序输入点WSAPoll于动态链接库ws2_32.dll解决方案
- !important和@important
- 卡在应用计算机设置密码,sd卡加密软件的选择以及如何给sd卡设置密码、加密?...
- 无锡市计算机培训短期速成班,锡山区电脑培训速成班培训快速学习电脑办公制图班...
- blink不能发,这里记录下
- 红警1游戏开源,代码非常规范。网友:秀色可餐
- 史上最强大的华为Mate40系列:全球唯一5nm 5G SoC,顶配超1.8万元!