数据结构考点之后缀表达式处理方法

本文详细介绍了中缀表达式转化为后缀表达式的过程和思想,包括中缀表达式的含义、转化算法以及计算机处理后缀表达式的方法。通过举例说明,阐述了如何利用栈和队列实现转化,并解释了后缀表达式的操作顺序与中缀表达式的一致性。此外,还讨论了计算机处理后缀表达式的简单性和效率。
摘要由CSDN通过智能技术生成


这里主要了解下,计算机处理运算符号的思想。

如题 2020年10月

在这里插入图片描述

分析

咋一看,还是挺生的,脑子里有些印象吧,但还是没分清,中缀表达式转成后缀表达式与后后缀表达式在计算机处理的过程,还得继续深入了解下思想。
其实,这里就是讲义的内容:数据结构复习之队列,后缀表达式处理,已经很清楚了,这里主要是结合本题,再做一下总结。

解决

关于中缀表达式

中缀表达式:a*(b+c);
先要明白中缀到底是一个什么样的操作?中缀和中根是一个意思,先遍历左孩子,再根,再遍历右孩子。中缀特指操作符以中缀形式,处于两个操作数的中间。中缀表达式的括号是必须的。

中缀表达式意义

若要用C写个这样的表达式,不难,并且c语言支持这样的写法!但对于计算机而言,中间经历了很多的步骤才实现。可以说,计算机通过中级c语言或高级语言处理这种逻辑是非常不划算的。计算机如何处理表达式呢?那就得是后缀表达式了。

中缀如何转成后缀表达式呢??

后缀,就是将运算符放到操作数的最后。

中缀转后缀处理思想

逻辑很重要,先不要管实际的算法。a*(b+c);//对于这个表达式而言
先要算,b+c;–> 采用后缀的话,就是bc+;得到一个结果,相当于是一个数,要脑补出来。
然后是a* --> 采用后缀的话 ,一样是a*不变。
合起来中缀转成后缀就是 abc+*;//这是第二问的答案

特点

后缀操作数的顺序与中缀是完全一样的。
运算符的顺序与中缀运算符的逻辑顺序完全一样。

例子

2*(3+5)+7/1-4用后缀表达式表示为:
235+*71/+4-;//脑补出中间数,才有利于写出正确的表达式。

中缀转后缀处理算法

数据结构复习之队列,后缀表达式处理;已经很清楚了;总结下过程就可以了。
算法依靠一个队列和一个栈实现。
队列的作用就是输出后缀表达式,栈用来处理中缀表达式中符号优先级。这其实也符合后缀的定义,就是将运算符号放到操作数的最后。也是这个特点决定的。
数肯定是直接进队列就可以。
运算符号,入栈前,先比较栈里是否存在优先级高的或优先级相等的运算符,存在的话,就先把它们出栈;出栈后直接进入队列就可以。遇到左括号时,运算符先入栈,当然入栈时,还是比较之前存在的运算符优先级,存在优先级高的,那就将优先级高的先出栈,再入栈,然后再移出的优先级高的再入栈,这样调整,直到碰到右括号,依次弹出运算符。
这样操作后,便将中缀转换成了后缀表达式。

所以,第一问的答案就是,*先入栈,遇到左括号,+入栈;遇到右括号时,+出栈,然后*再出栈。

计算机处理后缀表达式的过程

课件是没有总结的,只给出了过程。

计算机处理后缀表达式的思想

利用一个栈来实现,存储运算符及中间计算结果==(考点)==。

过程算法

从左到右遍历表达式的每个数字和符号,遇到是数字就进栈,遇到是符号,就将处于栈顶两个数字出栈,进行运算,运算结果进栈,一直到最终获得结果。

操作实例

abc+*,这个后缀表达式处理过程为:
a,b,c入栈,遇到+,将c,b出栈,注意:这里其实是有顺序的,尤其是对于-号等的情形,先出栈的要放到运算符号的右面,这样才符合左根右的后根遍历的规则。
得到运算结果后,再将运算结果入栈。
遇到*,将上一步的运算结果和a出栈。

总结

重点是将逻辑上的中缀转化成后缀,至于计算机处理后缀的过程,那真是非常的简单。就是出栈、入栈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

guangod

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值