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

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

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

要实现如下的功能:

字符串如何转为整数

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;
    }
}
相关推荐
課代表5 分钟前
从初等数学到高等数学
算法·微积分·函数·极限·导数·积分·方程
ullio8 分钟前
arc206d - LIS ∩ LDS
算法
等等小何33 分钟前
leetcode1593拆分字符串使唯一子字符串数目最大
算法
量子炒饭大师43 分钟前
Cyber骇客神经塔尖协议 ——【初阶数据结构与算法】堆
c语言·数据结构·c++·二叉树·github·
XLYcmy1 小时前
TarGuessIRefined密码生成器详细分析
开发语言·数据结构·python·网络安全·数据安全·源代码·口令安全
王老师青少年编程1 小时前
2025年12月GESP(C++二级): 环保能量球
c++·算法·gesp·csp·信奥赛·二级·环保能量球
KingRumn2 小时前
DBUS源码剖析之DBusMessage数据结构
linux·服务器·数据结构
weixin_433417672 小时前
Canny边缘检测算法原理与实现
python·opencv·算法
CoderCodingNo2 小时前
【GESP】C++五级真题(贪心思想考点) luogu-P11960 [GESP202503 五级] 平均分配
开发语言·c++·算法
youngee112 小时前
hot100-61电话号码的字母组合
java·数据结构·leetcode