逆波兰表达式

package datastructure;

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
import java.util.stream.Stream;

public class DoubleLinkedListDemo {
    public static void main(String[] args) {
        //说明为了方便,逆波兰表达式 的数字和符号使用空格隔开
    //String suffixExpression = "30 4 + 5 * 6 -";"30 4 + 5 * 6 -"
        String suffixExpression = "30 4 + 5 * 6 -"; // 76
    //思路
    //1. 先将 "3 4 + 5 × 6 - " => 放到 ArrayList 中
    //2. 将 ArrayList 传递给一个方法,遍历 ArrayList 配合栈 完成计算
        List<String> listString = getListString(suffixExpression);
        System.out.println(listString);
        int res = calculate(listString);
        System.out.println(res);
    }
    //将一个逆波兰表达式, 依次将数据和运算符 放入到 ArrayList 中
    public static List<String> getListString(String suffixExpression){
        //将 suffixExpression 分割
        String[] split = suffixExpression.split(" ");
        ArrayList<String> list = new ArrayList<>();
        for (String ele : split){
            list.add(ele);
        }
        return list;
    }

    //完成对逆波兰表达式的运算
/*
* 1)从左至右扫描,将 3 和 4 压入堆栈;
2)遇到+运算符,因此弹出 4 和 3(4 为栈顶元素,3 为次顶元素),计算出 3+4 的值,得 7,再将 7 入栈;
3)将 5 入栈;
4)接下来是×运算符,因此弹出 5 和 7,计算出 7×5=35,将 35 入栈;
5)将 6 入栈;
6)最后是-运算符,计算出 35-6 的值,即 29,由此得出最终结果
*/
    public static int calculate(List<String> list){
        Stack<String> stack = new Stack<>();
        for (String item : list){
            // 这里使用正则表达式来取出数
            if(item.matches("\\d+")){
                // 入栈
                stack.push(item);
            }else {
                // pop 出两个数,并运算, 再入栈
                int num2 = Integer.parseInt(stack.pop());
                int num1 = Integer.parseInt(stack.pop());
                int res = 0;
                switch (item){
                    case "+":
                        res = num1 + num2;
                        break;
                    case "-":
                        res = num1 - num2;
                        break;
                    case "*":
                        res = num1 * num2;
                        break;
                    case "/":
                        res = num1 / num2;
                        break;
                    default:
                        throw new RuntimeException("运算符有误");
                }
                stack.push(res + "");
            }
        }
        //最后留在 stack 中的数据是运算结果
        return Integer.parseInt(stack.pop());
    }
}
数据结构(java代码实现) 文章被收录于专栏

数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。

全部评论
["3","-19","-","13","33","+","-","-1","-","3","34","+","21","+","-","39","+","-6","16","14","-","-","/","-20","+","-5","-","2","-","32","-","10","+","30","-","2","+","29","+","-4","-2","+","+","-13","+","26","-","11","+","16","-10","+","-","-19","+","-5","+","21","-13","+","-","31","+","24","+","37","-","10","-","34","-","-10","+","-12","-","17","+","-1","+","38","-","11","31","30","+","+","+","3","+","5","+","36","-","7","-","8","+","1","26","-7","+","-","-","-4","-","-20","-","-10","19","+","+","24","-","24","-","-12","-10","+","+","-10","-","-16","+","38","+","22","-7","+","+","28","+","19","-","17","-7","*","-9","-","+","-18","+","10","-","20","+","-13","+","4","-6","-","+","3","-","28","25","+","-17","4","-","-1","-","+","+","-15","+","31","-","19","+","-9","-","17","17","-19","+","-","+","1","-","-18","-17","+","+","15","-","-11","+","-1","+","12","-","39","+","6","+","4","-8","-","+","25","+","33","-","27","-","5","-11","8","26","-11","-","-10","/","15","-","+","15","+","-","5","-","18","+","-9","38","-","32","-","-17","5","25","+","+","-7","-16","-11","+","-","25","24","-","+","-","-","+","+","+","8","-","6","-","28","+","9","-19","-1","-","+","-","37","31","-6","-","-3","33","-14","-","+","+","-4","+","-","4","17","+","+","+","20","-","-7","+","8","-","30","-","36","14","-","+","9","-","-20","18","38","+","10","+","+","-","37","-","28","-","15","-","22","34","+","31","-17","+","+","7","-","+","33","+","35","-","26","+","28","+","-17","+","11","-3","+","+","30","+","-3","-14","-","-","23","-","19","9","30","28","-","-3","+","+","10","-","27","30","+","-","-12","1","+","-","+","-20","+","-","-18","24","+","24","33","26","-","+","*","24","29","-","-13","17","+","+","*","-","38","+","5","-4","-","-","-7","-","11","+","-14","-","30","-","-3","37","-","+","5","22","+","-","23","+","21","-20","+","-","30","+","17","+","30","-","10","20","+","-","3","+","23","8","-3","-","-18","-","+","-","39","+","-11","+","23","-","8","+","34","-","-2","+","-5","-","2","+","1","+","-8","34","+","27","-","+","36","-","-7","-20","12","20","-","-3","+","-19","+","+","-","9","+","-","15","+","6","-","37","+","-16","-","37","13","+","+","12","0","+","-","-18","-","-1","7","+","+","24","-","-18","+","39","+","-13","-","29","-","0","-6","+","-","-1","39","-17","+","-","+","23","+","3","+","9","13","35","-","-","-","9","+","4","+","26","+","18","+","35","-15","-","6","-","-","19","14","5","-","-","-","28","-","24","5","21","+","28","+","+","+","35","-20","+","+","-20","-","-13","-","-19","+","-6","+","-2","-","8","-","14","12","+","+","-18","-4","+","30","-","+","27","-10","-","-","-8","-","15","12","-","-","21","+","35","+","32","-","6","+","-3","38","+","-1","4","+","+","-","34","+","-14","-","-9","26","+","-","11","+","-10","-","37","-","20","+","38","-","-12","-18","-","-","-12","+","-2","34","-","-","-10","12","+","+","-8","-","-17","+","36","-","-16","+","18","-","25","+","16","7","-","31","10","15","22","-1","-","+","19","/","12","13","-","-","4","-","-","+","+","34","+","-","5","+","-15","12","32","+","-4","7","29","-","+","-8","-","-","+","+","-4","12","-","-","0","-","27","+","26","-20","-12","+","-","-8","19","-","+","23","-19","-","+","+","-20","12","+","-","37","/","29","10","+","-","30","36","+","30","-","-","-5","-","31","+","-11","+","36","+","13","-","-6","-","-19","+","12","-5","30","-9","-","+","35","+","-","+","18","+","1","-6","+","7","-","-","2","9","-","+","-15","36","2","+","+","+","-8","+","20","+","4","-","17","+","13","-","-20","-","17","-","-9","+","-4","34","-14","24","-","-","+","-15","-3","+","-","+","32","+","2","17","-","+","-14","24","+","+","12","-","6","+","-5","-","5","-","7","-","19","-16","+","/","12","-","29","-","1","+","35","+","-18","+","1","-3","-","-","-15","-","-8","-20","-","-5","+","21","+","+","15","35","+","-","-15","+","24","-","-15","-","-5","+","-1","+","9","-","3","-","-9","38","+","-7","+","-","31","-","-11","+","15","13","+","+","19","-8","-","+","13","-","35","-","-1","-","-14","-","19","+","-18","+","30","/","34","-","37","-","32","-","36","-","12","+","29","26","+","35","-","-","-15","-1","15","+","+","10","+","-","-8","+","-2","+","21","27","-","+","-9","-","34","-","6","-","4","+","23","-","19","-","-3","-","-11","-","0","+","-4","-","-3","3","+","+","-5","11","21","13","-","12","10","-","-","-","-16","-","20","-","+","-","-3","10","-11","-13","20","+","+","-11","+","-","-","-","-9","-","18","+","22","-","-20","+","39","16","-","-","36","+","25","+","39","-","-15","-8","+","-","-9","-","-10","34","-","-7","+","-","-7","-","-2","-13","33","25","+","+","-","+","32","-","18","-","29","-","30","+","10","6","-","-","12","*","-18","-","-7","*","15","29","-","-","9","17","4","-","-12","-10","+","-","+","39","6","-5","+","-","+","+","25","-6","18","-20","39","-","-6","31","+","24","-","36","-","+","-","+","-","+","-6","26","-","-","-7","+","-7","-","-19","13","6","+","9","29","+","-","-12","20","+","+","5","-","+","-2","-","+","-14","-","7","+","24","-","20","-18","0","-","+","-","22","-19","+","+","31","+","-17","+","10","+","-1","+","22","+","18","14","36","+","4","10","+","-","-2","+","17","-","-","+","22","37","14","-","-","-","36","+","34","-","-14","+","-4","+","17","20","-","-3","-","-","2","24","-10","-","3","+","27","+","-","+","-15","5","8","-","-9","27","+","+","-","+","-13","30","9","+","-","2","-","-","-4","-13","-","-","27","-","15","35","38","-3","22","+","-","+","-","+","2","+","-19","38","+","-13","+","+","18","+","33","-","8","+","31","+","-1","-","19","-","-8","+","21","-","-14","-","38","10","+","16","-","+","1","-","18","37","+","+","-10","-","21","29","+","+","5","-","-16","-","-1","-","26","-6","+","+","5","-1","7","-","17","5","+","-2","-","20","39","0","+","21","-","-14","+","-","13","+","+","-","-19","-10","-","-10","-","-","+","-20","+","-","-2","+","21","+","33","-","32","+","-7","+","21","-","-12","8","-6","16","-","25","+","-","-","+","35","-","-11","-","-2","+","39","22","-20","0","+","+","+","-","-2","-14","+","19","2","-","-","+","4","+","5","-7","-","13","-","-","-10","33","+","37","+","/","-2","-18","+","+","17","-","21","-","29","39","+","+","-18","-17","11","-","+","+","15","-","36","-","37","22","-5","11","17","-","+","+","-","-","4","-19","+","-","-12","-","-5","33","+","10","-","*","-9","+","-4","+","-14","+","33","-","-2","-","-9","/","-6","19","28","-","-","-7","+","*","34","+","13","-","39","-16","+","-","6","3","-18","-","+","-","30","1","+","-","15","+","36","+","-4","+","-10","-","33","3","31","-2","-","+","-2","-","15","+","36","-","-","+","15","+","8","+","18","*","24","35","+","+","5","-","2","+","38","+","4","-18","/","+","0","-","4","+","-2","0","-2","-14","-19","14","27","-","-","-","-19","-","+","+","+","21","+","-10","-9","-","-","+","-18","-","14","-","1","-11","+","-9","30","-","+","-17","-","-17","-","-","35","*","-1","+","-16","+","-14","+","-16","4","*","+","38","*","12","13","+","-","-9","-6","+","+","-9","-","13","0","-14","-","-","-3","20","29","+","-","-","-","25","+","29","+","0","-16","-","-17","+","14","-","-","10","-6","+","-","32","11","+","-3","31","2","+","+","-2","+","-","+","33","-","12","37","-12","-","21","-","+","-","-13","-","-14","-","13","+","5","21","-","-","-3","+","31","-","-12","-8","-","-","20","-","-5","17","24","4","-15","+","-","37","-","+","+","+","39","0","-","-","36","-","-19","+","-20","-","35","+","-7","23","+","-","-13","+","-6","26","-","-","15","+","-15","-19","-","+","-10","+","-10","+","-5","+","-4","-","1","+","32","-","26","+","2","-","20","11","-","28","-","-","3","+","32","+","13","+","39","-","31","-8","-12","+","-1","+","+","+","38","-9","-","-","32","-","16","-","-2","-","12","-","2","+","29","-","17","31","+","-9","1","+","3","-","+","4","+","+","-17","17","-","-","37","23","-6","-","-5","-8","+","-","+","-","39","-","34","8","-","14","*","-","16","-","-10","25","-","-","-18","28","-","+","-11","+","-12","+","8","13","-","39","22","0","-","+","-","-","19","+","-18","-","-5","-18","28","-","-","+","3","-","19","-8","-4","+","-","-","24","-","-13","+","11","-","20","-","-12","-18","-","+","-15","+","24","-","23","+","-8","+","37","-","-19","+","27","23","+","-","19","+","-14","+","27","-","16","+","3","+","-6","+","22","27","-","+","18","-","18","+","-20","+","-9","-","34","/","-3","-","34","-","-8","+","38","+","29","+","-18","-","20","-","23","28","-","+","14","34","-","-","14","-","32","29","+","+","-2","+","13","-18","-18","4","-15","-19","+","31","+","+","-","-","28","-","-","-","32","+","12","25","27","+","+","-","-14","29","-","+","21","+","1","-8","+","+","19","-","32","-","11","18","-","30","+","22","-","+","-17","32","-7","39","10","-","+","+","+","-","18","-","-5","+","3","-","18","-","-9","-","2","9","+","+","3","25","+","-","36","4","-","36","-","30","+","+","-17","+","-3","-13","-","+","19","+","32","15","10","20","-6","19","-","35","10","-","38","-","+","-","-","-","-","+","8","8","-","-15","-","-","39","+","38","-16","+","-","29","1","24","-","+","28","4","+","-","1","-","1","25","-","28","-","+","+","-6","+","39","-10","11","15","+","-","-16","-","-","-","28","6","+","+","-20","2","-","-12","-12","+","-17","12","+","+","+","-3","-","-","28","-","32","21","-","-"]
点赞
送花
回复
分享
发布于 2022-03-25 22:32
这个表达式会不会出现数组越界的情况呢
点赞
送花
回复
分享
发布于 2022-03-25 22:32
秋招专场
校招火热招聘中
官网直投

相关推荐

点赞 收藏 评论
分享
正在热议
# 牛客帮帮团来啦!有问必答 #
1151853次浏览 17149人参与
# 通信和硬件还有转码的必要吗 #
11208次浏览 101人参与
# 不去互联网可以去金融科技 #
20432次浏览 256人参与
# 和牛牛一起刷题打卡 #
19000次浏览 1635人参与
# 实习与准备秋招该如何平衡 #
203409次浏览 3627人参与
# 大厂无回复,继续等待还是奔赴小厂 #
4974次浏览 30人参与
# OPPO开奖 #
19212次浏览 267人参与
# 通信硬件薪资爆料 #
265943次浏览 2484人参与
# 国企是理工四大天坑的最好选择吗 #
2227次浏览 34人参与
# 互联网公司评价 #
97709次浏览 1280人参与
# 简历无回复,你会继续海投还是优化再投? #
25037次浏览 354人参与
# 0offer是寒冬太冷还是我太菜 #
454891次浏览 5124人参与
# 国企和大厂硬件兄弟怎么选? #
53909次浏览 1012人参与
# 参加过提前批的机械人,你们还参加秋招么 #
14646次浏览 349人参与
# 硬件人的简历怎么写 #
82289次浏览 852人参与
# 面试被问第一学历差时该怎么回答 #
19398次浏览 213人参与
# 你见过最离谱的招聘要求是什么? #
28147次浏览 248人参与
# 学历对求职的影响 #
161248次浏览 1804人参与
# 你收到了团子的OC了吗 #
538761次浏览 6387人参与
# 你已经投递多少份简历了 #
344255次浏览 4963人参与
# 实习生应该准时下班吗 #
96985次浏览 722人参与
# 听劝,我这个简历该怎么改? #
63525次浏览 622人参与
牛客网
牛客企业服务