- yuxitong's blog
后!缀!表!达!式!
- 2023-9-27 13:12:45 @
后缀表达式的定义:
知周所众,我们平时用的计算表达式都是中缀表达式,数字在操作符的两端。蛋柿,后缀表达式是把操作符放在对应操作数之后。蓑衣,后缀表达式形式上相比中缀更加简略,因为它去除了括号,后缀表达式在编程计算中有很大作用,我们通常需要将人类好处理的中缀表达式转化为计算机好处理的后缀表达式。
实现表达式的思路
因为后缀表达式里,操作符在对应操作数的后面,所以,我们可以在遇到了操作符之后,把前面两个数取出来,再进行运算,只可惜我们的旧数字不能放在原神启动本的地方,而只从一段弹出和读入的数据结构,栈可以轻松实现
最终代码
//顶级垃圾程序
//A very bad program
#include <bits/stdc++.h>
using namespace std;
string s;
stack<int> stk;
int num1, num2;
/*
void print(int n){
if (n == 1) cout << num1 << " " << num2 << endl;
else if (n == 2) cout << "num1 + num2:" << num1 + num2 << endl;
else if (n == 3) cout << "num2 - num1:" << num2 - num1 << endl;
else if (n == 4) cout << "num1 * num2:" << num1 * num2 << endl;
else if (n == 5) cout << "num2 / num1:" << num2 / num1 << endl;
}
*/
int Postfix_Expression(string s){
for (int i = 0; i < s.length(); i++){
if (s[i] == '+'){
num1 = stk.top();
stk.pop();
num2 = stk.top();
stk.pop();
stk.push(num1 + num2);
}else if (s[i] == '-'){
num1 = stk.top();
stk.pop();
num2 = stk.top();
stk.pop();
stk.push(num2 - num1);
}else if (s[i] == '*'){
num1 = stk.top();
stk.pop();
num2 = stk.top();
stk.pop();
stk.push(num1 * num2);
}else if (s[i] == '/'){
num1 = stk.top();
stk.pop();
num2 = stk.top();
stk.pop();
stk.push(num2 / num1);
} else {
stk.push(s[i] - '0');
}
}
return stk.top();
}
int main(){
cin >> s;
cout << Postfix_Expression(s) << endl;
return 0;
}
样例:
输入样例1:
235*+453-*-
输出样例1:
9
解释:
235*+453-*-的中缀表达式为:
2+3*5-4*(5-3)
只可惜,目前这个代码只可以处理10以内的运算,所以并不完整,蛋柿如果后面有更好的代码,我一定会发出来的。
没想到已经有人编出来了qwq: