package com.daelly.algorithm.stack.express;
import java.util.Stack;
/**
* 后缀表达式转中缀表达式
* 使用数据结构:栈
* 思路:
* 碰到非操作符就压入栈
* 配到操作符就取出栈顶两个元素 x、y 执行 (x op y)将这个结果入栈
* 追后即可得到结果
* 缺陷:会有很多无用的(),但结果并不影响表达式的正确性。
* @author daelly
*
*/
public class Postfix2InfixExp {
public static String postfix2infix(String exp) {
Stack<String> stack = new Stack<>();
for(int i=0;i<exp.length();i++) {
char ch = exp.charAt(i);
if(isOperator(ch)) {
String temp = '(' + stack.pop() + ch + stack.pop() + ')';
stack.push(temp);
} else {
stack.push(ch+"");
}
}
return stack.pop();
}
/**
* 是否是操作符
* @param ch
* @return
*/
public static boolean isOperator(char ch) {
return ch=='+' || ch=='-' || ch=='*' || ch=='/' || ch=='(' || ch==')';
}
public static void main(String[] args) {
String exp = "abc*+";
System.out.println(postfix2infix(exp));
exp = "abc+*";
System.out.println(postfix2infix(exp));
exp = "abc*+defg*+h-*-";
System.out.println(postfix2infix(exp));
}
}
后缀表达式转中缀表达式
最新推荐文章于 2022-05-17 14:21:20 发布