用栈实现后缀表达式转中缀表达式
时间: 2023-10-09 16:09:13 浏览: 52
后缀表达式转中缀表达式的算法是基于栈的。具体实现步骤如下:
1. 从左到右扫描后缀表达式的每一个字符。
2. 如果是数字或者变量,则将其压入栈中。
3. 如果是运算符,则从栈中弹出两个元素,拼接成中缀表达式的一部分,并将拼接后的表达式压入栈中。
4. 扫描完整个后缀表达式后,栈中只剩下一个元素,即为中缀表达式。
具体的实现代码如下:
```
#include <iostream>
#include <stack>
#include <string>
using namespace std;
bool isOperator(char c) {
return c == '+' || c == '-' || c == '*' || c == '/';
}
string postfixToInfix(string postfix) {
stack<string> s;
for (char c : postfix) {
if (isOperator(c)) {
string op1 = s.top();
s.pop();
string op2 = s.top();
s.pop();
s.push("(" + op2 + " " + c + " " + op1 + ")");
} else {
s.push(string(1, c));
}
}
return s.top();
}
int main() {
string postfix = "23+4*";
string infix = postfixToInfix(postfix);
cout << infix << endl;
return 0;
}
```
上述代码中,isOperator() 函数用于判断一个字符是否为运算符。postfixToInfix() 函数实现了将后缀表达式转化为中缀表达式的算法。在函数中,定义了一个栈 s 用于保存中间结果。对于每一个字符:
- 如果是运算符,则从栈中弹出两个元素,并将它们拼接成中缀表达式的一部分,然后将拼接后的表达式压入栈中;
- 如果是数字或者变量,则将其压入栈中。
最终,栈中只剩下一个元素,即为中缀表达式。