字尾表示式 一堆大白話

2021-10-05 11:10:34 字數 857 閱讀 1708

利用棧,從左到右掃瞄:

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 這種表示式便於直觀理解但是不方便計算機計算。後來有波蘭人發明了字首,字尾表示式。字首表示式也叫波蘭式,字尾表示式也叫逆波蘭式。前字尾表示式經常作為棧在優先順序的應用的例題。字首表示式遞...