中序表达式转后序表达式的java实现




//将一个中序表达式转换为后序表达式
 
  
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());
	}
}


你可能感兴趣的:(算法)