欢迎光临散文网 会员登陆 & 注册

后缀表达式

2022-08-27 21:47 作者:游侠翻滚  | 我要投稿

题目,模板出自于落谷:https://www.luogu.com.cn/problem/P1175

部分借鉴慕课网:http://www.imooc.com/article/68906/

介绍

数学表达式分为三种:前缀表达式、中缀表达式、后缀表达式。

前缀表达式的运算符在两个运算数字(或表达式)前,中缀表达式的运算符在两个运算数字(或表达式)之间。后缀表达式的运算符在两个运算数字(或表达式)后。

举个栗子:

四则运算: 8 - ( 3 + 2 * 6 ) / 5 + 2 ^ 2             【^的意思是次方】

前缀表达式:+ ^ 2 2 - / 5 + * 6 2 3 8(我们不讲)

后缀表达式:8 3 2 6 * + 5 / - 2 2 ^ +

 四则运算变后缀表达式:

就以上面的四则运算为题目来看一下吧,

   8 - ( 3 + 2 * 6 ) / 5 + 2 ^ 2 

首先我们要知道运算符等级划分,即:(选自于百度文库:https://wenku.baidu.com/view/4d630cfc6c1aff00bed5b9f3f90f76c661374cc9.html)

运算等级

在此从大到小分别是(),^,* 和/,+和-

所以这个算是可以分解为3个大部分8,-(3+2*6)/5和+2^2

而后缀表达式就是吧运算法给拉到后面,顺序就是运算等级划分等级啦。

在这里

8变成8

-(3+2*6)/5变成-(3+26*)/5变成-(326*-)/5变成-(326*-)5/变成(326*-)5/-最后把小括号去掉就成了326*-5/-

+2^2变成+22^最后变成了22^+

我们最后把这3个式子合起来就成了8 3 2 6 * + 5 / - 2 2 ^ +

你学会了吗?

现在我们来做一道题:

CSP-2019初赛

答案是选B。

在这里,我们括号里的加号给移到后面就变成了a * ( b c + ) * d ,接着把2个乘号移到各自的后面变成 a ( b c + ) * d * 【在这里括号里的我们把他看成了一个整体】,最后拆掉括号就得到了正确答案:a b c + * d *

后缀表达式的计算方法:

从左向右,每遇到一个运算符,就讲前两个数字进行该运算,再将运算结果放到该位置,重复以上过程即可完成计算。

比如刚才的后缀表达式:8 3 2 6 * + 5 / - 2 2 ^ +

第一步*运算:8 3 12 + 5 / - 2 2 ^ +

第二步+运算:8 15 5 / - 2 2 ^ +

第三步/运算:8 3 - 2 2 ^ +

第四步:5 2 2 ^ +

第五步:5 4 +

第六步:9

【在计算机中,我们通常这样实现: 从左向右遍历,遇到数就入栈,遇到运算符就从栈顶弹出两个元素,将后弹出的与先弹出的进行运算(运算顺序从左到右),再将运算结果入栈,直到栈中只有一个元素(或遍历完整个后缀表达式)】(我们现在不深究)



后记:信息这东西得慢慢来不着急,总有一天能获得成果的

后缀表达式的评论 (共 条)

分享到微博请遵守国家法律