前缀表达式与后缀表达式(前缀表达式后缀表达式中缀表达式计算)
myzbx 2025-06-18 23:02 21 浏览
昨天晚上和儿子一起学习了前缀表达式和后缀表达式。
这应该是字符串算式如何被计算机识别并计算的2种方法。
本来是想先给他讲一个逆波兰式(后缀表达式),以后再讲前缀表达式。没想到他还挺聪明,很快就把2个都掌握了!
今天上学的路上,我又在他耳边重复了一下这两种表达式的转换思路。
小结:
- 现在互联网的信息污染确实有点重,这种学术性的东西,我在查资料过程中发现,竟然存在大量的错误文章,而且占比超过50%,真是可怕。
- 小孩的脑袋真是灵光,学东西真的很快。(应该抓紧利用)我现在感觉就是学的慢,忘的快!
- 15岁前的小孩教育,不要寄希望于他能主动学习或复习,有时候就是需要不功利的重复而不求结果(5~9岁过程中学习计算机,尤其需要这种操作);功夫到了,结果自来。
附:
后缀表达式
后缀表达式,又叫做 逆波兰表达式。是波兰逻辑学家J卢卡西维兹(J Lukasiewicz)于1929年首先提出的一种表达式的表示方法 。后来人们就把用这种表示法写出的表达式称作“逆波兰表达式”。逆波兰表达式把运算量写在前面,把算符写在后面。
后缀表达式的转换方法
首先需要分配2个栈,一个作为临时存储运算符的栈S1,一个作为输入逆波兰式的栈S2,从中缀式的左端开始取字符,逐序进行如下步骤:
- 若取出的字符是操作数,则该操作数直接送入S2栈
- 高优先级进栈:若取出的字符是运算符,则将该运算符与S1栈栈顶元素比较,如果该运算符优先级(不包括括号运算符)大于S1栈栈顶运算符优先级,则将该运算符进S1栈,否则,将S1栈的栈顶运算符弹出,送入S2栈中,直至S1栈栈顶运算符低于(不包括等于)该运算符优先级,最后将该运算符送入S1栈。
- 若取出的字符是“(”,则直接送入S1栈顶。
- 若取出的字符是“)”,则将距离S1栈栈顶最近的“(”之间的运算符,逐个出栈,依次送入S2栈,此时抛弃“(”和“)”。
- 重复上面的1~4步,直至处理完所有的输入字符。
- 逐个弹出操作符栈里的剩余操作符,放入S2栈。
完成以上步骤,S2栈便为逆波兰式输出结果。
总结:
高进栈,低输出,字符直接走,括号配对消。
Example 1: 1 + 2*3 -》 1 2 3*+
Example: 9+(3-1)x3+10÷2 -》 9 3 1 - 3 x + 10 2 ÷ +
- 9入输出,+(依次进栈)
- 3入输出;- 号优先级不与(比优先级,直接压栈进入S1;
- 1输出后遇到),从S1弹出操作符进入输出,直到(;x高优先级,压入S1;
- 3直接输出后是+,小于S1中的x,x进入输出;此时+等于S1中的+,S1中的+弹出,进入输出栈,栈空,当前+压入S1;
- 10直接输出S2;÷优先级高,压入S1;2直接输出;等式遍历结束,S1栈逐个弹出,放入输出栈。
结果就是: 9 3 1 - 3 x + 10 2 ÷ +
逆波兰表达式求值
步骤: 判断扫描到的字符串:1.数字直接入栈;2.若是运算符,出栈两个数字并计算,计算结果放回栈中。
Example (3+4)×5-6 对应的后缀表达式就是 3 4 + 5 × 6 - ,则步骤如下:
1.从左至右扫描,将 3 和 4 压入堆栈;
2.遇到+运算符,因此弹出 4 和 3(4 为栈顶元素,3 为次顶元素),计算出 3+4 的值,得 7,再将 7 入栈;
3.将 5 入栈;
4.接下来是×运算符,因此弹出 5 和 7,计算出 7×5=35,将 35 入栈;
5.将 6 入栈; 6.最后是-运算符,计算出 35-6 的值,即 29,由此得出最终结果。
前缀表达式
中缀表达式转为前缀表达式
转换步骤如下:
(1)初始化两个栈:运算符栈 s1,储存中间结果的栈 s2
(2)从右至左扫描中缀表达式
(3)遇到操作数时,将其压入 s2
(4)遇到运算符时,比较其与 s1 栈顶运算符的优先级
a:如果 s1 为空,或栈顶运算符为右括号 “ ) ”,则直接将此运算符入栈
b:否则,若优先级比栈顶运算符的较高或相等(此处不同于后缀逻辑),也将运算符压入 s1
c:否则,将 s1 栈顶的运算符弹出并压入到 s2 中,再次转到 ( 4 - 1 ) 与 s1 中新的栈顶运算符相比
(5)遇到括号时
a:如果是右括号“)”,则直接压入 s1
b:如果是左括号“(”,则依次弹出 s1 栈顶的运算符,并压入 s2 ,直到遇到右括号为止,此时将这一对括号丢弃
(6)重复步骤(2)至(5),直到表达式的最左边
(7)将 s1 中剩余的运算符依次弹出并压入 s2
(8)依次弹出 s2 中的元素并输出,结果即为中缀表达式对应的前缀表达式。
例如:中缀表达式 1 + (( 2 + 3 ) × 4) - 5 转为前缀表达式具体过程,
输出栈信息为: 5 4 3 2 + x 1 + - , 出栈后的前缀表达式为: - + 1 x + 2 3 4 5
前缀表达式运算
对前缀表达式进行从右至左依次扫描(后缀表达式从左向右,其他逻辑相同):
当遇到数字时,将数字压入堆栈遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素 op 次顶元素),并将结果入栈 重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果。
例如前缀表达式 : - × + 2 3 4 5
从右至左扫描,将5、4、3、2压入堆栈遇到 + 运算符,因此弹出 2 和 3( 2 为栈顶元素,3 为次顶元素,注意与后缀表达式做比较),计算出 2 + 3 的值,得 5,再将 5 入栈;接下来是 × 运算符,因此弹出 5 和 4 ,计算出 5 × 4 = 20,将 20 入栈最后是 - 运算符,计算出 20 - 5 的值,即 15,由此得出最终计算结果
下个课题是:最小生成树
相关推荐
- IT之家学院:如何修改Win10 Edge浏览器下载路径?
-
IT之家讯目前Win10Edge浏览器的默认下载路径不可修改,只能是系统“下载”文件夹,虽然用户可以通过移动该文件夹位置来间接达到修改目的,但Edge浏览器本身却无法修改。不过我们可以通过修改注册表...
- Win 10自带Edge浏览器史上最强,好内核配了滥界面
-
微软在Win10上为我们带来了全新的Edge浏览器,而跌落神坛的IE正式被微软抛弃!随着Win10周年版更新的到来,Edge浏览器也带来了很多全新的特性,功能也更加完善!这让微软信心大增,微软甚...
- Win10全新浏览器Microsoft Edge图标:致敬IE
-
IT之家讯今天早些时候,微软宣布了斯巴达(Spartan)浏览器项目的官方命名,微软在Windows10上集成的新浏览器的内核名为Edge,所以大家一定猜到了,它被命名为MicrosoftEdge...
- Edge 84稳定版发布:优化集锦 默认禁用TLS 1.0/1.1
-
时隔6周时间,Edge浏览器的最新稳定版v84.0.522.40正式发布。新版本为IE模式改善了站点列表下载时间,在“以管理员身份运行”运行时允许用户登录浏览器等等。下载地址:https...
- 真相:Win10微软Edge和IE11浏览器图标相似的原因
-
IT之家讯5月7日消息,微软在Build2015大会上公布了Win10斯巴达浏览器的正式名称“MicrosoftEdge”以及正式图标,蓝色的“e”。这款新浏览器的图标让各位Windows老用户...
- 微软 Win11,20 多年来首个没有 IE 浏览器的 Windows 版本
-
IT之家6月26日消息在Windows10的生命周期中,你可能已经安装了IE浏览器、微软Edge的经典版本,以及新的Chromium驱动的Edge浏览器。这三个浏览器完...
- 微软宣布2022年6月15日停止支持IE浏览器:已推出25年
-
5月20日消息,在推出25年之后,微软最终决定于明年停止对IE浏览器的支持。多年来,这款网络浏览器基本上没有太多消费者使用,为此微软定于2022年6月15日完全停止对其支持,转...
- 我采访了一位 Pornhub 工程师,聊了这些纯纯的话题
-
成人网站在推动Web发展方面所起到的作用无可辩驳。从突破浏览器的视频能力限制,到利用WebSocket推送广告(防止被广告拦截器拦截),你必须不断想出各种聪明的办法,让自己处在Web技术创...
- 如何在 Microsoft Edge 中使用IE浏览器
-
随着微软Windows10,Windows11的推出,IE浏览器逐渐被抛弃,可是国内一些银行和政府网站还必须使用IE才能访问,下面我来解决这个问题。首先在MicrosoftEdge中启用IE模式...
- IE浏览器无法加载网站时将自动跳转到Edge中打开
-
来源:cnBeta.COM目前微软已经将开发重心放在基于Chromium的新版Edge浏览器上,而传统的InternetExplorer则逐渐被淘汰。也就是说,如果你当前使用的是IE...
- 告诉你手机信号栏中E、H、T都是什么意思!
-
手机信号经常会出现E啊,H啊,T啊……之类的字母,每次出现的时候小编都会自动关机,觉得手机坏掉了……ORZ……那么这些字母具体表示些什么意思呢?如果是G,那么代表的是GPRS,指2.5G网络,此时网速...
- 比Chrome更适合国人用 Chromium版Edge横空出世
-
编辑微软终于正式发布Chromium内核的Edge浏览器了。这意味着微软放弃了自研浏览器内核,Windows自带浏览器也成为了Chrome的马甲。关于微软为什么要这么做,笔者曾经撰文分析,大家可以点...
- Microsoft 新浏览器 Edge 将不再支持 ActiveX、VBScript 技术
-
Microsoft继宣布将推出将取代IE的全新浏览器Edge后,日前又再宣布Edge不会支持沿用以久的ActiveX、VBScript与BrowerHelperObjects(...
- 隐藏功能超炫酷 新版Edge浏览器还能这么玩
-
基于Chromium的新版Edge浏览器已经开放测试,但由于是测试期,可供用户选择的功能还比较少。不过有一部分功能已经内置到浏览器中,只是尚未开放而已。这就像汽车里的刷EPU一样,没事自己玩一玩,也是...
- 微软推出的新版Edge浏览器,让我抛弃用了5年的谷歌
-
随着新版Edge浏览器的发布,这个微软的亲儿子以崭新的面貌和大家见面啦。这次更新可谓是好评如潮,相比浏览器届的老大哥——谷歌浏览器,它少了些臃肿,但又多了一些独特的功能。今天,我就为大家介绍8...
- 一周热门
- 最近发表
-
- IT之家学院:如何修改Win10 Edge浏览器下载路径?
- Win 10自带Edge浏览器史上最强,好内核配了滥界面
- Win10全新浏览器Microsoft Edge图标:致敬IE
- Edge 84稳定版发布:优化集锦 默认禁用TLS 1.0/1.1
- 真相:Win10微软Edge和IE11浏览器图标相似的原因
- 微软 Win11,20 多年来首个没有 IE 浏览器的 Windows 版本
- 微软宣布2022年6月15日停止支持IE浏览器:已推出25年
- 我采访了一位 Pornhub 工程师,聊了这些纯纯的话题
- 如何在 Microsoft Edge 中使用IE浏览器
- IE浏览器无法加载网站时将自动跳转到Edge中打开
- 标签列表
-
- HTML 简介 (30)
- HTML 响应式设计 (31)
- HTML URL 编码 (32)
- HTML Web 服务器 (31)
- HTML 表单属性 (32)
- HTML 音频 (31)
- HTML5 支持 (33)
- HTML API (36)
- HTML 总结 (32)
- HTML 全局属性 (32)
- HTML 事件 (31)
- HTML 画布 (32)
- HTTP 方法 (30)
- 键盘快捷键 (30)
- CSS 语法 (35)
- CSS 轮廓宽度 (31)
- CSS 谷歌字体 (33)
- CSS 链接 (31)
- CSS 定位 (31)
- CSS 图片库 (32)
- CSS 图像精灵 (31)
- SVG 文本 (32)
- 时钟启动 (33)
- HTML 游戏 (34)
- JS Loop For (32)