java 中缀转后缀(逆波兰)[通俗易懂]

java 中缀转后缀(逆波兰)

大家好,又见面了,我是全栈君。


import java.util.Stack;


public class LeetCode_middleTransformToReversePolish {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String[] input={"9","+","(","3","-","1",")","*","3","+","10","/","2"};
		System.out.println(middleToBack(input));

	}
	
	public static String middleToBack(String[] input)
	{
		int length=input.length;
		String result="";
		boolean isHaveleftToken=false;
		Stack<String> stack=new Stack<>();
		for(int i=0;i<length;i++)
		{
			if(!isOperator(input[i]))
				result=result+input[i];
			else {
				if(stack.isEmpty())
					stack.push(input[i]);
				else if(input[i].equals("*")||input[i].equals("/"))
				{
					String tempeek=stack.peek();
					if(isHaveleftToken)
						stack.push(input[i]);
					else {
						if(tempeek.equals("*")||tempeek.equals("/"))
							result=result+stack.pop();
						
						stack.push(input[i]);
						
					}
				}
				else if(input[i].equals("("))
				{
					isHaveleftToken=true;
					stack.push(input[i]);
				}
				else if(input[i].equals(")"))
				{
					String temp=stack.pop();
					while(!temp.equals("("))
					{
						result=result+temp;
						temp=stack.pop();
						
					}
					isHaveleftToken=false;
					
				}
				else {
					if(isHaveleftToken)
						stack.push(input[i]);
					else {
						while(!stack.isEmpty())
							result=result+stack.pop();
						stack.push(input[i]);
					}
					
				}
						
				
			}
		}
		//加上栈中还没出栈的元素
		while(!stack.isEmpty())
		{
			result=result+stack.pop();
		}
		
		return result;
		
	}
	
	 public static boolean isOperator(String s) 
	 {
		 if(s.equals("+")||s.equals("-")||s.equals("*")||s.equals("/")||s.equals("(")||s.equals(")"))
			 return true;
		 else
			 return false;
	 }

}

总体思路是这种:遇到数字的话直接输出,遇到右括号 输出左括号上面的所有元素   ,遇到左括号入栈。遇到乘除符号。进行推断假设栈中有左括号或栈顶元素是加减就入栈其余出栈。遇到加减符号,假设栈中有左括号则入栈,否则将栈中元素所有出栈。做完这些处理后,在将栈中还没出栈的增加到输出结果中。亲測实用

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/116029.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号