兄弟篇 中缀转后缀 + 后缀计算
后缀转中缀:
eg: 652 3+8*+3+* >>> 6*((5+(2+3)*8)+3)
实现:
·读入表达式,若是数字压入栈;
·若是运算符,则弹出栈顶的两个元素a、b进行 b operator a,后再压入栈中即可;
·循环至最后,返回栈顶元素,即为所需要的后缀表达式。
时间复杂度: O(N)
代码如下:
//后缀转中缀
string postfixTOinfix(const string s)
{
string a, b;
stack
mark;
for (size_t i = 0; i < s.length(); ++i) {
if (isalnum(s[i]))
mark.push(to_string(s[i] - '0'));
else
switch (s[i])
{
case '+':
a = mark.top(); mark.pop(); b = mark.top(); mark.pop();
mark.push("(" + b + "+" + a + ")");
break;
case ' - ':
a = mark.top(); mark.pop(); b = mark.top(); mark.pop();
mark.push("(" + b + "-" + a + ")");
break;
case '*': a = mark.top(); mark.pop(); b = mark.top(); mark.pop();
mark.push(b + "*" + a);
break;
case ' / ': a = mark.top(); mark.pop(); b = mark.top(); mark.pop();
mark.push(b + "/" + a);
break;
default:
break;
}
}
return mark.top();
}