栈应用2 中缀表达式转后缀表达式
来源:互联网 发布:蓝可儿事件真相 知乎 编辑:程序博客网 时间:2024/06/16 21:13
为了简单起见,我们只考虑简单的加减乘除计算
一、算法逻辑
1)从左向右扫描后缀表达式
2)初始化栈
3)遍历表达式,直至扫描完所有字符
4)如果被扫描的字符是一个操作数,将其入栈
5)如果被扫描的字符是运算符,出栈两个元素,计算后,结果入栈,注意首先出栈的是第二个操作数
6 )所有都扫描结束后,栈中只有一个元素
7)栈顶元素即是计算结果
二、算法实现
1
2
import java.util.Stack;
3
4
/**计算中辍表达式
5
* Created by Administrator on 2017/6/25 0025.
6
*/
7
public class Operator1Stack {
8
public static void main(String[] args) {
9
String str = "123*+5-";
10
System.out.println(useNum(str));
11
}
12
public static int useNum(String str){
13
char[] chars = str.toCharArray();
14
java.util.Stack<Integer> stack = new Stack<>();
15
for(char c : chars){
16
String s = String.valueOf(c);
17
18
if(!OperatorEnum.isOperator(s)){
19
stack.push(Integer.valueOf(s));
20
}else{
21
Integer a = stack.pop();
22
Integer b = stack.pop();
23
stack.push(useOperator(s,b,a));
24
}
25
}
26
return stack.pop();
27
}
28
public static int useOperator(String operator, int a,int b){
29
if(operator.equals(OperatorEnum.PLUS_SIGN.getOpertor())){
30
return a+b;
31
}
32
if(operator.equals(OperatorEnum.MINUS.getOpertor())){
33
return a-b;
34
}
35
if(operator.equals(OperatorEnum.TIMES_SIGN.getOpertor())){
36
return a*b;
37
}
38
if(operator.equals(OperatorEnum.DIVISION_SIGN.getOpertor())){
39
return a/b;
40
}
41
return 0;
42
}
43
}
44
三、算法跟踪
计算结果是2
注意:计算时,第一个出栈的元素是第二个操作数。
阅读全文
0 0
- 栈的应用案例2:中缀表达式转后缀表达式
- 栈应用2 中缀表达式转后缀表达式
- 栈应用2 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式求值(栈的应用)
- 栈的应用-中缀表达式转后缀表达式(C版)
- 栈的应用实践之中缀表达式转后缀表达式
- 栈的应用 - 中缀表达式转后缀表达式
- 栈的应用之中缀表达式转后缀表达式
- 栈的应用---(中缀表达式 转 后缀表达式)
- 《数据结构实战》中缀表达式转后缀表达式----栈的应用
- 栈的应用——中缀表达式转后缀表达式,后缀表达式的求值,中缀表达式求值
- 栈应用(中缀表达式转后缀表达式并计算后缀表达式的值)
- 中缀转后缀表达式
- 表达式中缀转后缀
- 中缀转后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- Java Map遍历方式方式及性能测试
- 栈应用2 中缀表达式转后缀表达式
- 判断是否是质数
- Vue利用路由钩子token过期后跳转到登录页
- 解析 | 深度学习在无人驾驶汽车上面的运用有哪些?
- 栈应用2 中缀表达式转后缀表达式
- windows上传文件到远程linux
- ffmpeg 函数简单分析 : avcodec_register_all()
- Java中的阻塞队列
- Spring整合SpringMVC
- 通过raw socket 测试网卡性能
- 计算机网络中基于TCP服务器与客户端通信
- JAVA 使用相对路径读取文件
- 栈应用4 计算中缀表达式