中綴表達式轉后綴表達式

題目描述:


中綴表達式轉后綴表達式_??途W
將中綴表達式轉為后綴表達式,輸入 a+bc/d-a+f/b 輸出 abcd/+a-fb/+
要求:語言不限;輸入輸出均為單個字符串;操作數(shù)用單個小寫字母表示,操作符只需支持 +-*/,按照四則運算順序確定優(yōu)先級,不包含括號。


輸入描述:

一個字符串為合法的中綴表達式
字符串長度不超過200000

輸出描述:

對應的后綴表達式

輸入示例:

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

輸出示例:

abc*d/+a-fb/+

題目分析:


這道題呢,中綴表達式轉后綴表達式,從左到右依次遍歷字符串,當遇到操作數(shù)時直接輸出;當遇到操作符時,如果當前操作符優(yōu)先級小于等于棧頂優(yōu)先級,則將棧頂操作符出棧,然后再將當前操作符壓棧。當遍歷完字符串后如果棧不為空,則將棧中元素依次出棧。具體代碼如下~


代碼實現(xiàn):

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());
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容