编写算术表达式的方法称为表示法.算术表达式可以用三种不同但等同的符号书写,即,不改变表达式的本质或输出.这些符号为 :
中缀符号
前缀(波兰语)符号
后缀(反向波兰语)符号
这些符号的命名方式是它们如何在表达式中使用运算符.我们将在本章中学到相同内容.
我们用中缀表示法写表达式,例如: a - b + c,在操作数之间 in 中使用运算符.我们人类很容易用中缀符号进行读,写和说话,但同样适用于计算设备.处理中缀表示法的算法在时间和空间消耗方面可能既困难又昂贵.
在此表示法中,运算符为前缀 ed到操作数,即操作符在操作数之前写入.例如, + ab .这相当于其中缀符号 a + B'/B>.前缀表示法也称为波兰表示法.
此表示法样式称为已撤消波兰表示法.在这种表示法样式中,运算符后缀编辑到操作数,即操作符在操作数之后写入.例如, ab + .这相当于其中缀符号 a + b .
下表简要介绍了所有三种符号的差异;
Sr.No. | 中缀符号 | 前缀符号 | Postfix Notation |
---|---|---|---|
1 | a + b | + ab | ab + |
2 | (a + b)∗ c | ∗ &加; a b c | a b + c∗ |
3 | a∗ (b + c) | ∗一个好处; b c | a b c + ∗ |
4 | a/b + c/d | + /ab/cd | ab/cd/ + |
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.稍后提供运算符优先级表.
关联性描述了具有相同优先级的运算符出现在表达式中的规则.例如,在表达式a + b - c,两者兼而有之; - 具有相同的优先级,然后首先评估表达式的哪个部分,由这些运算符的关联性决定.在这里,两个&加;和 - 是左关联的,因此表达式将被评估为(a + b) - c .
优先级和关联性决定了评估的顺序表达.以下是运算符优先级和关联表(从最高到最低);
Sr.No. | 运算符 | Precedence | 相关性 |
---|---|---|---|
1 | Exponentiation ^ | 最高 | 右关联 |
2 | 乘法(∗)&分部(/) | 第二高 | 左关联 |
3 | 加法( + )&减法( : ) | 最低 | 左关联 |
上表显示了运算符的默认行为.在表达式评估的任何时间点,可以使用括号来更改顺序.例如 :
在 a + b * c ,首先评估表达式部分 b * c ,乘法优先于加法.我们这里使用括号 a + b 首先进行评估,例如(a + b)* c .
我们现在看一下如何评估后缀表示法的算法 :
步骤1 - 从左到右扫描表达式 步骤2 - 如果是操作数,则将其推送到堆栈 步骤3 - 如果它是来自堆栈的操作员拉操作数并执行操作 步骤4 - 将步骤3的输出存储回堆栈 步骤5 - 扫描表达式直到消耗掉所有操作数 步骤6 - 弹出堆栈并执行操作
查看实现在C编程语言中