//将一个中序表达式转换为后序表达式
public class InfixToPostfix {
public static int compare(String s1, String s2)
{
if((s1.equals("+")||s1.equals("-"))&&(s2.equals("*")||s2.equals("/")))
return -1;
else if((s1.equals("*")||s1.equals("/"))&&(s2.equals("+")||s2.equals("-")))
return 1;
else return 0;
}
public static void main(String[] args)
{
String[] strs = StdIn.readStrings();
ListStack mascot = new ListStack();
String exp = "";
for(int i = 0; i != strs.length; i++)
{
if(strs[i].equals("("))
mascot.push(strs[i]);
else if(strs[i].equals(")"))
{
String temp = mascot.pop();
while(!temp.equals("("))
{
exp = exp + " " + temp;
temp = mascot.pop();
}
}
else if(strs[i].equals("+") || strs[i].equals("-")
||strs[i].equals("/")||strs[i].equals("*"))
{
if(mascot.isEmpty() || mascot.peek().equals("(") || (compare(strs[i], mascot.peek()) >= 0))
mascot.push(strs[i]);
else
{
while(!mascot.isEmpty() && compare(strs[i], mascot.peek())<=0 && !mascot.peek().equals("("))
exp = exp + " " + mascot.pop();
mascot.push(strs[i]);
}
}else
exp = exp + " " + strs[i];
}
while(!mascot.isEmpty())
exp = exp + " " + mascot.pop();
StdOut.println(exp);
}
}
*******************************************************************************************************
//对后序表达式进行求值
public class EvaluatePostfix {
public static void main(String[] args)
{
String[] strs = StdIn.readStrings();
ListStack s = new ListStack();
for(int i = 0; i != strs.length; i++)
{
if(strs[i].equals("+") || strs[i].equals("-")
||strs[i].equals("/")||strs[i].equals("*"))
{
double x1 = s.pop();
double x2 = s.pop();
switch(strs[i].charAt(0))
{
case '+':
x1 = x1 + x2;
break;
case '-':
x1 = x2 - x1;
break;
case '*':
x1 = x1 * x2;
break;
case '/':
x1 = x2 / x1;
break;
}
s.push(x1);
}else
s.push(Double.parseDouble(strs[i]));
}
StdOut.println(s.pop());
}
}