上回讲了如何计算后缀表达式,其实真正的难点在于如何将一个正常的字符串表达式(中缀表达式)变成一个后缀表达式。如将6 * ( 5 + ( 2 + 3) * 8 + 3)变为6 5 2 3 + 8 * + 3 + *
逆波兰表达式,它的语法规定,表达式必须以逆波兰表达式的方式给出。逆波兰表达式又叫做后缀表达式。这个知识点在数据结构和编译原理这两门课程中都有介绍,下面是一些例子:
| 正常的中缀表示 | 逆波兰表达式 |
| a+b | a,b,+ |
| a+(b-c) | a,b,c,-,+ |
| a+(b-c)*d | a,b,c,-,d,*,+ |
| a+d*(b-c) | a,d,b,c,-,*,+ |
首先约定表达式中运算符的优先级,从大到小依次为:()、* 和 /、+ 和 -。暂时只考虑四则运算。
顺序读取字符串表达式,规则:
- 读到的是操作数,直接输出;
- 读到的是操作符(+-*/)(记为read),将其与栈顶的操作符(记为top)进行优先级比较:read>top,r

本文介绍了如何使用Java将中缀表达式转换为后缀表达式(逆波兰表达式)。通过逐字符读取表达式,根据运算符优先级与栈操作规则,将6 * ( 5 + ( 2 + 3) * 8 + 3)转换为6 5 2 3 + 8 * + 3 + *。文章提到了处理多位数、除法时的非零判断、负数和小数等复杂情况的处理思路。
最低0.47元/天 解锁文章
787

被折叠的 条评论
为什么被折叠?



