利用棧,從左到右掃瞄:
1.遇到數字直接輸出
2.遇到運算子,若棧為空,則直接進棧,若棧不為空,和棧頂符號比較優先順序(乘除大於加減),該運算子優先順序低於棧頂符號優先順序,則棧中元素依次出棧,並將該元素入棧。
3.遇到左括號入棧
4.遇到右括號,棧中元素出棧,知道彈出的為左括號,括號在字尾表示式中輸出
5.最後將棧中元素依次出棧
以上式為例:(以【】代表棧)
m*(n+p)-q
第乙個元素m直接輸出
字尾表示式:m
棧 【】
第二個元素*,棧為空,入棧【*】
字尾表示式:m
棧 【*】
第三個元素左括號入棧
字尾表示式:m
棧 【*】
第四個元素n輸出
字尾表示式:mn
棧 【* (】
第五個元素+,棧頂元素為(,(我認為括號應該是遇到右括號才比較優先順序),所以入棧
字尾表示式:mn
棧 【* ( +】
第六個元素p,輸出
字尾表示式:mnp
棧 【*】
第七個元素右括號,將棧中元素左括號之後的元素依次出棧
字尾表示式:mnp+
棧 【*】
第八個元素-,優先順序低於*,所以棧中元素*出棧,-入棧
字尾表示式:mnp+*
棧 【-】
第九個元素q,輸出
字尾表示式:mnp+*q
棧 【-】
最後輸出棧中元素
字尾表示式:mnp+*q-
請各位大佬指正
經典白話演算法之中綴表示式和字尾表示式
一 字尾表示式求值 字尾表示式也叫逆波蘭表示式,其求值過程可以用到棧來輔助儲存。假定待求值的字尾表示式為 6 5 2 3 8 3 則其求值過程如下 1 遍歷表示式,遇到的數字首先放入棧中,依次讀入6 5 2 3 此時棧如下所示 2 接著讀到 則從棧中彈出3和2,執行3 2,計算結果等於5,並將5壓入...
表示式樹 中綴表示式轉換成字尾表示式(一)
將棧初始化為空棧 從左到右掃瞄表示式的每乙個字元,執行下面操作 2.1 遇到運算元 直接輸出 新增到字尾表示式中 2.2 棧為空時,遇到運算子,直接入棧 2.3 遇到左括號 將其入棧 2.4 遇到右括號 執行出棧操作,並將出棧的元素輸出,直到彈出棧的是左括號,左括號不輸出。2.5 遇到其他運算子 加...
字首表示式,中綴表示式,字尾表示式的一點微小理解
字尾表示式 中綴即我們平時用的數學表示式,其遞迴定義為中綴表示式 運算子 中綴表示式。舉例 1 2,1 2 3 4 這種表示式便於直觀理解但是不方便計算機計算。後來有波蘭人發明了字首,字尾表示式。字首表示式也叫波蘭式,字尾表示式也叫逆波蘭式。前字尾表示式經常作為棧在優先順序的應用的例題。字首表示式遞...