中缀表达式转换为后缀表达式(其中一种写法)为:
/**
* 将中缀表达式转换为后缀表达式
* @param s 中缀表达式
* @return String字符串 后缀表达式
*/
private String postfix(String s){
// 后缀表达式
StringBuilder sb = new StringBuilder();
Stack<Character> ops = new Stack<>();
int i = 0;
while(i < s.length()){
char c = s.charAt(i++);
if (c == '(' || c == '+' || c == '-' || c == '*'){
// 加一个空格是为了将操作数之间隔开
sb.append(" ");
pushOP(sb,c,ops);
continue;
}
if (c == ')'){
// 弹出操作符直到(
while(ops.peek() != '('){
sb.append(ops.pop());
}
ops.pop();
continue;
}
sb.append(c);
}
// 弹出栈中元素
while(!ops.isEmpty()){
sb.append(ops.pop());
}
return sb.toString();
}
private void pushOP(StringBuilder sb,char op,Stack<Character> ops){
// 栈空,或者栈顶元素为(,操作符直接放入栈中
if (ops.isEmpty() || ops.peek() == '(' || op == '('){
ops.add(op);
return;
}
char c = ops.peek();
// 栈顶操作符的优先级低于当前操作符,直接压入栈中
if (c != '*' && op == '*'){
ops.add(op);
return;
}
// 否则,弹出栈顶元素,继续比较
c = ops.pop();
sb.append(c);
pushOP(sb,op,ops);
}
排序
-
排序时有哪些场景是为了稳定性的?
-
各个排序的算法使用的场景?
-
说说排序算法的分类?你对排序算法如何理解的?
树
测试:
对于下列关键字序列,不可能构成某二叉排序树中一条查找路径的序列是?
A 90,17,83,24,85,71
B 90,18,89,32,86,33
C 19,87,75,27,34,36
D 10,23,69,66,31,32