首先是將中綴表示式 轉換為字尾表示式
中綴轉字尾是為了便於堆疊運算,此外中綴轉成字尾表示式之後不帶括號。
例如,表示式a+b*c+(d*e+f)*g
,
中綴轉字尾的基本方法:
從左向右掃瞄該表示式,
碰到數字,就直接列印,
碰到運算子,分三種情況:核心原則,棧頂非空時一定是最高優先順序的運算子。
1.如果堆疊是空的,就將操作符push至符號棧中
2.如果堆疊非空,且運算子優先順序大於棧頂運算子,就push運算子
3.如果運算子優先順序小於棧頂運算子,就彈出棧頂元素,直到符合條件2,且彈出的運算子要列印出來
4.左括號運算子push進堆疊,直到碰到右括號,將一直彈棧直到把左括號彈出。括號不會列印在字尾表示式中
5.字首表示式掃瞄完之後,如果符號棧中仍有運算子,則需要全部彈出並列印到
除了堆疊法,還有括號法和語法樹法。
最後轉成字尾表示式為abc*+de*f+g *+
那麼如何計算字尾表示式呢?
參考連線
核心原則:
從左到右掃瞄字尾表示式,遇到數字就把數字壓棧,遇到運算子就把棧中兩個字元彈出來計算,得到的值再壓棧。直到遍歷完表示式,將棧中的唯一值也是棧頂值彈出,
即得到了最終答案。
在電腦程式中,不生成中間的字尾表示式,而直接計算。
符號棧中的符號彈出的時候,直接再取數字棧中的兩個數字進行計算,得到結果後再壓入數字棧中。
如何記住?
兩個棧,乙個符號,乙個數字。
從左向右遍歷。 數字壓入數字棧,符號壓入符號棧。 每彈出乙個符號,就彈出兩個數字進行計算,結果再次入棧。
符號壓棧時,如果棧頂優先順序高,要彈棧,直到優先順序不高或者相等。
逆波蘭表示法
逆波蘭表示發是一種將運算子寫在運算元後面的描述程式 算式 的方法。舉個例子,我們平常用中綴表示法描述的算式 1 2 5 4 改為逆波蘭表示法之後則是1 2 5 4 相較於中綴表示法,逆波蘭表示法的優勢在於不需要括號。請輸出以逆波蘭表示法輸入的算式的計算結果。輸入在1行中輸入1個算式。相鄰的符號 運算...
逆波蘭演算法
中綴表示式轉字尾表示式 棧實現1.從左到右掃瞄字串 2.如果遇到數字,就輸出 3.如果遇到運算子,1 棧空時,直接入棧 2 棧非空時,與棧頂元素進行優先順序比較,如果運算子優先順序大,入棧,反之,則彈出優先順序小的棧頂元素 並輸出 直到運算子符合入棧條件,入棧int judge char ch st...
逆波蘭表示法與鎖定 解鎖指令碼
位元幣交易指令碼語言,也稱為指令碼,是一種基於逆波蘭表示法的基於堆疊的執行語言。要搞懂位元幣交易的具體流程,就得知道逆波蘭表示法是怎麼回事,簡單來說就是操作符置於運算元的後面,這裡的 操作符 就是 之類的運算符號,運算元 就是。數,比如 1 1 我們的平常用的記法 記錄方法 叫常規中綴記法,而逆波蘭...