后綴表達式
題目,模板出自于落谷: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
【在計算機中,我們通常這樣實現: 從左向右遍歷,遇到數就入棧,遇到運算符就從棧頂彈出兩個元素,將后彈出的與先彈出的進行運算(運算順序從左到右),再將運算結果入棧,直到棧中只有一個元素(或遍歷完整個后綴表達式)】(我們現在不深究)
后記:信息這東西得慢慢來不著急,總有一天能獲得成果的