中綴表示式

王ys發表於2024-08-02

中綴表示式
一、基本概念
1、中綴表示式:
運算子以中綴形式位於運算數中間(如:3+2),是我們日常通用的算術和邏輯公式表示方法。
2、字尾表示式:
又稱逆波蘭式,運算子以字尾形式位於兩個運算數後(如:3+2的字尾表達形式就是3 2 +)。
3、字首表示式:
又稱波蘭式,運算子以字首形式位於兩個運算數前(如:3+2的字首表達形式就是+ 3 2)。
二、中綴表示式轉字尾表示式
從左至右依次遍歷中綴表示式各個字元(需要準備一個字元棧儲存運算子和括號)
1、字元為 運算數 :
直接送入字尾表示式(注:需要先分析出完整的運算數)。
2、字元為 左括號 :
直接入棧(注:左括號入棧後優先順序降至最低)。
3、字元為 右括號 :
直接出棧,並將出棧字元依次送入字尾表示式,直到棧頂字元為左括號(左括號也要出棧,但不送入字尾表示式)。
總結:只要滿足 棧頂為左括號 即可進行最後一次出棧。
4、字元為 運算子 :
若棧空,直接入棧。

若棧非空,判斷棧頂運算子,若棧頂運算子優先順序低於該運算子,該運算子入棧;否則一直出棧,並將出棧字元依次送入字尾表示式,直到棧空或棧頂運算子優先順序低於該運算子,該運算子再入棧。
總結:只要滿足 棧空 或者 優先順序高於棧頂運算子 即可停止出棧,並將該運算子入棧。
5、重複以上步驟直至遍歷完成中綴表示式,接著判斷字元棧是否為空,非空則直接出棧,並將出棧字元依次送入字尾表示式。
注:中綴表示式遍歷完成,棧中可能還有字元未輸出,故需要判斷棧空。
三、字尾表示式的計算
從左至右依次遍歷字尾表示式各個字元(需要準備一個運算數棧儲存運算數和操作結果)
1、字元為 運算數 :
直接入棧(注:需要先分析出完整的運算數並將其轉換為對應的資料型別)
2、字元為 運算子 :
連續出棧兩次,使用出棧的兩個資料進行相應計算,並將計算結果入棧
e.g:第一個出棧的運算數為 a ,第二個出棧的運算數為 b ,此時的運算子為 - ,則計算 b-a (注:a和b順序不能反),並將結果入棧。
3、重複以上步驟直至遍歷完成字尾表示式,最後棧中的資料就是中綴表示式的計算結果。

相關文章