步骤:
1).初始化两个栈:运算符栈s1和存储中间结果的栈s2;
2).从左到右扫描中缀表达式;
3).遇到操作数时,将其压入s2;
4).遇到运算符时,比较其与s1栈顶运算符的优先级;
1.如果s1为空,或栈顶运算符为左括号"(",则直接将此运算符入栈
2.否则,若优先级比栈顶运算符的高,也将运算符压入s1
3.否则,将s1栈顶的运算符弹出并压入s2中,再次转到(4-1)与s1中新的栈顶运算符相比较;
5)遇到括号时:
1如果时左括号"(",则直接压入s1
2如果是右括号")",则依次弹出s1栈顶的运算符,并压入s2,直到遇到左括号为止,此时将这一对括号丢弃
6)重复2至5,直到表达式的最右边
7)将s1中剩余的运算符依次弹出并压入s2
8)依次弹出s2中的元素并输出,结果的逆序为中缀表达式对应的后缀表达式
例如:将1+((2+3)*4)-5转换为后缀表达式"123+4*+5-"
//将中缀表达式转为后缀表达式
#include <stdio.h>
#include <stdbool.h>
#define MAXSIZE 20
struct Stack
{
int top;
char arr[MAXSIZE];
}stack1,stack2,temp; //

本文详细介绍了如何通过栈操作将中缀表达式转换为后缀表达式的方法,涉及操作数处理、运算符优先级比较和括号处理等步骤,并附有C++代码实例。通过阅读,读者可以理解中缀到后缀表达式的转换过程。

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



