实现基本步骤
- 用数组接收输入的原始表达式。
- 用两个栈来进行操作,一个栈用来存放运算符,另一个栈用来存放输出的逆波兰表达式。
- 依次遍历原始表达式,再根据遍历的元素分别进行操作。
- 如果遍历为数字,直接输出到逆波兰表达式栈中。
- 如果遍历为“(”,入运算符栈里。
- 如果遍历为“)”,则依次把运算符栈栈顶的运算符加入逆波兰表达式栈中,直到出现“(”,接着从栈中删除“(”,逆波兰表达式中不存在括号。
- 如果遍历为除括号外的其他运算符(+,-,*,/), 当其优先级高于除“(”以外的栈顶运算符时,直接入栈。否则从栈顶开始,依次弹出比当前处理的运算符优先级高和优先级相等的运算符,直到一个比它优先级低的或者遇到了一个左括号为止,然后将其自身压入栈中(先出后入),弹出的运算符加入逆波兰表达式栈中。
- 遍历原始表达式结束后,将运算符栈中的所有运算符出栈,依次入逆波兰表达式栈中。
- 最后,依次遍历输出存放逆波兰表达式的数组,就得到了逆波兰表达式。
Java代码实现
import java.util.Scanner;
public class RPN {
private char[] list;//存放自己输入的表达式(中缀表达式)
private char[] sign;//存放运算符的栈
private char[] rpnList;//存放逆波兰表达式的栈
private int rpnTop,signTop;//指