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;
	 }

}

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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • tcp三次握手四次挥手详解_tcp为什么是四次挥手

    tcp三次握手四次挥手详解_tcp为什么是四次挥手一直都知道TCP建立连接时需要三次握手,释放连接时需要四次挥手,也大概能说出整个过程,但是一直对其中的设计思想理解不深,停留在“只可意会,不可言传”的阶段。这次写一篇博客尝试将其中的思想表达出来。TCP建连三次握手首先解释一下每个步骤的作用:1、a时刻,A准备就绪,发送SYN包给B,尝试建立连接2、b时刻,B收到A发来的SYN包,知道A要请求建连,回…

    2022年9月1日
    5
  • hdu 3081 hdu 3277 hdu 3416 Marriage Match II III IV //灵活运用最大流量

    hdu 3081 hdu 3277 hdu 3416 Marriage Match II III IV //灵活运用最大流量

    2022年1月6日
    41
  • win10多合一原版系统_win10简体中文64位16299.15多合一版本

    win10多合一原版系统_win10简体中文64位16299.15多合一版本镜像有点大估计压缩后也会超过4G,所以不会上传多合一版本介绍:包含以下版本windows10homewindows10homesinglelanguagewindows10homechinawindows10prowindows10educationwindows10enterprisewindows10s注意全部是64位的哈!!微云:http://url.cn/…

    2022年6月17日
    56
  • vuecli关闭eslint_如何关闭eslint

    vuecli关闭eslint_如何关闭eslintVue前端

    2022年10月8日
    2
  • 服务器系统装显卡驱动,windows2019服务器系统安装显卡驱动(A卡篇)

    服务器系统装显卡驱动,windows2019服务器系统安装显卡驱动(A卡篇)原创:张荣国今天捣腾一台旧电脑安装windows2019服务器系统,测网站等。安装windows2019倒是没什么难度。本来想着服务器系统,也不用理它驱动了,毕竟基本驱动它会自己装上。但后来接显示器时,分辨率只有1024,而且显示器是宽频的,这样的分辨率图标都变形了,越看越觉得难受,索性想着帮它装个显卡驱动吧,来个正确分辨率就好了。可是网上找了一圈,服务器系统的显卡驱动就没有。想想也是,服务器毕竟…

    2022年9月27日
    3
  • scrollHeight,clientHeight,scrollTop

    scrollHeight,clientHeight,scrollTop移动端加载数据时,由于数据太多,不会一次性全部加载出来。有些会采用pc端那样用分页码的形式,但是更多的确实滑动滚动条到内容最后,加载更多内容出来。一般引入了三方的前端框架和插件,基本都会有此功能。偶尔会需要采用原生js实现,故而此处就介绍下原生js的实现方式。另外附上jquery的实现方式。原生js实现思路需要三个高度:scrollHeight(文档内容实际高度,包括超出视窗的溢出部分)、scrollTop(滚动条滚动距离)、clientHeight(窗口可视范围高度)。当clientHeig

    2022年7月23日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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