李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
数据结构学习--逆波兰计算器
Leefs
2020-01-29 PM
1717℃
0条
# 数据结构学习--逆波兰计算器 **完成一个逆波兰计算器,要求完成如下任务:** ``` (1)输入一个逆波兰表达式(后缀表达式),使用栈 (Stack),计算其结果 (2)支持小括号和多位数整数,因为这里我们主要讲的是数据结构,因此计算器进行简化,只支持对整数的计算。 ``` **思路分析:** > 例如: (3+4)×5-6 对应的后缀表达式就是 **3 4 + 5 × 6 - ,** **针对后缀表达式求值步骤如下**: > > (1). 从左至右扫描,将3和4压入堆栈; > > (2). 遇到+运算符,因此弹出4和3(4为栈顶元素,3为次顶元素),计算出3+4的值,得7,再将7入栈; > > (3). 将5入栈; > > (4). 接下来是×运算符,因此弹出5和7,计算出7×5=35,将35入栈; > > (5). 将6入栈; > > (6). 最后是-运算符,计算出35-6的值,即29,由此得出最终结果 **代码** ```java public class PolandNotation { public static void main(String[] args) { String suffixExpression="4 5 * 8 - 60 + 8 2 / +"; List
list = getListString(suffixExpression); int res = calculate(list); System.out.println("计算的结果是="+res); } //将一个逆波兰表达式,依次将数据和运算符放入到ArrayList中 public static List
getListString(String suffixExpression){ //将 suffixExpression分割 String[] split = suffixExpression.split(" "); List
list = new ArrayList
(); for(String ele:split){ list.add(ele); } return list; } //完成对逆波兰表达式的运算 /** * (1). 从左至右扫描,将3和4压入堆栈; * (2). 遇到+运算符,因此弹出4和3(4为栈顶元素,3为次顶元素),计算出3+4的值,得7,再将7入栈; * (3). 将5入栈; * (4). 接下来是×运算符,因此弹出5和7,计算出7×5=35,将35入栈; * (5). 将6入栈; * (6). 最后是-运算符,计算出35-6的值,即29,由此得出最终结果 * */ public static int calculate(List
ls){ //创建一个栈,只需要一个栈即可 Stack
stack = new Stack
(); //遍历ls for(String item:ls){ //这里使用正则表达式来取出数 if(item.matches("\\d+")){//匹配的是多位数 //入栈 stack.push(item); }else{ //pop出两个数,并运算,再入栈 int num2 = Integer.parseInt(stack.pop()); int num1 = Integer.parseInt(stack.pop()); int res = 0; if(item.equals("+")){ res = num1 + num2; }else if(item.equals("-")){ res = num1 - num2; }else if(item.equals("*")){ res = num1 * num2; }else if(item.equals("/")){ res = num1 / num2; }else{ throw new RuntimeException("运算符有误"); } //把res入栈 stack.push(""+res); } } //最后溜在stack中的数据是运算结果 return Integer.parseInt(stack.pop()); } } ``` > 运行结果 ``` 计算的结果是=76 ```
标签:
数据结构
,
栈
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/501.html
上一篇
数据结构学习--逆波兰表达式
下一篇
数据结构学习--中缀表达式转换为后缀表达式
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
JavaWeb
MyBatis-Plus
SpringCloudAlibaba
SpringCloud
FastDFS
数学
Hbase
Spark Core
Spring
Typora
序列化和反序列化
Git
高并发
Spark RDD
Filter
CentOS
MyBatisX
国产数据库改造
散列
算法
Python
Java
稀疏数组
Jquery
ajax
工具
正则表达式
Hive
Kafka
Jenkins
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭