今天有点时间来写一下使用java实现中缀表达式转换为逆波兰表达式,逆波兰表达式其实就是后缀表达式,废话不多说,先看中缀表达式转换为逆波兰表达式的算法。
(1)建立两个栈,一个S1用来存放操作符 + - * / ( ) ,另一个S2用来存放生成的逆波兰表达式(本文中为了方便用一个字符串来存放逆波兰表达式),操作符栈遵循越往栈顶操作符优先级越高的原则。
(2)从中缀表达式的最左端开始逐个读取字符X,按以下规则对X进行处理:
a:如果X为数字,则直接放入S2
b:如果X为操作符,按以下情况处理:
b1— 如果X为’(’,则直接压入S1
b2— 如果X为’)’,则将S1中距离栈顶最近的’(‘之间的元素依次弹出放入S2,’(‘直接抛弃
b3— 如果X为’+ - * /’,若当前S1为空,则直接将X压入S1,否则将X与S1当前栈顶元素比较,若X的优先级大于S1当前栈顶元素优先级,则将X直接压入S1,否则将S1的栈顶元素弹出,放入S2,直到S1栈顶运算符优先级低于(不包括等于)