四则运算的实现
中缀表达式转换为后缀表达式
- 具体步骤
1 |
1.初始化两个栈:运算符栈s1和结果栈s2; |
2 |
2. 从左往右扫描中缀表达式; |
3 |
3. 遇到操作数时,将其压入s2; |
4 |
4. 遇到运算符时,比较其与s1栈顶运算符的优先级: |
5 |
4.1 如果s1为空,或栈顶运算符为左括号“(”,则直接将此运算符压入 s1; |
6 |
4.2 若当前元素比栈顶元素优先级高,则压入s1; |
7 |
4.3 否则,将s1栈顶元素弹出并压入s2,再次转到(1)与s1的栈顶元素相比较 |
8 |
5. 到括号时:(1)如果是左括号"(",则直接压入s1 (2)如果是右括号")",则依次弹出s1栈顶的运算符,并压入s2,直到遇到左括号为止,此时将这一对括号丢弃6.重复步骤2至5,直到表达式的最右边. |
9 |
6. 将s1中剩余的运算符依次弹出并压入s2 |
10 |
7. 依次弹出s2中的元素并输出,结果的逆序即为中缀表达式对应的后缀表达式 |
#include <bits/stdc++.h>
using namespace std;
struct node {
double num;
char op;
bool flag;
};
stack <node> s;
queue <node> q;
map <char,int> mp;
string str;
void change() {
node temp;
for(int i=0; i<str.length();) {
if(str[i]>='0'&&str[i]<='9'&&i<str.length()||str[i]=='.') {
temp.num=0;
temp.flag=1;
while(str[i]>='0'&&str[i