前、中、后缀表达式

  • 前缀表达式:所有的符号都是在要运算数字的前面出现
  • 中缀表达式:平时用的标准四则运算表达式: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;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_35642036/article/details/82835229