題目描述:
中綴表達式轉后綴表達式_??途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());
}
}