前缀表达式&后缀表达式

前缀表达式&后缀表达式中缀表达式转换成前缀表达式和后缀表达式

  • 前缀表达式(又称波兰式),其特点是运算符在前边,运算数在后边;
  • 后缀表达式(又称逆波兰式),其特点是运算数在前边,运算符在后边;
  • 中缀表达式,一种直观的,便于人看的表达式。

 对于中缀表达式计算时,先算括号里的,然后算乘除,最后算加减。我们先判断其优先级再进行计算,但对于计算机来说,从左至右遍历表达式,处理中缀表达式并不方便。以“X=A+B*(C-D)/E”为例,介绍中缀---->前缀和中缀---->后缀。 

中缀—->前缀

  1. 初始化2个栈s1和s2,s1存放运算数,s2存放运算符;
  2. 从表达式右边开始,遍历表达式;
  3. 遇到运算数放入s1中,遇到运算符放入s2中,具体规则如下:
    3-1 如果s2是空或者“)”,直接放进去;
    3-2 如果s2不是空或者不是“)”,当前运算符和栈顶运算符进行比较:




    • 如果当前运算符优先级大于等于栈顶运算符,直接放进去;
    • 如果当前运算符优先级 小于 栈顶运算符,将栈顶运算符取出来放入s1中,重复3-2;
      3-3 遇到“(”,运算符出s2,入s1,直到遇到“)”,丢弃掉“()”,重复3-2、3-3;

  4. s2依次出栈,放入s1栈;
  5. s1出栈重新组成表达式,即前缀表达式。

前缀

  1. 从右到左遍历表达式,E放入s1,/放入s2,)放入s2,D放入s1,-放入s2,C 放入s1;(放入s2,C放入s1,- 放入s2,D放入s1
  2. 遇到 (,将 – 放入s1,丢掉();
  3. “ * ”的优先级等于/,将*放入s2,B放入s1;
  4. +的优先级低于* 和 /,将* / 放入s1,+放入s2;
  5. A放入s1,=的优先级低于+,将+放入s1,再将=放入s2,X放入s1;
  6. s2入s1,s1出栈重新组成表达式,即前缀表达式,=X+A/*B-CDE。

中缀—->后缀

  1. 初始化2个栈s1和s2,s1存放运算数,s2存放运算符;
  2. 从表达式左边开始,遍历表达式;
  3. 遇到运算数放入s1中,遇到运算符放入s2中,具体规则如下:
    3-1 如果s2是空或者“()”,直接放进去;
    3-2 如果s2不是空或者不是“)”,当前运算符和栈顶运算符进行比较:
    • 如果当前运算符优先级 大于 栈顶运算符,直接放进去;
    • 如果当前运算符优先级小于等于栈顶运算符,将栈顶运算符取出来放入s1中;
      3-3 遇到“)”运算符出s2,入s1,直到遇到“(”,丢弃掉“()”,重复3-2、3-3;






  4. s1依次出栈,放入s2栈;
  5. s2出栈重新组成表达式,即后缀表达式。

图2

  1. 从左到右遍历表达式,X放入s1,=放入s2,A放入s1,+放入s2,B放入s1,* 放入s2,(放入s2,C放入s1,- 放入s2,D放入s1;
  2. 遇到 ) ,将 – 放入s1,丢掉();
  3. / 的优先级等于,将放入s1,再将 / 放入s2;
  4. E放入s2;
  5. s1入s2,s2出栈重新组成表达式,即后缀表达式,XABCD-*E/+=。

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

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

(0)
上一篇 2026年3月20日 上午9:01
下一篇 2026年3月20日 上午9:01


相关推荐

  • android activity的跳转动画,实现activity跳转动画的若干种方式

    android activity的跳转动画,实现activity跳转动画的若干种方式第一种:(使用overridePendingTransition方法实现Activity跳转动画)在Activity中代码如下/***点击按钮实现跳转逻辑*/button1.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){/***在调用了startActivity方法之后…

    2022年5月21日
    36
  • 部署Vista – 第7部分:创建一个最小化的应答文件

    部署Vista – 第7部分:创建一个最小化的应答文件

    2021年8月2日
    52
  • 物理讨论题复习

    物理讨论题复习请简要回答避雷针的工作原理?避雷针由于曲率半径小,电荷面密度大,从而产生尖端放电现象,导致自身与带电云层形成回路。导致自身电荷放出从而不会被雷击中,当带电云层密度过大,避雷针通过接地把电引下大地“分子电流假说“是谁提出的?请解释“分子电流”。安培。在原子、分子等物质微粒内部,存在着一种环形电流—-分子电流。分子电流使每个物质都成为微小的磁体,他的两侧相当于两个磁极请解释”磁偶极子“。磁偶极子是类比电偶极子而建立的物理模型。具有等值异号的两个点磁荷构成的系统称为磁偶极子。磁偶极子的物理

    2025年6月29日
    5
  • QQ第三方登录报错error=-1

    QQ第三方登录报错error=-1

    2021年10月25日
    55
  • OMNeT学习之TicToc2-7详解

    OMNeT学习之TicToc2-7详解OMNeTtictoc2 initxc2 cctxc2 nedtxc3 cctxc3 nedtxc4 cctxc4 nedtxc5 cctxc5 nedtxc6 cctxc6 nedtxc7 cctxc7 nedscheduleA

    2026年3月20日
    2
  • 报java.lang.AssertionError错误:

    报java.lang.AssertionError错误:1 在使用 Assert assertEquals 时报一个错误 2 首先 我们的明白 Assert 的用法 assert boolean 表达式 如果 boolean 表达式 为 true 则程序继续执行 如果为 false 则程序抛出 AssertionErr 并终止执行 assert boolean 表达式 错误信息表达式 如果 boolean 表达式 为 true 则程序继续执行 如果为 f boolean 表达式 错误信息表达式 boolean 表达式 boolean 表达式 boolean 表达式

    2026年3月26日
    2

发表回复

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

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