后缀表达式
题目,模板出自于落谷: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 ^ +
你学会了吗?
现在我们来做一道题:

答案是选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
【在计算机中,我们通常这样实现: 从左向右遍历,遇到数就入栈,遇到运算符就从栈顶弹出两个元素,将后弹出的与先弹出的进行运算(运算顺序从左到右),再将运算结果入栈,直到栈中只有一个元素(或遍历完整个后缀表达式)】(我们现在不深究)
后记:信息这东西得慢慢来不着急,总有一天能获得成果的