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

中缀表达式转后缀表达式的方法,步骤和原理及后缀表达式运算方式中缀转后缀本文大部分资料参考慕课何钦铭老师的数据结构相关的慕课链接:表达式求值中缀表达式是最常用的算术表达式,运算符在运算数中间,运算需要考虑运算符优先级.后缀表达式是计算机容易运算的表达式,运算符在运算数后面,从左到右进行运算,无需考虑优先级,运算呈线性结构.先举个简单的转换例子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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Android Service 服务(一)—— Service

    Android Service 服务(一)—— Service

    2021年12月14日
    45
  • django常见问题_java map get不存在的key

    django常见问题_java map get不存在的key报错情况Django使用makemigrations做数据迁移的时候报如下错误File"/Users/jkc/.virtualenvs/django_env/lib/python3.7

    2022年7月28日
    22
  • UE4 Actor生命周期 SpawnActor DestroyActor剖析「建议收藏」

    UE4 Actor生命周期 SpawnActor DestroyActor剖析「建议收藏」今天xbox开发机挂掉了。系统坏了,发现一个解决办法。错误代码E200E305分享链接O网页链接O网页链接点击打开链接点击打开链接转载自http://weibo.com/3185590710/profile?rightmod=1&wvr=6&mod=personnumber&is_search=1&key_word=%E5%BC%80%E5%8F%91%E6%9

    2022年10月22日
    1
  • 免费空间(免备案,无广告) 1G免费全能空间

    免费空间(免备案,无广告) 1G免费全能空间云邦互联免费空间(免备案,无广告)【1G免费全能空间,免备案,无广告】 1G全能空间+100M数据库(Mysql5.5/SQLServer2005) 支持的脚本:ASP、PHP(5.2-7.0)、.NET(2.0/4.0) 没有任何限制,详细功能请访问: https://www.yunzz.net/host/free.html(云邦互联) 推广

    2022年6月28日
    42
  • mysql中多表嵌套查询例子_mysql子查询嵌套规则

    mysql中多表嵌套查询例子_mysql子查询嵌套规则本文实例分析了MySQL嵌套查询。分享给大家供大家参考,具体如下:MySQl从4.11版后已经完全支持嵌套查询了,那么下面举些简单的嵌套查询的例子吧(源程序来自MySQLUserManual):1.SELECT语句的子查询语法:代码如下:SELECT…FROM(subquery)ASname…先创建一个表:CREATETABLEt1(s1INT,s2CHAR(…

    2022年10月21日
    1
  • kali中间人攻击—-盗取账号和密码

    kali中间人攻击—-盗取账号和密码声明:本案例仅供个实验使用,并不作任何违法违纪等不正当,请遵守约定。1.原理解析在局域网内通信都是通过交换机及路由器连接外部网络的,对于局域网内大家都使用的一个协议为ARP协议,这个协议很奇特因为它是用来标定局域网内每台主机的MAC地址使用的,还有就是ARP协议也是用来规定网关的。  在我们下面要做的实验的过程中,kali系统会时刻向选定的机器发送“我是网关”,这样堵塞了真…

    2022年7月20日
    45

发表回复

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

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