中綴表示式與字尾表示式之間的互轉及求值

2021-08-29 05:37:14 字數 2270 閱讀 5508

中綴表示式轉字尾表示式

遇到「)」,依次彈出棧頂元素並輸出,直至遇到「(」後,左括號出棧

掃瞄結束後若棧中不為空依次彈出

例: 2*(9+6/3-5)+4

從左到右開始掃瞄

掃瞄到2,輸出

此時輸出串為:2

運算子棧為:null

掃瞄到*,入棧

此時輸出串為:2

運算子棧為:*

掃瞄到(,入棧

此時輸出串為:2

運算子棧為:*(

掃瞄到 9,輸出

此時輸出串為:2 9

運算子棧為:*(

掃瞄到 +,優先順序高於 ( ,入棧

此時輸出串為:2

運算子棧為:*(+

掃瞄到 6 ,輸出

此時輸出串為:296

運算子棧為:*(+

掃瞄到 /,優先順序大於 +,入棧

此時輸出串為:296

運算子棧為:*(+/

掃瞄到 3,輸出

此時輸出串為:2963

運算子棧為:*(+/

掃瞄到 -,優先順序低於 / ,所以 / 出棧並輸出,

此時輸出串為:2963/

運算子棧為:*(+

然後 - 和 +比較,因為+號在棧裡,所以+ 出棧並輸出

此時輸出串為:2963/+

運算子棧為:*(

因為 - 優先順序高於 (,-入棧

此時輸出串為:2963/+

運算子棧為:*(-

遇到5,輸出

此時輸出串為:2963/+5

運算子棧為:*(-

遇到 ) ,彈出 -並輸出 ,

此時輸出串為:2963/+5-

運算子棧為:*(

遇到了 ( ,( 出棧

此時輸出串為:2963/+5-

運算子棧為:*

掃瞄到 +,優先順序低於 * ,* 出棧並輸出,然後+入棧

此時輸出串為:2963/+5-*

運算子棧為:+

掃瞄到4,輸出

此時輸出串為:2963/+5-*4

運算子棧為:+

掃瞄結束,將棧中元素依次出棧輸出

此時輸出串為:2963/+5-*4+

運算子棧為:null

結果: 2*(9+6/3-5)+4的字尾表示式為 2963/+5-*4+

字尾表示式轉為中綴表示式

從左到右掃瞄,遇到第乙個運算子 /,緊挨著他的前面兩個相鄰的數字是6和3

執行6/3並把它們看成乙個整體的數字,如下

296/3 +5-*4+

遇到 +,緊挨著他的前面兩個相鄰的數字是9和6/3

執行9+6/3

29+6/35-*4+

遇到 - ,緊挨著他的前面兩個相鄰的數字是9+6/3和5

執行9+6/3 - 5

29+6/3-5*4+

遇到 ,緊挨著他的前面兩個相鄰的數字是2和9+6/3-5

執行2*(9+6/3 - 5)

2*(9+6/3-5)4+

遇到 +,緊挨著他的前面兩個相鄰的數字是2*(9+6/3-5)和4

執行2*(9+6/3 - 5)+4

2*(9+6/3-5)+4

結果:2*(9+6/3-5)+4

字尾表示式求值

中綴表示式 字尾表示式

中綴表示式就是 a b 這樣的,運算子在兩個數的中間 字尾表示式就是 a b 這樣的,運算子在兩個數後面 再細分一下 中綴表示式 字尾表示式 a b c a b c a b c a b c a b c a b c a b c a b c a b c d e a c a b c d e a c emm...

中綴表示式 字尾表示式

數學表示式稱為中綴表示式,符合人的思考習慣 1 2 3運算子放在數字後面,符合計算機運算 123 遍歷中綴表示式中的數字和符號 左括號 入棧 運算符號 需要與棧頂符號進行優先順序比較 遍歷結束 將棧中所有符號彈出並輸出。例 中綴表示式 1 2 5 3 4 2 1 1 數字1直接輸出 結果 1 棧 空...

中綴表示式 字尾表示式

表示式 x a b c d e 的字尾表示形式可以為 c a xab cde b xa bc de c xabcd e d xabcde 表示式前字尾表達形式 乙個中綴式到其他式子的轉換方法 這裡我給出乙個中綴表示式 a b c d e 第一步 按照運算子的優先順序對所有的運算單位加括號 式子變成拉...