中缀表达式转后缀表达式

题目描述:


中缀表达式转后缀表达式_牛客网
将中缀表达式转为后缀表达式,输入 a+bc/d-a+f/b 输出 abcd/+a-fb/+
要求:语言不限;输入输出均为单个字符串;操作数用单个小写字母表示,操作符只需支持 +-*/,按照四则运算顺序确定优先级,不包含括号。


输入描述:

一个字符串为合法的中缀表达式
字符串长度不超过200000

输出描述:

对应的后缀表达式

输入示例:

a+b*c/d-a+f/b

输出示例:

abc*d/+a-fb/+

题目分析:


这道题呢,中缀表达式转后缀表达式,从左到右依次遍历字符串,当遇到操作数时直接输出;当遇到操作符时,如果当前操作符优先级小于等于栈顶优先级,则将栈顶操作符出栈,然后再将当前操作符压栈。当遍历完字符串后如果栈不为空,则将栈中元素依次出栈。具体代码如下~


代码实现:

import java.util.Scanner;
import java.util.HashMap;
import java.util.Stack;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        String str=sc.nextLine();
        HashMap<String,Integer> map=new HashMap();
        map.put("+",0);
        map.put("-",0);
        map.put("*",1);
        map.put("/",1);
        StringBuffer sb=new StringBuffer();
        Stack<String> stack=new Stack();
        for(int i=0;i<str.length();i++){
            char c=str.charAt(i);
            if('a'<=c&&c<='z'){
                sb.append(c);
            }else{
                while(!stack.isEmpty()&&
                      map.get(String.valueOf(c))<=map.get(String.valueOf(stack.peek()))){
                    sb.append(stack.pop());
                }
                stack.push(String.valueOf(c));
            }
        }
        while(!stack.isEmpty()){
            sb.append(stack.pop());
        }
        System.out.println(sb.toString());
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容