美文网首页
堆栈计算算术表达式

堆栈计算算术表达式

作者: 极速魔法 | 来源:发表于2020-05-08 08:54 被阅读0次

双堆栈计算算术表达式

package algorithm;

import java.util.Stack;

public class TwoStacks {

    public static void main(String[] args) {
        String s = "(1+((2+3)*(4*5)))";
        Double res = calculate(s);
        System.out.println(res);
    }

    private static Double calculate(String numbers) {
        // opt 保存操作符,number保存 数字
        Stack<Character> opt = new Stack<>();
        Stack<Double> number = new Stack<>();
        char[] chars = numbers.toCharArray();
        // init stacks
        for (int i = 0; i < numbers.length(); i++) {
            switch (chars[i]) {
                case '+':
                case '-':
                case '*':
                case '/':
                    opt.push(chars[i]);
                    break;
                case '(':
                    break;
                case ')':
                    Double temp;
                    Character operator = opt.pop();
                    Double num1 = number.pop();
                    Double num2 = number.pop();

                    // 运算结果压入 number stack
                    switch (operator) {

                        case '+':
                            temp = num1 + num2;
                            number.push(temp);
                            break;
                        case '-':
                            temp = num1 - num2;
                            number.push(temp);
                            break;
                        case '*':
                            temp = num1 * num2;
                            number.push(temp);
                            break;
                        case '/':
                            temp = num1 / num2;
                            number.push(temp);
                            break;
                    }
                    break;

                default:
                    // 默认是'0'-'9'
                    Double num = Double.parseDouble(String.valueOf(chars[i]));
                    number.push(num);
            }
        }

        // 此时 number stack 只有最终的运算结果。
        return number.pop();
    }


}

相关文章

  • 堆栈计算算术表达式

    双堆栈计算算术表达式

  • 机试常用算法和题型-栈和队列专题

    堆栈+ordermap使用括号匹配 堆栈使用简单计算器 栈+队列实现中缀转后缀,计算后缀表达式 栈+队列计算,包括...

  • 利用栈解析算术表达式

    在编写编译器时经常需要实现对算术表达式的解析,然而对于计算机的算法来说如果直接求解算术表达式的值,还是相当困难的。...

  • 堆栈

    堆栈中常见的问题: 问题1: 后缀表达式怎么计算?问题2: 中缀表达式怎么转换成后缀表达式?问题3: 回溯算法问题...

  • mongodb聚合管道运算符

    1.算术表达式运算符 算术表达式对数字执行数学运算。一些算术表达式也可以支持日期算术。 数组表达式运算符 布尔表达...

  • Linux Day23:let

    shell中如何进行算术运算: let 算术运算表达式:let C=$A+$B $ [ 算术运算表达式]:C=$[...

  • shell

    变量 算术表达式 条件表达式

  • bash的算术运算

    bash的算术运算 bash共支持三种算术运算方式 let 表达式 expr 表达式 双括号表达式 let表达式:...

  • 运算符

    知识点一、 算数运算符及算术表达式(一) 含义算术运算符: + - * / %(取余数 取模)算术表达式:由算...

  • 栈的应用无括号算术表达式求值问题

    问题 计算无括号算术表达式的值 问题分析 运算符优先级: 设置#代表表达式结束标志。 算法原理: 例如:1+1*2...

网友评论

      本文标题:堆栈计算算术表达式

      本文链接:https://www.haomeiwen.com/subject/lhjxnhtx.html