数据结构中的前缀表达式和后缀表达式
书写算术表达式的表达方式称为记法。算术表达式可以用三种不同但等效的记法来编写,即不改变表达式的本质或输出。这些记法是:
中缀表达式
前缀表达式
后缀表达式
中缀记法是我们编写不同数学表达式时使用的普通记法。前缀和后缀记法则有所不同。
前缀记法
在这种记法中,运算符位于操作数**之前**,即运算符写在操作数前面。例如,**+ab**。这相当于其中缀记法**a + b**。前缀记法也称为**波兰表示法**。
后缀记法
这种记法风格称为**逆波兰表示法**。在这种记法风格中,运算符位于操作数**之后**,即运算符写在操作数之后。例如,**ab+**。这相当于其中缀记法**a + b**。
Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.
示例
表达式编号 | 中缀记法 | 前缀记法 | 后缀记法 |
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。稍后将提供运算符优先级表。
广告