栈的应用-后缀表达式求值
- 算法思想:从左往右依次扫描表达式每一项,若该项是操作数,则压入栈
若是操作符则连续退出两个栈顶元素,进行运算,结果加入栈中;
扫描完成后栈顶元素就是后缀表达式的值
//后缀表达式求值 注意后缀表达式没有括号
/*
输入例子:1567-*+21/- (对应的中缀表达式是:1+5*(6-7)-2/1)
输出例子:-6
*/
#include <iostream>
#include <cstring>
#include <algorithm>
#include <stack>
using namespace std;
int fun(string s)
{
stack<int> stk;
for(auto c:s)
{
if(c >= '0' && c <= '9')
stk.push(c - '0');
else
{
int a = stk.top();
stk.pop();
int b = stk.top();
stk.pop();
if(c == '+')
stk.push(a+b);
else if(c == '-')
stk.push(a-b);
else if(c == '*')
stk.push(a*b);
else if(c == '/')
stk.push(a/b);
}
}
return stk.top();
}
int main()
{
string s;
cin >> s;
cout << fun(s);
return 0;
}