数据结构+算法-实现一个计算器

在学习栈的数据结构的时候讲到可以用栈来实现一个计算器的功能,那么这个功能是如何实现的呢?

采用栈+模拟得方式来实现一个计算器

要实现如下的功能:

字符串如何转为整数

2.处理加减法

如何处理加减法呢?

5-12+8 给第一个数字前面放一个+号。

如何处理乘法呢?

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

如何进行括号运算


最后的Java代码:

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;
    }
}
相关推荐
想做小南娘,发现自己是女生喵22 分钟前
【无标题】
数据结构·算法
Kx_Triumphs2 小时前
HDU4348 To the moon(主席树区间修改模板)
算法·题解
旖-旎2 小时前
《LeetCode647 回文子串 || LeetCode 5 最长回文子串》
c++·算法·leetcode·动态规划·哈希算法
轻颂呀3 小时前
约瑟夫环问题
算法
凤凰院凶涛QAQ5 小时前
《Java版数据结构 & 集合类剖析》栈与队列:“push/pop 是栈的灵魂,offer/poll 是队列的骨架——四组 API,两种人生”
java·开发语言·数据结构
科技大视界5 小时前
投资AI项目,传统尽调不够用了——李章虎律师拆解算法、数据、算力三大雷区
人工智能·算法·数据挖掘
郝学胜-神的一滴5 小时前
算法实战:最小k个数——大顶堆的优雅解法
开发语言·数据结构·c++·python·程序人生·算法·排序算法
Irissgwe5 小时前
算法滑动窗口
数据结构·算法
怪兽学LLM6 小时前
LeetCode 105. 从前序与中序遍历序列构造二叉树:分治递归思路详解
算法·leetcode·职场和发展