1. 程式人生 > >中綴表示式與字尾表示式的轉換及字尾表示式的計算

中綴表示式與字尾表示式的轉換及字尾表示式的計算

一.字尾表示式的計算
字尾表示式:
指的是不包含括號,運算子放在兩個運算物件的後面,所有的計算按運算子出現的順序,嚴格從左向右進行。(不再考慮運算子的優先規則)。

中綴表示式:
也就是我們日常最容易見到的表示式,從左至右考慮運算子的優先原則。

首先,我們以電腦的思維計算字尾表示式,這裡必須用到棧的知識,棧通俗來講就像一個桶,它裡邊存放的東西必須滿足先進後出的原則。

我們以表示式1 2 4 8 2 - 7 4 - / * + *為例講解。

         **字尾表示式用棧計算的原則就是遇到數字就入棧,遇到運算子就把棧頂兩數字計算,再把計算結果入棧,這樣反覆直到棧空。**

具體過程如下:
第一步:1,2,4,8,2按順序進棧,遇減號,棧頂2做減數,8做被減數,相減得6入棧
這裡寫圖片描述
第二步:7,4按順序進棧,遇減號 ,棧頂4做減數,7做被減數,相減得3入棧
這裡寫圖片描述
第三步: 遇除號,棧頂3作為除數,6作為被除數,運算得2入棧
這裡寫圖片描述
第四步:遇乘號,棧頂元素2,4相乘得8入棧
這裡寫圖片描述
第五步:遇加號,棧頂元素8,2相乘得10入棧
這裡寫圖片描述
第六步:遇乘號,棧頂元素10,1相乘得10入棧
這裡寫圖片描述

第七步:輸出棧底元素10,即該字尾表示式結果為10

以上就是字尾表示式求解的思想
二.中綴表示式與字尾表示式的轉換

對於中綴表示式與字尾表示式的轉換有一個簡便方法,就是先用括號按運算子優先順序把中綴表示式一層一層括起來,每遇到一個括號,就把括號裡面的運算子放在本層括號外邊,直到把所有的運算子都都放在括號外邊,再把括號去掉,得到的表示式就是對應的字尾表示式。

例如:x=a+b*(c-d)/e

        x = a + ( b * ( c - d) ) / e

        x = a + ( (b * ( c - d ) ) / e )

        x = (  (a + ( ( b * ( c - d ) ) / e ) )

       x = (  (a + ( b * (c d )- ) ) / e ) )

       x = ( (  a  + ( b (c d)- ) * ) / e) )

         x = ( ( a  ( b (c d) - ) * ) e ) / )+

       ( x  ( ( a ( b) c d ) - ) * ) e ) / ) + ) =

最後把括號去掉:x a b c d - * e / + =  

其實按這個方法真的是既簡單又不容易錯,希望可以幫助到大家,如果有什麼錯誤,也歡迎大家指出,謝謝。