中序表达式变成后序表达式 JAVA实现版本
来源:互联网 发布:印度贫民窟 知乎 编辑:程序博客网 时间:2024/05/16 08:14
package algorithm;import java.util.*;public class ConvertMiddleOrder2PostOrder { /* * * convert middleOrder math expression to PostOrde * for example: A-B*(C+D)/E (in-order) * converted result: ABCD*E/- (post-oder) */ public static String ConvertInOrder2PostOrderUtil(String inOrderString){ //support: + - * / /* element content: * l = < * g = > * e = = * n = not available * each operation map to array index: * + = 0 * - = 1 * * = 2 * / = 3 * for example: oprPriority[2][3]=‘e', 就是 operator * 跟栈类的 /比较优先级,结果是优先级 相等。 * (, ),比较特殊,就在代码中处理了。 */ char [][] oprPriority = new char[][]{ {'e','e','l','l'}, {'e','e','l','l'}, {'g','g','e','e'}, {'g','g','e','e'} }; if(inOrderString.length()<3) { System.out.println("bad expression data"); return null; } char[] resultarray = new char[inOrderString.length()]; int rstindex=0; int len=inOrderString.length(); int curposition=0; //save operators Stack<String> mystack = new Stack<String>(); char[] tmparray = new char[2]; char stackchar,curchar; while(len>0){ System.out.println("converted str="+new String(resultarray)); curchar=inOrderString.charAt(curposition); switch(curchar) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': resultarray[rstindex++]=curchar; curposition++; len--; break; case '+': case '-': case '*': case '/': if(!mystack.empty()){ //compare operation tmparray=mystack.peek().toCharArray(); if(tmparray[0]=='(') { //push this operator as '(' in stack is lowest tmparray[0]=curchar; mystack.push(new String(tmparray)); curposition++; len--; } else { int column,row; switch(curchar){ case '+': row=0; break; case '-': row=1; break; case '*': row=2; break; case '/': row=3; break; default: System.out.println("expression error"); return null; } switch(tmparray[0]){ case '+': column=0; break; case '-': column=1; break; case '*': column=2; break; case '/': column=3; break; default: System.out.println("expression error"); return null; } char result=oprPriority[row][column]; switch(result){ case 'g': // incoming > operator in stack //push this operator if it is higher than stack top tmparray[0]=curchar; mystack.push(new String(tmparray)); curposition++; len--; break; case 'e': //= case 'l': // < //pop up the top operator in stack mystack.pop(); resultarray[rstindex++]=tmparray[0]; break; default: System.out.println("expression error"); return null; } } } else { //push this operator tmparray[0]=curchar; mystack.push(new String(tmparray)); curposition++; len--; } break; case '(': //push into stack tmparray[0]=curchar; mystack.push(new String(tmparray)); curposition++; len--; break; case ')': //pop up all operator until it meet '(' while(!mystack.empty()){ tmparray=mystack.peek().toCharArray(); mystack.pop(); if(tmparray[0]=='('){ break; } else { //save this operator to result str resultarray[rstindex++]=tmparray[0]; } } curposition++; len--; break; default: System.out.println("expression error"); return null; } } while(!mystack.empty()) { tmparray=mystack.pop().toCharArray(); resultarray[rstindex++]=tmparray[0]; System.out.println("converted str="+new String(resultarray)); }String result=new String(resultarray);return result;}}
测试语句:
ConvertMiddleOrder2PostOrder.ConvertInOrder2PostOrderUtil("1-2*(3+4)/5"))
//output is
converted post-order expression is: 1234+*5/-
0 0
- 中序表达式变成后序表达式 JAVA实现版本
- 中序表达式 to 后序表达式
- 中序表达式转后序表达式的java实现
- Java-Stack实现中序表达式求值
- 中序表达式转换为后序表达式
- 前序、中序、后序表达式
- 前(中后)序表达式讲解
- “中序表达式”转换为“前序表达式”、“后序表达式”
- 中序表达式转成前序表达式和后序表达式及其计算方法
- “中序表达式”转换为“前序表达式”、“后序表达式”
- 将算术表达式由中序表达式转为后序表达式
- 1.3.10将算术表达式由中序表达式转为后序表达式(algs4)
- 表达式2叉树(前序,中序,后序)的非递归实现_模板实现
- Java数据结构——中序表达式转后续表达式实现
- Java栈实现括号匹配、中序转后序表达式、中序表达式直接计算
- 算法第四版 用java实现由中序表达式转换为后续表达式
- 将中序表达式转为后序表达式
- 中序表达式转后序表达式
- 【leetcode】153. Find Minimum in Rotated Sorted Array
- 第8周项目3—指向学生类的指针
- SSM框架开发时出现HTTP 400错误
- 俄罗斯乘法
- 《java并发编程实战》读书笔记二 对象的发布与逸出
- 中序表达式变成后序表达式 JAVA实现版本
- OkHttp深入学习(一)——初探
- Unity3d Application设备读写目录
- 算法——Manacher算法(求最长回文子串)
- linux基础学习之 gSOAP(1)
- 数据结构与算法
- 复制文件
- iOS开发-时间日期NSDate
- 设计模式系列总结之观察者模式