哎,继续加油
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);
}
//否则,运算符连续入栈
else
s.push(str);
}
//如果是操作数,直接保存
else
result+=str;
}
while(!s.isEmpty())
result+=s.pop();
StdOut.println(result);
}
}