栈实现综合计算器和逆波兰计算器的定义代码
【摘要】 栈实现综合计算器(中缀表达式)计算思路:(1)通过一个 index值(索引),来遍历我们的表达式(2)如果我们发现是一个数字,就直接入数栈(3)如果发现扫描到是一个符号,就分如下情况1)如果发现当前的符号栈为空,就直接入栈2)如果符号栈有操作符,就进行比较,如果当前的操作符的优先级小于或者等于栈中的操作符,就需要从数栈中pop出两个数,再从符号栈中pop出一个符号,进行运算,将得到结果,入数...
栈实现综合计算器(中缀表达式)
计算思路:
(1)通过一个 index值(索引),来遍历我们的表达式
(2)如果我们发现是一个数字,就直接入数栈
(3)如果发现扫描到是一个符号,就分如下情况
1)如果发现当前的符号栈为空,就直接入栈
2)如果符号栈有操作符,就进行比较,如果当前的操作符的优先级小于或者等于栈中的操作符,就需要从数栈中pop出两个数,再从符号栈中pop出一个符号,进行运算,将得到结果,入数栈,然后将当前的操作符入符号栈,如果当前的操作符的优先级大于栈中的操作符,就直接入符号栈
(4)当表达式扫描完毕,就顺序的从数栈和符号栈中pop出响应的数和符号,并运行
(5)最后在数栈只有一个数字,就是表达式的结果
逆波兰计算器
完成一个逆波兰计算器,要求完成如下任务:
(1)输入一个逆波兰表达式(后缀表达式),使用栈(Stack),计算其结果。
(2)支持小括号和多位数整数,因为这里我们主要讲的是数据结构,因此计算器进行简化,只支持对整数的计算。
思路分析:
例如:(3 + 4) * 5 - 6 对应的后缀表达式就是 34 + 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,由此得出最终结果
import.java.util.ArrayList;
import.java.util.List;
import.java.util.Stack;
public class PolandNotation {
public static void main(String[] args) {
//先定义逆波兰计算器
//为了方便运算,逆波兰表达式的数字和符号使用空格隔开
List<String>list = getListString(suffixExpression);
System.out.println("rpnList=" + list);
int res = calculate(list);
System.out.println("计算的结果是=" + res);
//将一个逆波兰表达式,依次将数据和运算符放入到ArrayList中
public static List<String>getListString(String suffixExpression) {
String[] solit = suffixExpression.split(" ");
List<String>list = new ArrayList<String>();
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,由此得出最终结果
*/
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)