将算术表达式由中序表达式转为后序表达式

来源:互联网 发布:avmoo最新域名2016 3 编辑:程序博客网 时间:2024/06/08 07:35
哎,继续加油
package Algorithm;import edu.princeton.cs.algs4.*;public class InfixToPostfix {public static boolean notLessthan(String a,String b){if((a.equals("*")||a.equals("/"))&&(b.equals("*")||b.equals("/")||b.equals("+")||b.equals("-")))return true;else if((a.equals("+")||a.equals("-"))&&(b.equals("+")||b.equals("-")))return true;return false;}public static void main(String[] args) {//用一个栈来处理,一个String来保存Stack<String>s=new Stack<String>();String result="";while(!StdIn.isEmpty()){String str=StdIn.readString();//如果是"(",压入栈中if(str.equals("("))s.push(str);//如果是")",连续出栈,直到遇见"("为止,将"("出栈并丢弃else if(str.equals(")")){while(!s.peek().equals("(")&&!s.isEmpty()){result+=s.pop();}s.pop();}//是运算符,且不是")",不断循环进行else if(str.equals("+")||str.equals("-")||str.equals("*")||str.equals("/")){if(s.isEmpty())s.push(str);//如果此运算符不大于栈顶运算符优先级,栈顶运算符出栈,此运算符进栈else if(notLessthan(s.peek(),str)){//while循环保证高优先级运算符全部出栈while(!s.isEmpty()&¬Lessthan(s.peek(),str)&&!s.peek().equals("("))result+=s.pop();s.push(str);}//否则,运算符连续入栈elses.push(str);}//如果是操作数,直接保存elseresult+=str;}while(!s.isEmpty())result+=s.pop();StdOut.println(result);}}

0 0