全文转载自:前缀、中缀、后缀表达式(逆波兰表达式),侵删。
前缀表达式,中缀表达式,后缀表达式都是四则运算的表达方式,用以四则运算表达式求值。
中缀表达式
中缀表达式就是我们常见的运算表达式。如 (3+4)×5-6
前缀表达式
前缀表达式又称为波兰式,前缀表达式的运算符位于操作数之前。比如- x + 3 4 5 6
前缀表达式的计算求值
从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素 op 次顶元素),并将结果入栈;重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果
- 例如:- x + 3 4 5 6
从右至左扫描:- 遇到 6,将6入栈。【6】
- 遇到 5,将5入栈 。【6,5】
- 遇到 4,将4入栈 。【6,5,4】
- 遇到 3,将3入栈 。【6,5,4,3】
- 遇到 + 运算符,弹出 3 和 4,计算出3 + 4 = 7,将7入栈。【6,5,7】
- 遇到 × 运算符,弹出 7 和 5,计算出7 × 5 = 35,将35入栈.【6,35】
- 遇到 - 运算符,弹出 35 和 6,计算出35 - 6 = 29,得出最终结果29。
将中缀表达式转为前缀表达式
转换算符如下:
- 初始化两个栈:预算符栈S1,存储中间结果栈S2,
后缀表达式
后缀表达式又称逆波兰表达式,与前缀表达式相似,只是运算符位于操作数之后。
后缀表达式计算机求值
与前缀表达式类似,只是从左至右扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(次顶元素 op 栈顶元素),并将结果入栈;重复上述过程直到表达式最右端,最后运算得出的值即为表达式的结果。
- 例如:3 4 + 5 × 6 -
从左至右扫描:- 遇到 3,将3入栈。【3】
- 遇到 4,将4入栈。【3,4】
- 遇到 + 运算符,弹出 4 和 3,计算出 3 + 4 = 7,将7入栈。【7】
- 遇到 5,将5入栈。【7,5】
- 遇到 x 运算符,弹出7 和 5,计算出 7 * 5 = 35,将35入栈。【35】
- 遇到 6,将6入栈。【35,6】
- 遇到 - 运算符,弹出 35 和 6,计算出 35 - 6 = 29,得出最终结果。