题干
假设表达式由单字母变量和双目四则运算算符构成试写一个算法,将一个通常书写形式且书写正确的表达式转换为逆波兰式。例如输入a*(b+c)/d+e,则输出abc+*d/e+
判断是否是字符
if (str[i] >= 'a' && str[i] <= 'z') {
cout << str[i];
}
不是数,是空栈
else if (isEmpty(sqStack)) {
push(sqStack, str[i]);
}
是左括号(
else if (str[i] == '(') {
push(sqStack, str[i]);
}
是右括号
else if (str[i] == ')') {
while (true) {
char ch = getTop(sqStack);
if (ch == '(') {
pop(sqStack);
break;
} else {
pop(sqStack);
cout << ch;
}
}
}
遇到运算符
else if (isOperator(str[i])) {
while (true) {
//如果栈为空, 入栈
if (isEmpty(sqStack)) {
push(sqStack, str[i]);
break;
}
// 比较当前运算符和栈顶运算符的优先级
char ch = getTop(sqStack);
// 如果当前大于栈顶元素优先级,入栈
if (priority(str[i]) > priority(ch)) {
push(sqStack, str[i]);
break;
}
// 否则就出栈
else {
pop(sqStack);
cout << ch;
}
}
}