前缀/中缀/后缀表达式;

前缀后缀中缀表达式:

 

 

 

 

 

 

 

 

 

 

 

 后缀表达式的代码实现:

复制代码
package Demo1.stackArray;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Stack;

public class PolandNocation {
    //后缀表达式:逆波兰表达式
    public static void main(String[] args) {
        //创建一个表达式(3+4)*5-6 = 29
        String suffixExpression = "3 4 + 5 * 6 -";

        for (int i = 0; i < suffixExpression.length(); i++) {

        }
        //切割表达式,存入集合
        PolandNocation polandNocation = new PolandNocation();
        List<String> list = polandNocation.getArray(suffixExpression);
        //  list.forEach(System.out::print);
        System.out.println(list);

        //计算
        System.out.println();
        try {
            int calculate = polandNocation.calculate(list);
            System.out.println("计算的结果是:--》" + calculate);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            System.out.println("退出");
        }

    }

    //压栈
    public int calculate(List<String> lis) {
        //构建一个栈
        Stack<String> stack = new Stack<>();
        for (String item : lis) {
            if (item.matches("\\d+")) {//匹配多位数
                stack.push(item);
            } else {
                int num2 = Integer.parseInt(stack.pop());
                int num1 = Integer.parseInt(stack.pop());
                int result = 0;
                if (item.equals("+")) {
                    result = num1 + num2;
                } else if (item.equals("-")) {
                    result = num1 - num2;
                } else if (item.equals("*")) {
                    result = num1 * num2;
                } else if (item.equals("/")) {
                    result = num1 / num2;
                } else {
                    throw new RuntimeException("运算符!!!异常");
                }
                stack.push("" + result);
            }
        }
        return Integer.parseInt(stack.pop());
    }

    //切割字符串(),存入集合(ArrayList)
    public List<String> getArray(String suffixExpression) {
        //把数据切割装入ArrayList
        ArrayList<String> arrayList = new ArrayList<>();
        String[] split = suffixExpression.split(" ");
        for (String number : split) {
            arrayList.add(number);
        }
        return arrayList;

    }
}
复制代码

 

posted on   白嫖老郭  阅读(219)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示