中缀表达式转后缀表达式及其计算
来源:互联网 发布:松下fpxh编程样列 编辑:程序博客网 时间:2024/06/10 05:48
中缀表达式->后缀表达式
算法:
1.循环读取输入的字符串
2.读取到操作数:输出
3.读取到’+’, ‘-’ : 弹出栈的内容到输出流直到遇到’(‘,最后将’+’或’-‘入栈
4.读取到’*’, ‘/’ : 弹出栈的内容到输出流直到遇到’(‘, 最后将’*’或’/’入栈
5.读取到’(‘,入栈
6.读取到’)’, 弹出栈的内容到输出流直到遇到’(‘, 圆括号不输出。
个人实现的代码如下:
public static String midToPost(String s) { int n = s.length(); StringBuilder str = new StringBuilder(); Stack<Character> stack = new Stack<Character>(); for (int i = 0; i < n; i++) { char ch = s.charAt(i); Character temp; switch (ch) { case ' ': break; case '('://遇到'('压栈 stack.push(ch); break; case '+'://遇到'+'或者'-'一直弹出栈的内容到输出直到遇到'(',然后将'+'或者'-'压栈 case '-': while(!stack.isEmpty()) { temp = stack.peek(); if (temp == '(') { break; } else { str.append(stack.pop()); } } stack.push(ch); break; case '*'://遇到'*'或者'/'一直弹出栈的内容到输出直到遇见'(','+','-',最后压栈'*'或者'/' case '/': while (!stack.isEmpty()) { temp = stack.peek(); if (temp == '(' || temp == '+' || temp == '-') { break; } else { str.append(stack.pop()); } } stack.push(ch); break; case ')'://遇到')'一直弹出栈的内容到输出直到遇见'(',弹出'(',不输出不压栈 while (!stack.isEmpty()) { temp = stack.peek(); if (temp == '(') { stack.pop(); break; } else { str.append(stack.pop()); } } break; default: str.append(ch); break; }
测试如下:
输入1:a+b*c+(d*e+f)*g
输出2:abc*+de*f+g*+
输入2:5+((1+2)*4)-3
输出2:512+4*+3-
后缀表达式的计算
算法:
循环读取输入流
读取到数字时压栈
读取到操作符时,对栈做两次弹出,对这两个弹出的数字错对应操作,如果是减法和除法注意区分减数和被减数,除数和被除数。
个人实现的代码如下:
private static int postFixCal(String input) { Stack<Integer> stack = new Stack<Integer>(); int n = input.length(); int a,b; for(int i = 0; i < n; i++) { char tmp = input.charAt(i); if(tmp>='A' && tmp<='F') { stack.push((int)(tmp-'A')+10); } else if(tmp>='1' && tmp<='9'){ stack.push(tmp - 48); } switch(tmp) { case '+': a = stack.pop(); b = stack.pop(); stack.push(b+a); break; case '-': a = stack.pop(); b = stack.pop(); stack.push(b-a); break; case '*': a = stack.pop(); b = stack.pop(); stack.push(b*a); break; case '/': a = stack.pop(); b = stack.pop(); stack.push(b/a); break; default: break; } } return stack.pop(); }
有了后缀表达式的计算,就不用管中缀表达式的那些括号匹配啦,超麻烦。
所以现在可以将一个中缀表达式的输入转为后缀表达式,然后再进行计算。
输入:512+4*+3- (上文的输入2)
输出:14
在本人机器eclipse调试通过,读者可以自行测试。
以上。
0 0
- 中缀表达式转后缀表达式及其计算
- 中缀表达式转后缀表达式 (中缀表达式的计算)
- 中缀表达式转后缀表达式并计算
- 中缀表达式转后缀表达式及后缀表达式的计算
- 中缀表达式转后缀表达式,并计算后缀表达式值
- 中缀表达式转后缀表达式 && 后缀表达式计算
- Java 中缀表达式转后缀表达式 + 中/后缀表达式计算
- 表达式的计算 中缀转后缀
- 中缀表达式转后缀并计算值
- 表达式计算(中缀表达式转后缀前缀表达式)
- 中缀转后缀表达式
- 表达式中缀转后缀
- 中缀转后缀表达式
- 中缀表达式转前、后缀表达式及其求值
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- L2-002. 链表去重
- Android 对拍照、选照和剪切的封装
- 模拟实现strcpy与strcmp函数
- python最优化-梯度下降实现
- 与本地程序相关的一个bug------要配合利用date命令观察才好!
- 中缀表达式转后缀表达式及其计算
- ADB使用详细教程
- Android7.0系统使用Intent跳转到APK安装页
- 一步一步搞清排序之堆排序(JAVA)
- 数据库知识学习--DML操作(一)
- SimpleMappingException异常映射
- Mybatis-enviroments(Chinese)
- Springmvc中异常处理的三种方式
- [09]javascript时间与日期