您的位置:首页 > 健康 > 美食 > 数据结构+算法-实现一个计算器

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

2024/10/6 4:05:01 来源:https://blog.csdn.net/ngczx/article/details/140225687  浏览:    关键词:数据结构+算法-实现一个计算器

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

字符串如何转为整数

在这里插入图片描述

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;}
}

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com