public int nextGreaterElement(String str) {
Stack<Object> stackNum = new Stack<>();
Stack<Object> stackOpr = new Stack<>();
List<Object> list = getList(str);
for (int i = 0; i < list.size(); i++) {
if (i % 2 == 0) {
stackNum.push(list.get(i));
} else {
if (stackOpr.empty() || compareOpr(stackOpr.peek(), list.get(i), stackOpr)) {
stackOpr.push(list.get(i));
} else {
int pop = (int) stackNum.pop();
int pop1 = (int) stackNum.pop();
Character opr2 = (Character) stackOpr.pop();
int cpu = Cpu(pop, pop1, opr2);
stackNum.push(cpu);
i--;
}
}
}
while (stackOpr.size() != 0) {
int pop = (int) stackNum.pop();
int pop1 = (int) stackNum.pop();
Character opr2 = (Character) stackOpr.pop();
int cpu = Cpu(pop, pop1, opr2);
stackNum.push(cpu);
}
return (int) stackNum.pop();
}
public int Cpu(int pop1, int pop, Character opr2) {
switch (opr2) {
case '+':
return pop + pop1;
case '-':
return pop - pop1;
case '*':
return pop * pop1;
default:
return pop / pop1;
}
}
/**
* 比较优先级
*/
public boolean compareOpr(Object oldOpr, Object newOpr, Stack stack) {
if ('+' == (Character) oldOpr || '-' == (Character) oldOpr) {
return true;
}
return false;
}
/**
* 获取返回数组
*/
public List getList(String str) {
char[] chars = str.toCharArray();
ArrayList<Object> list = new ArrayList<>();
for (int i = 0; i < chars.length; i++) {
if ('+' == chars[i] || '-' == chars[i] || '*' == chars[i] || '/' == chars[i]) {
list.add(chars[i]);
} else {
list.add(chars[i] - 48);
}
}
return list;
}
出入栈实现四则运算
最新推荐文章于 2024-07-11 15:49:26 发布