• 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;
    	 }
    
    }
    
    总体思路是这种:遇到数字的话直接输出,遇到右括号 输出左括号上面的所有元素   ,遇到左括号入栈。遇到乘除符号。进行推断假设栈中有左括号或栈顶元素是加减就入栈其余出栈。遇到加减符号,假设栈中有左括号则入栈,否则将栈中元素所有出栈。做完这些处理后,在将栈中还没出栈的增加到输出结果中。亲測实用
  • 相关阅读:
    从TList 复制数据,到另一个TList
    如何跨单元、跨类地访问Delphi类的私有域(网上收集)
    关于类的方法(不是类方法),类方法指针
    Delphi中枚举类型的应用[转]
    SQL Server日志过大会影响查询结果 .
    mssql 2005/2008/2012如何添加、查询、修改分区表中的数据 .
    SQL Server 分区表 删除(合并)一个分区 .
    sql全文索引的非聚合词库
    SQL Server 分区表添加一个分区 .
    SQL Server 2005 将普通表转换成分区表 .
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5184006.html
Copyright © 2020-2023  润新知