生成逆波兰表达式
来源:互联网 发布:孙志刚事件的网络舆论 编辑:程序博客网 时间:2024/05/16 13:04
/** * 比较当前运算符和栈顶运算符的优先级 * @param stackPeek 栈顶元素 * @param current 当前元素 * @return */ public static boolean getPriority(String stackPeek,String current) { if(stackPeek.matches("[\\*\\/]") && current.matches("[\\+\\-\\*\\/]")) { return true; }else if(stackPeek.matches("[\\+\\-]") && current.matches("\\+\\-")) { return true; } return false; } /** * 获得后缀表达式 * @param infix 传入的中缀表达式的集合 * @return */ public static ArrayList<String> getSuffix(ArrayList<String> infix) { ArrayList<String> suffix = new ArrayList<String>();//用于存储最后的后缀式 Stack<String> operator = new Stack<String>();//用于比较运算符优先级 //第一步:分离数字和运算符 for(String chs:infix) if(Character.isDigit(chs.charAt(0))) {//如果是数字,加入集合 suffix.add(chs); }else{ //如果不是数字,分离括号和运算符 switch (chs.charAt(0)) { //左括号直接入栈 case '(': operator.push(chs); break; //右括号,出栈,直到左括号出栈 case ')': while(!"(".equals(operator.peek())) suffix.add(operator.pop()); operator.pop();//左括号出栈 break; default: //如果是运算符,先比较优先级,如果当前元素的优先级低于栈顶元素,则栈顶元素出栈,当前元素出栈 //原则是保证栈顶元素的优先级最高 //如果栈顶元素优先级高,返回true,栈顶元素出栈,直到存在元素优先级低于当前元素 while(!operator.isEmpty() && getPriority(operator.peek(),chs)) suffix.add(operator.pop()); operator.push(chs);//优先级高的栈顶元素出栈后,加入优先级更低的元素 break; } } //判断栈中是否还有元素,有的话,取出 while(!operator.isEmpty()) suffix.add(operator.pop()); System.out.println("中缀式是:"+suffix); return suffix; }}
[(, 2, +, 3, ), *, 3, +, 9, *, 6, /, 8, +, (, 2, +, 4, /, 3, +, (, 2, +, 6, /, 5, ), )]
中缀式是:[2, 3, +, 3, *, 9, 6, *, 8, /, 2, 4, 3, /, 2, 6, 5, /, +, +, +, +, +]
阅读全文
0 0
- 生成逆波兰表达式
- 逆波兰表达式的生成
- 波兰、逆波兰表达式
- 逆波兰表达式的生成及计算
- 逆波兰表达式的生成及计算
- 逆波兰表达式的生成(Java版)
- Java解析字符串表达式--逆波兰表达式的生成
- 波兰表达式和逆波兰表达式
- 波兰表达式和逆波兰表达式
- 逆波兰表达式
- 逆波兰表达式
- 逆波兰表达式
- 逆波兰表达式
- 逆波兰表达式rpn
- 逆波兰表达式
- 逆波兰表达式
- 逆波兰表达式实验
- 逆波兰表达式
- Android控件--TextureView
- MYSQL的用户变量(@)和系统变量(@@)
- phpstorm在控制台输出脚本运行结果
- test
- MySQL5.7的复制(一)
- 生成逆波兰表达式
- Andriod 应用开发初步----Andriod Studio的使用
- linux c setitimer用法说明
- C++——NOIP提高组——转圈游戏
- 决策树初识
- JAVA基础
- 基于深度学习的计算机视觉学习资料汇编(英)
- centos 6.5和centos7防火墙1
- 应用机器学习(六):决策树