中缀表达式 转 前缀表达式

中缀表达式 转 前缀表达式上一篇文章讲述了中缀表达式转成后缀表达式接着说中缀表达式转前缀表达式原理相同中缀表达式 6 3 7 4 8 21 直接转换法确定表达式的运算方式 加括号 给每一次能运算的都加上 6 3 7 4 8 2 6 3 7 4 8 2 6 3 7 4 8 2 从最里面的一层括号开始运算 转换成后缀表达式的方法为 忽略括号 符号在前 数字在后 7 4 gt 74 3 7 4 gt 3

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

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

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)直至扫描结束,将栈内剩余运算符全部出栈并输出,再逆缀输出字符串。中缀表达式也就转换为前缀表达式了。
    – 如果表达式结束,但栈中还有元素,将所有元素出栈,添加到前缀表达式中

可能?看文字有点晕, 直接上图

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

    1. 首先分配2个栈
      在这里插入图片描述

    1. 取字符
      • 2 运算符 直接入 s2; / 操作符 入 s1;
      • 8运算符 入 s2;
      • ’ -‘操作符 入 s1; 栈顶元素 / 优先级大于 – 所以取出/ 入s2

在这里插入图片描述

 - )操作符 入 s1; - )操作符 入 s1; - 4 运算符 入 s2; - '- 操作符 入 s1; - 7运算符 入 s2; 

在这里插入图片描述

  • (操作符 将- 放入 s2 中, 移除 ( ) 两个;在这里插入图片描述
  • *操作符 入 s1;
  • 3 运算符 入 s2;
  • ‘+ 操作符 , 入s1, 但是 栈顶* 优先级大于 + 所以 * 出栈 入 s2
    在这里插入图片描述

  • 6 运算符 入 s2;
    在这里插入图片描述

  • ( 取出 + 作废 ) ( ;
    在这里插入图片描述

  • 结束 依次取出s1

在这里插入图片描述
逆缀 输出 – + 6 * 3-74/82

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/217344.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午9:47
下一篇 2026年3月18日 上午9:47


相关推荐

  • PHP多种形式发送邮件

    1.使用mail()函数没什么好讲的,就是使用系统自带的smtp系统来发送,一般是使用sendmail来发。这个按照各个系统不同而定。使用参考手册。2.使用管道的形式昨天刚测试成功,使用本地的

    2021年12月21日
    50
  • sql系列(基础)-第二章 限制和排序数据

    sql系列(基础)-第二章 限制和排序数据

    2022年1月2日
    42
  • ddd领域驱动设计三种实现_产品架构

    ddd领域驱动设计三种实现_产品架构文章目录前言一、DDD四层与传统三层区别二、四层架构详解1.分层作用2.领域对象三、编码实践1.代码结构四、常见问题1.领域模型(充血模型)注入问题结尾前言分层架构是运用最为广泛的一种架构模式,几乎每个软件系统都需要通过分层来隔离不同的关注点,以应对不同需求的变化,并且使得这种变化可以独立进行。对于分层架构来说,层次越往上其抽象层次就越面向业务和用户,层次越往下其抽象层次就越面向技术和设备。一、DDD四层与传统三层区别我们常用的三层架构模型划分为表现层,业务逻辑层,数据访问层等,在DDD分层结构

    2025年5月22日
    4
  • nginx url转发的一种方式「建议收藏」

    nginx url转发的一种方式「建议收藏」比如,以前是http://vampire.com/elasticsearch现在要转到http://vampire.com/search配置如下:server{listen81;server_namelocalhost;location/{roothtml;indexindex.htmlinde

    2026年4月13日
    5
  • JDK1.7和JDK1.8中HashMap为什么是线程不安全的?

    JDK1.7和JDK1.8中HashMap为什么是线程不安全的?前言只要是对于集合有一定了解的一定都知道 HashMap 是线程不安全的 我们应该使用 ConcurrentHa 但是为什么 HashMap 是线程不安全的呢 之前面试的时候也遇到到这样的问题 但是当时只停留在 知道是 的层面上 并没有深入理解 为什么是 于是今天重温一个 HashMap 线程不安全的这个问题 首先需要强调一点 HashMap 的线程不安全体现在会造成死循环 数据丢

    2026年3月26日
    2
  • JedisPool踩坑记录

    JedisPool踩坑记录报错信息:Exceptioninthread”main”redis.clients.jedis.exceptions.JedisExhaustedPoolException:Couldnotgetaresourcesincethepoolisexhausted在网上找了很久没有找到,现在看来提示已经讲的很明白了,Jedis池耗尽异常:由于池已耗尽,无法获取资源原因就是最大连接数不够使用,我在类中启动了60个并发线程,然而连接池最大连接数只有50,所以报错。packa

    2025年9月14日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号