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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 浅谈Python Django框架

    浅谈Python Django框架

    2021年10月21日
    37
  • 422模块接线_422接口定义

    422模块接线_422接口定义#硬件芯片422引脚连接方式前言参考连接对应表举例-正好拿手头的一款芯片链接举例查手册前言最近调试串口转422程序,便买了一个“多功能5和1的转换器“,如下图所示,但是调试的时候,没怎么看线序,改线后忘记如何连接,只能重新查找资料,为例方便更多人也方便自己记录参考。参考连接个人觉的写言简意赅的,美中不足的地方就是看着费劲,所以优化了一下。参考如下连接:https://blog.csdn.net/fzktongyong/article/details/86163206对应表举例-正好拿手头的

    2022年8月30日
    0
  • 微信聊天内容制作生成器微信小程序源码/支持多种制作生成[通俗易懂]

    ☑️编号:ym205☑️品牌:小程序☑️语言:wx☑️大小:345KB☑️类型:聊天内容制作☑️支持:小程序????欢迎免费领取(注明编号)????✨源码介绍这是一款微信聊天内容制作生成小程序源码,该小程序支持制作多种内容。支持单人聊天模式制作,支持群聊模式制作生成;每一种模式都支持我们微信需要的功能都有,视频,语音,时间,内容等等,大家可以最后看演示图!!另外还支持微信零钱,也就是我的界面制作生成DIY金额(具体大家看演示图);另外也支持微信红包制作DIY金额,发

    2022年4月9日
    173
  • 微信小程序转二维码教程_小程序码转换成二维码

    微信小程序转二维码教程_小程序码转换成二维码微信小程序转二维码方法分享需要转码的可以看看这个东西是看个人需求的,618就要来了,各种活动也将来袭为了方便小程序邀请活动没法外发,这里分享下将小程序转二维码的方法首先,你需要在电脑上打开https://mp.weixin.qq.com注册一个个人微信订阅号,其次,登陆微信电脑版,微信号关注你注册的订阅号,这是重点注册好了,接下来就是详细步骤1首页-新建群发-选择自建图文-最上边点小程序2选择你要转码的小程序名字或者微信号如“来客有礼”,点下一步3点击“获取更多页

    2022年9月5日
    3
  • 进程管理之进程调度「建议收藏」

    进程管理之进程调度「建议收藏」文章目录一、进程调度基础1、进程调度定义2、进程调度目标二、基本调度算法1、先来先服务算法2、时间片轮转算法3、短任务优先算法4、优先级调度算法5、混合调度算法  在多进程并发的环境里,虽然从概念上看,有多个进程在同时执行,但在单个CPU下,在任何时刻只能有一个进程处于执行状态,而其他进程则处于非执行状态。那么问题来了,我们是如何确定在任意时刻到底由哪个进程执行,哪些不执行呢?这就涉及到进程管理…

    2022年9月29日
    0
  • debian 开机启动脚本_ubuntu 自启动脚本

    debian 开机启动脚本_ubuntu 自启动脚本在debian6中,加入开机启动脚本的方法与debian5不同了,直接做符号链接到runlevel已经不起作用了,提示缺少LSB信息,并且用insserv来替代update-rc.d:root@14:/etc/rc2.d#update-rc.d-n php_fastcgi.sh defaults           update-rc.d:usingdependencybas

    2022年10月19日
    0

发表回复

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

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