資料結構中的字首表示式和字尾表示式
書寫算術表示式的表達方式稱為記法。算術表示式可以用三種不同但等效的記法來編寫,即不改變表示式的本質或輸出。這些記法是:
中綴表示式
字首表示式
字尾表示式
中綴記法是我們編寫不同數學表示式時使用的普通記法。字首和字尾記法則有所不同。
字首記法
在這種記法中,運算子位於運算元**之前**,即運算子寫在運算元前面。例如,**+ab**。這相當於其中綴記法**a + b**。字首記法也稱為**波蘭表示法**。
字尾記法
這種記法風格稱為**逆波蘭表示法**。在這種記法風格中,運算子位於運算元**之後**,即運算子寫在運算元之後。例如,**ab+**。這相當於其中綴記法**a + b**。
示例
表示式編號 | 中綴記法 | 字首記法 | 字尾記法 |
1 | a + b | + a b | a b + |
2 | (a + b) * c | * + a b c | a b + c * |
3 | a * (b + c) | * a + b c | a b c + * |
4 | a / b + c / d | + / a b / c d | a b / c d / + |
5 | (a + b) * (c + d) | * + a b + c d | a b + c d + * |
6 | ((a + b) * c) - d | - * + a b c d | a b + c * d - |
表示式解析
正如我們所討論的,設計算法或程式來解析中綴記法並不是一種非常有效的方法。相反,這些中綴記法首先被轉換為字尾或字首記法,然後再計算。
要解析任何算術表示式,我們還需要考慮運算子的優先順序和結合性。
優先順序
當一個運算元位於兩個不同的運算子之間時,哪個運算子首先獲取運算元由運算子對其他運算子的優先順序決定。例如:
𝑎 + 𝑏 ∗ 𝑐 → 𝑎 + (𝑏 ∗ 𝑐)
由於乘法運算優先於加法運算,因此將首先計算 b * c。稍後將提供運算子優先順序表。
廣告