数据结构第六章分讲、栈之逆波兰表达式

一、逆波兰表达式 

1.1概念

逆波兰式(Reverse Polish Notation,RPN,或逆波兰记法),也叫后缀表达式(将运算符写在操作数之后)。

1.2算法:根据中缀表达式求后缀表达式

1.2.1思路分析

中缀表达式 a + b * c + ( d * e + f ) * g ,转换为后缀表达式为:a b c * + d e * f + g * +

举例:1+(2*3)+(4*5+6)*7==179,计算机无法识别 () 通过栈式算法如下:

数据结构第六章分讲、栈之逆波兰表达式_第1张图片

1.2.2算法作用

由于计算机(计算器)无法识别我们通过 () 来限定的优先级,而计算机内部是栈式结构,相对计算机而言就需要逆波兰表达式算法。

1.2.3力扣

链接:逆波兰表达式

class Solution {
    public int evalRPN(String[] tokens) {
        Stack stack=new Stack<>();
        for(String s:tokens){
            if(isOperate(s)){
                int num2=stack.pop();
                int num1=stack.pop();
                switch(s){
                    case "+":
                    stack.push(num1+num2);
                    break;
                    case "-":
                    stack.push(num1-num2);
                    break;
                    case "*":
                    stack.push(num1*num2);
                    break;
                    case "/":
                    stack.push(num1/num2);
                    break;
                }
            }
            else{
                stack.push(Integer.parseInt(s));
            }
        }
        return stack.pop();
    }
    public boolean isOperate(String s){
        if(s.equals("+")||s.equals("-")||s.equals("*")||s.equals("/")){
            return true;
        }
        return false;
    }
}

你可能感兴趣的:(Java数据结构和算法,数据结构,java,算法,leetcode,开发语言)