算术中缀表达式与后缀表达式
后缀表达式有利于计算机进行计算,中缀表达式有利于人们阅读与表达。
中缀表达式:a+b*c+(d*e+f)*g
对应的后缀表达式:abc*+de*f+g*+
将中缀表达式转化成后缀表达式
需要利用栈这种数据结构才能完成这一转化,在此用队列来存储后缀表达式:
中缀表达式的入栈规则:
1) 遇到操作数,直接输出到队列;
2)遇到操作符,输出到栈中,这个栈是一个操作符严格单调递增栈;(*,/ > +,-)
3)遇到 '(' 左括号,直接输出到栈;
4)遇到 ')' 右括号,则将栈中的操作符都弹出到队列至'(' 左括号停止;
5)若读到中缀表达式末尾,将栈中所有操作符弹出至队列中;
/**
* 将中缀表达式转化成后缀表达式并存储在队列中返回
* @param str
* @return
*/
public static Queue<Character> infixToSuffix(String str) {
Queue<Character> queue = new LinkedList<Character>();
Stack<Character> stack = new Stack<>();//操作符优先级严格单调递增栈
for(char c : str.toCharArray()) {
if(c>='0' && c<='9') queue.offer(c);
else if(c=='(') stack.push(c);
else if(c==')') {
char curOP=stack.pop();
while(!stack.isEmpty() && curOP!='(') {
queue.offer(curOP);
curOP=stack.pop();
}
}
else if(c>='*' && c<='/') {
while(!stack.isEmpty() && stack.peek()!='(' && compare(c,stack.peek())==false) {
queue.add(stack.pop());
}
stack.push(c);
}
}
while(!stack.isEmpty()) queue.add(stack.pop());
return queue;
}

本文介绍了如何将算术中缀表达式转化为后缀表达式,以及如何利用后缀表达式进行计算。通过栈的数据结构实现,遵循特定的入栈规则,包括处理操作数、操作符、括号的情况。同时,文章讲解了使用后缀表达式求值的过程,主要涉及栈的操作和运算顺序。
最低0.47元/天 解锁文章
1001

被折叠的 条评论
为什么被折叠?



