逆波兰表达式

声明: 本总结仅为个人学习总结,以防止遗忘而作,不得转载和商用。
Reverse Polish Notation,即后缀表达式,也称逆波兰表达式RPN
如:
中缀表达式: a+(b-c)d
后缀表达式: abc-d
+
题目:
计算给定的逆波兰表达式的值.有效操作只有+-/,每个操作都整数
如:
"2", "1", "+", "3", "
" : 9 = (2+1)*3
"4", "13", "5", "/", "+" : 6 = 4+(13/5)
分析:
1.若当前字符是操作数,则压栈
2.若当前字符是操作符,则弹出栈中的两个操作数,计算后仍然压入栈中
(1).若某次操作,栈内无法弹出两个操作数,则表达式有误
Java版本的实现一,按字符数组处理:

public static int reversePolishNotation(char[] cs, int size) {
        Stack stack = new Stack<>();
        int a,b;
        char token;
        for(int i=0;i

是否是运算符:

public static boolean isOperator(char token) {
        return token == '+' || token == '-' || token == '*' || token == '/';
    }

测试代码:

public static void main(String[] args) {
        String string = "21+3*";
        char[] cs = string.toCharArray();
        int value = reversePolishNotation(cs, cs.length);
        System.out.println(value);
    }

输出结果:9
Java版本实现二,按字符串数组处理:

public static int reversePolishNotation(String[] str) {
        Stack stack = new Stack<>();
        int a,b;
        String token;
        for(int i=0;i

测试代码:

public static void main(String[] args) {
            String[] cs2 = {"4","13","5","/","+"};
        value = reversePolishNotation(cs2);
        System.out.println(value);
    }

输出结果: 6

你可能感兴趣的:(逆波兰表达式)