中缀表达式转化成后缀表达式
来源:互联网 发布:mac有线网络设置 编辑:程序博客网 时间:2024/06/05 20:45
package test;/*设立一个栈,存放运算符,首先栈为空,编译程序从左到右扫描中缀表达式,若遇到操作数,直接输出,并输出一个空格作为两个操作数的分隔符;若遇到运算符,则必须与栈顶比较,运算符级别比栈顶级别高则进栈,否则退出栈顶所有元素并输出,然后输出一个空格作分隔符;若遇到左括号,进栈;若遇到右括号,则一直退栈输出,直到退到左括号止。当栈变成空时,输出的结果即为后缀表达式。10以内的数学表达式*/import java.util.Stack;public class StackTest { private String endExpression; private Stack<Character> stack; public StackTest(){ this.endExpression = ""; this.stack = new Stack<Character>(); } public String endExp(String content){ //循环遍历字符串 for(int i=0; i < content.length(); i++){ char ch = content.charAt(i); //若遇到操作数,直接输出,并输出一个空格作为两个操作数的分隔符; if(ch >= '0' && ch <= '9'){ this.endExpression += ch + " "; } //switch中continue和break有什么区别? switch (ch) { //若遇到左括号,进栈 case '(':{ this.stack.push(ch); break; } //若遇到右括号,则一直退栈输出,直到退到左括号止。 case ')':{ while(!this.stack.isEmpty() && !(this.stack.peek() == '(')){ this.endExpression += this.stack.pop() + " "; } //去掉(括号 this.stack.pop(); break; } case '*': case '/':{ //若遇到运算符,则必须与栈顶比较,运算符级别比栈顶级别高则进栈 if(this.stack.isEmpty() || this.stack.peek() == '(' || this.stack.peek() == '+' || this.stack.peek() == '-'){ stack.push(ch); } break; } case '+': case '-':{ //+—优先级最低,所以所有运算符出栈 while(!this.stack.isEmpty() && !(this.stack.peek() == '(')){ this.endExpression += this.stack.pop() + " "; } //将最后运算符入栈 if(this.stack.isEmpty() || this.stack.peek() == '('){ this.stack.push(ch); } break; } default: break; } } //当栈变成空时,输出的结果即为后缀表达式。 while(!this.stack.isEmpty()){ this.endExpression += this.stack.pop() + " "; } return this.endExpression; } public static void main(String[] args){ String s = "1+2*3-4"; StackTest st = new StackTest(); String result = st.endExp(s); System.out.println(result); }}
PS:+、-运算符优先级最低,所有运算符出栈
代码过于拙劣,未加错误提示信息,仅支持10以内表达式,望各位大大多多指教,批评指正。
刚在CSDN看到一句话,和大家共勉:
编程中最没用的东西是源代码,最有用的东西是算法和数据结构。
0 0
- 将中缀表达式转化成后缀表达式
- 中缀表达式转化成后缀表达式
- 中缀表达式转化成前缀表达式和后缀表达式
- 表达式/如何将中缀表达式转化成后缀表达式
- 中缀转化为后缀表达式
- 简单计算器求值(中缀表达式转化成后缀表达式)
- 把中缀表达式转化为后缀表达式
- 用栈将中缀表达式转化为后缀表达式
- 将中缀表达式转化为后缀表达式
- 中缀表达式转化为后缀表达式
- 将中缀表达式转化为后缀表达式
- 将中缀表达式转化为后缀表达式
- 中缀表达式转化为后缀表达式
- 中缀表达式转化为后缀表达式
- 将中缀表达式转化为后缀表达式
- 将中缀表达式转化为后缀表达式
- 将中缀表达式转化为后缀表达式
- 将中缀表达式转化为后缀表达式
- hibernate和mybatis比较
- Jenkins与xcode ios持续集成
- block语法
- unity视频笔记——flappy bird
- 项目2-就拿胖子说事
- 中缀表达式转化成后缀表达式
- 使用common-fileUpload和 Spring中MultipartHttpServletRequest实现文件上传
- 异常控制try-throw-catch用法小结
- 基于SpringMVC的登录拦截器
- 面试心得与总结---BAT、网易、蘑菇街
- Activity生命周期
- 基础的图书馆管理系统
- CODE[VS] NO.1083 Cantor表(类似蛇形矩阵,模拟,找规律)
- OC-类和对象