- 前缀表达式:所有的符号都是在要运算数字的前面出现
- 中缀表达式:平时用的标准四则运算表达式:9+(3-1)*3+10/2
- 后缀表达式:所有的符号都是在要运算数字的后面出现
- 中缀表达式转化为后缀表达式:9 3 1 - 3 * + 10 2 / +
- 规则:从左到右遍历中缀表达式每个数字和符号,若是数字就输出,即成为后缀表达式的一部分;若是符号,则判断其与栈顶符号的优先级,是右括号或优先级低于栈顶符号(乘除优先加减)则栈顶元素依次出栈并输出,并将当前符号进栈,一直到最终输出后缀表达式为止;
后缀表达式的特点就是计算机运算非常方便,需要用到栈;计算机处理过程只需要顺序读入,如果遇到数字,则放入栈中,如果是运算符,则将两个栈中数字取出进行运算;
比如1+2的后缀表达式为12+;
而栈可以把一般的中缀表达式变成后缀表达式,并且计算后缀表达式得出结果,因此其应用在计算器中非常常用;
/*
* 将后缀表达式运算输出
*/
public static int evalRPN(String[] tokens) {
Stack<Integer> stack = new Stack();
for (int i = 0 ; i<tokens.length;i++){
try {
stack.push(Integer.parseInt(tokens[i]));
}catch (Exception e){
exec(stack,tokens[i]);
}
}
return stack.pop();
}
private static void exec(Stack stack, String token) {
int a = (int)stack.pop();
int b = (int)stack.pop();
switch (token){
case "+": stack.push(b+a); break;
case "-": stack.push(b-a); break;
case "*": stack.push(b*a); break;
case "/": stack.push(b/a); break;
default:
System.out.println("Something wrong");
break;
}
}