上一篇文章讲述了 中缀表达式 转成 后缀表达式

接着说 中缀表达式 转 前缀表达式

原理相同
中缀表达式: (6+3*(7-4))-8/2

1.直接转换法
    1. 确定表达式的运算方式, 加括号, 给每一次能运算的都加上:

      • (6+(3*(7-4)))-8/2
      • (6+(3*(7-4)))-(8/2)
      • ((6+(3*(7-4)))-(8/2))
    1. 从最里面的一层括号开始运算,转换成后缀表达式的方法为:(忽略括号)符号在前,数字在后

      • (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. 中缀表达式到前缀表达式和后缀表达式

    1.算法思路 转化为后缀:从左到右遍历中缀表达式,遇到操作数,输出,遇到操作符,当前操作符的优先级大于栈顶操作符优先级,进栈,否则,弹出栈顶优先级大于等于当前操作符的操作符,当前操作符进栈.     ...

  2. 数据结构 - 拓展突破(C++实现中缀表达式转前缀表达式,中缀表达式转后缀表达式,前缀表达式求值,中缀表达式求值)

    文章目录 1. C++中缀表达式转后缀表达式 2. C++中缀表达式转前缀表达式 3. C++后缀表达式求值 4. C++前缀表达式求值 1. C++中缀表达式转后缀表达式 输入中缀表达式样例: 2+ ...

  3. 中缀表达式转换为前缀表达式(lisp实现)

    使用weight.opcode和infix_to_prefix三个函数实现中缀表达式到前缀表达式的转换. 算符优先级函数weight 首先定义函数weight,它返回一个算术运算符(可简称为算符)的优 ...

  4. 【数据结构】中缀表达式转前缀表达式求值

    中缀表达式转前缀表达式求值 首先将中缀表达式转换成前缀表达式 前缀表达式中,操作符在前 例如:1+2*(5-3)+4 后缀表达式:++1*2-534 一.转换思路 转换思路为将输入的中缀表达式字符串从 ...

  5. 后缀表达式、前缀表达式

    后缀表达式和前缀表达式是什么呢? 前缀表达式:不包括括号的算术表达式,将运算符写在前面,操作数写在后面的表达式.为纪念其发明者波兰数学家Jan Lukasiewcz,也称"波兰式" ...

  6. 使用栈解决的一类经典问题:表达式转换及求值;中缀表达式;前缀表达式,后缀表达式,中缀转前缀;中缀转后缀;后缀表达式求值;波兰式,逆波兰式

    文章目录 背景知识 表达式转换问题(考研经典) 一:手工转换 (1)中缀转前缀和中缀转后缀 (2)前缀转中缀和后缀转中缀 二:用栈实现表达式转换 (1)中缀转后缀 (2)中缀转前缀 表达式计算问题(使 ...

  7. 中缀表达式转为前缀表达式,然后根据前缀表达式计算结果

    相关原理 理论部分请参照上面的博客,写的很清楚. 好的我们来看代码 举个栗子 (9-((1+3)*2))/2 结果是0.5 def infix_to_prefix(expression):assert ...

  8. 中缀表达式To前缀表达式 (python实现)

    1.名词解释 1.1 中缀表达式 普通表达式,即操作符位于操作数的中间.如''2+3*5'',''(2+3)*5''.这种表达式的特点是根据运算符的优先级不同,计算顺序不同.可以通过添加括号来改变计算 ...

  9. C语言中缀表达式转为前缀表达式

    思想: (1) 初始化两个栈:运算符栈S1和储存中间结果的栈S2: (2) 从右至左扫描中缀表达式: (3) 遇到操作数时,将其压入S2: (4) 遇到运算符时,比较其与S1栈顶运算符的优先级: (4 ...

  10. c语言前缀编码,C语言实现中缀表达式转前缀表达式

    1.实现的基本思想 (1) 初始化两个栈:运算符栈S1和储存中间结果的栈S2: (2) 从右至左扫描中缀表达式: (3) 遇到操作数时,将其压入S2: (4) 遇到运算符时,比较其与S1栈顶运算符的优 ...

最新文章

  1. jquery生成二维码
  2. Redis 一个key-value存储系统 简介
  3. SpringBoot 中添加jsp支持遇到的问题
  4. Oracle分区表之创建维护分区表索引的详细步骤
  5. SpringBoot : BeanFactory和FactoryBean的区别
  6. 每天一点正则表达式积累(五)
  7. HTML跳转php没反应的问题解决
  8. 博士毕业论文英文参考文献换行_Endnote教程丨本科研究生毕业论文参考文献格式模板,一键搞定...
  9. Python运维开发(CMDB资产管理系统)——环境部署(下)
  10. 三友硅业的化工厂人员定位系统——新导智能
  11. Cocos2dx 之 cocosbuilder的使用
  12. 【在ubantu20.04上安装google chrome】
  13. 2010年科技领域20大败笔
  14. c++/VS XP系统 无法定位程序输入点WSAPoll于动态链接库ws2_32.dll解决方案
  15. !important和@important
  16. 卡在应用计算机设置密码,sd卡加密软件的选择以及如何给sd卡设置密码、加密?...
  17. 无锡市计算机培训短期速成班,锡山区电脑培训速成班培训快速学习电脑办公制图班...
  18. blink不能发,这里记录下
  19. 红警1游戏开源,代码非常规范。网友:秀色可餐
  20. 史上最强大的华为Mate40系列:全球唯一5nm 5G SoC,顶配超1.8万元!

热门文章

  1. Mono 之 单元测试
  2. linux 安装Java
  3. c语言量程程序,量程自动切换数字电压表c语言原程序
  4. python-opencv Harris 角点检测
  5. ubuntu 添加删除源
  6. GCC Spec Files
  7. JavaWeb(一)
  8. QT递归获取指定目录下的所有文件
  9. C++的对象,变量初始化
  10. 传奇服务器修改变量,课程列表-传奇服务端制作修改教程-4.3变量-学传奇