/*
将中缀表达式转换为后缀表达式
定义优先级:'(' : 4
'*', '/' : 3
'+', '-' : 2
')' : 1
思路:
循环遍历输入字符数组
if input[i]是数字,则print; continue;
循环
if栈空,则input[i]入栈, break;
if outputPriority < inputPriority , 则input[i]入栈,break;
if outputPriority >= inputPriority
if output != '(' ,则print(output),continue;
else
if(input != ')'), 则出栈; break;
else input[i] 入栈; break;
*/
将中缀表达式转换为后缀表达式
定义优先级:'(' : 4
'*', '/' : 3
'+', '-' : 2
')' : 1
思路:
循环遍历输入字符数组
if input[i]是数字,则print; continue;
循环
if栈空,则input[i]入栈, break;
if outputPriority < inputPriority , 则input[i]入栈,break;
if outputPriority >= inputPriority
if output != '(' ,则print(output),continue;
else
if(input != ')'), 则出栈; break;
else input[i] 入栈; break;
*/
import java.util.*;
public class MidExpToLaterExp{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
char[] input = scan.next().toCharArray();
Stack stack = new Stack(10);
for(int i = 0; i < input.length; i ++){
int inputPriority = getPriority(input[i]);
if(inputPriority == 0){
System.out.print(input[i]);
continue;
}
while(true){
if(stack.isEmpty()){
stack.push(input[i]);
break;
}
char output = stack.peek();
int outputPriority = getPriority(output);
if(outputPriority < inputPriority){
stack.push(input[i]);
break;
}else{
if(output != '('){
stack.pop();
System.out.print(output);
continue;
}else{
if(input[i] != ')'){
stack.push(input[i]);
break;
}else{
stack.pop();
break;
}
}
}
}
}
while(!stack.isEmpty()){
System.out.print(stack.pop());
}
}
public static int getPriority(char ch){
int priority = 0;
switch(ch){
case '(' : priority = 4; break;
case '*' :
case '/' : priority = 3; break;
case '+' :
case '-' : priority = 2; break;
case ')' : priority = 1; break;
}
return priority;
}
}
class Stack{
private char[] array;
private int top;
private int maxSize;
public Stack(int maxSize){
this.maxSize = maxSize;
array = new char[maxSize];
top = 0;
}
public void push(char ch){
array[top++] = ch;
}
public char pop(){
return array[--top];
}
public char peek(){
return array[top -1];
}
public boolean isEmpty(){
return top == 0;
}
public boolean isFull(){
return top == maxSize;
}
}