中缀表达式转后缀表达式的方法,步骤和原理及后缀表达式运算方式

中缀表达式转后缀表达式的方法,步骤和原理及后缀表达式运算方式中缀转后缀本文大部分资料参考慕课何钦铭老师的数据结构相关的慕课链接:表达式求值中缀表达式是最常用的算术表达式,运算符在运算数中间,运算需要考虑运算符优先级.后缀表达式是计算机容易运算的表达式,运算符在运算数后面,从左到右进行运算,无需考虑优先级,运算呈线性结构.先举个简单的转换例子2+9/3-5(前缀)->293/+5-(后缀)先进行乘除再进行加减运算规律,…

大家好,又见面了,我是你们的朋友全栈君。

中缀转后缀
本文大部分资料参考慕课何钦铭老师的数据结构
相关的慕课链接:表达式求值
中缀表达式是最常用的算术表达式,运算符在运算数中间,运算需要考虑运算符优先级.
后缀表达式是计算机容易运算的表达式,运算符在运算数后面,从左到右进行运算,无需考虑优先级,运算呈线性结构.
先举个简单的转换例子
2+9/3-5 (前缀)-> 2 9 3 / + 5 – (后缀)
先进行乘除再进行加减
运算规律,运算数位置不变,改变的是运算符位置
可以推栈实现,用堆栈储存等待中的运算符.
将当前运算符与最后一个等待的运算符比较.

具体转换方式:
1.从左到右进行遍历
2.运算数,直接输出.
3.左括号,直接压入堆栈,(括号是最高优先级,无需比较)(入栈后优先级降到最低,确保其他符号正常入栈)
4.右括号,(意味着括号已结束)不断弹出栈顶运算符并输出直到遇到左括号(弹出但不输出)
5.运算符,将该运算符与栈顶运算符进行比较,
如果优先级高于栈顶运算符则压入堆栈(该部分运算还不能进行),
如果优先级低于等于栈顶运算符则将栈顶运算符弹出并输出,然后比较新的栈顶运算符.
(低于弹出意味着前面部分可以运算,先输出的一定是高优先级运算符,等于弹出是因为同等优先级,从左到右运算)
直到优先级大于栈顶运算符或者栈空,再将该运算符入栈.
6.如果对象处理完毕,则按顺序弹出并输出栈中所有运算符.

再来解释一下开始的简单例子
在这里插入图片描述
括号的运算
在这里插入图片描述
选取慕课里何钦铭老师的案例
在这里插入图片描述
后缀表达式运算步骤:
(以堆栈储存)
从左到右,遇到运算符就弹出相应的运算数,运算后再把结果入栈.最终结果就是栈顶数的值.
(由于该运算为线性结构,具体运算时是不需要储存输出后的运算符,一般是输出一个运算符就进行一次运算,不像图中要储存输出状态.)
注意点:
有时候’-’(负号)是单目运算符,则要修改运算数.
遇到其他运算符(如幂运算)也类似.

这篇文章只是整理中缀表达式转后缀表达式的方法和理论,目的是为了理解.
具体代码实现看我的另一篇文章(模拟表达式运算).
这部分转换对于初学者来说可能很模糊,建议去看开头链接的那个视频.
如果有什么错误或不足欢迎评论指出.

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mybatis 缓存的使用, 看这篇就够了「建议收藏」

    mybatis 缓存的使用, 看这篇就够了「建议收藏」缓存的重要性是不言而喻的。使用缓存,我们可以避免频繁的与数据库进行交互,尤其是在查询越多、缓存命中率越高的情况下,使用缓存对性能的提高更明显。mybatis也提供了对缓存的支持,分为一级缓存和二级缓存。但是在默认的情况下,只开启一级缓存(一级缓存是对同一个SqlSession而言的)。以下的项目是在mybatis初步使用(IDEA的Maven项目,超详细)的基础上进行。…

    2022年5月22日
    32
  • setLayout()和GridData的设置[通俗易懂]

    setLayout()和GridData的设置[通俗易懂]总结:(1)setLayout()是设置界面布局,如界面有几行几列如jf.setLayout(newGridLayout(2,1));//容器共有2行1列。GridLayoutlayout=newGridLayout();layout.numColumns=4;//设置容器的列数layout.makeColumnsEqualWidth=false;//设…

    2022年5月10日
    37
  • spark shuffle参数调优

    spark shuffle参数调优

    2021年11月27日
    47
  • 真正解决问题:maven eclipse tomcat java.lang.ClassNotFoundException: org.springframework.web.context.Cont…

    真正解决问题:maven eclipse tomcat java.lang.ClassNotFoundException: org.springframework.web.context.Cont…

    2021年9月1日
    55
  • 扫清盲点,如何正确的从HttpClient 3.x系统升级到HttpClient 4.x

    扫清盲点,如何正确的从HttpClient 3.x系统升级到HttpClient 4.x如果周期比较长的项目,或者这个项目开发人员换过了好几拨人,很有可能出现一些奇怪的问题,比如一个项目中出现了多种Spring注入bean的方式,不同版本的jar冲突等等爬虫项目有的时候更是过犹不及,拿模拟登陆来说,开发人员的迭代,每个人的风格和技术各不相同,模拟登陆的方式也是五花八门,早在之前看到过一个项目的源码,其中使用HttpClient也是各种风格,虽然官方已经强烈建议使用HttpClie…

    2022年7月22日
    12
  • Android名词解释_古代汉语名词解释汇总

    Android名词解释_古代汉语名词解释汇总什么叫刷机刷机,是手机方面的专业术语,是指通过一定的方法更改或替换了手机原版系统中固有的一些语言、图片、铃声和软件版本或者操作系统,可以使手机功能更加完善。刷机可以是官方的,也可以是非官方的。再简单点说,刷机就是一种改变你手机操作系统的一种行为,就相当于给电脑装上不同版本的windows或则电脑重装系统,也就是刷手机的操作系统吧。目前常说的刷机就是用“更改替换了一些图片、铃声或菜单后的软件

    2022年10月10日
    8

发表回复

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

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