0
点赞
收藏
分享

微信扫一扫

工作两年后,我如何看待设计模式

洲行 2024-07-24 阅读 27

在学习栈的数据结构的时候讲到可以用栈来实现一个计算器的功能,那么这个功能是如何实现的呢?
采用栈+模拟得方式来实现一个计算器
在这里插入图片描述
在这里插入图片描述
要实现如下的功能:
在这里插入图片描述

字符串如何转为整数

在这里插入图片描述

2.处理加减法

如何处理加减法呢?
5-12+8 给第一个数字前面放一个+号。
在这里插入图片描述

如何处理乘法呢?

乘法的优先级在于和栈顶的数进行结合,而加减法只是将元素放入栈中去。
在这里插入图片描述

如何进行括号运算

在这里插入图片描述
在这里插入图片描述

最后的Java代码:

class Solution {
    public int calculate(String s){
        return   f(new LinkedList<>(parseStringToList(s)));
    }
    private Deque<Character> parseStringToList(String s) {
        Deque<Character> list = new LinkedList<>();
        for (char c : s.toCharArray()) {
            list.add(c);
        }
        return list;
    }
    private  int  f(Deque<Character> s ){
        Deque<Integer> stack=new LinkedList<>();
        char sign='+';
        int num=0;
        while (!s.isEmpty()){
            char c=s.pollFirst(); //将第一个弹出来
            if (Character.isDigit(c)){
                num=10*num+(c-'0');
            }
            if (c=='('){
                num=f(s);
            }
            if (!Character.isDigit(c)&&c!=' '||s.isEmpty()){
                if (sign=='+'){
                    stack.push(num);
                }else if (sign=='-'){
                    stack.push(-num); //负数添加进去
                }else if(sign=='*'){
                    stack.push(stack.poll()*num);
                }else if(sign=='/'){
                    stack.push(stack.poll()/num);
                }
                num=0;
                sign=c;
            }
            if (c==')') break;
        }
        int sum=0;
        for(int n:stack){
            sum+=n;
        }
        return  sum;
    }
}

在这里插入图片描述

举报

相关推荐

0 条评论