以前是怎么处理算术表达式的?好像都是自己瞎YY的
最近数据结构学到栈的应用才发现,对于算术表达式有非常正规的处理方法 -- 栈处理
书上用的伪代码,于是我偷偷自己实现了该算法,发现书上其实是有bug的
书上的算术表达式没有考虑十位以上的数,即默认算术表达式中的数都是个位数。。。
于是自己加了数的处理
正文:
为什么算术表达式求值会用到栈?
算术表达式求值的难点在于,操作符的优先级!
那么,先看下面这张表:
这个表就很好的诠释了每个运算符之间的优先级
为什么+和+之间是>呢?
因为θ1的+在θ2的+的左边,算术表达式中乘除运算的优先级大于加减,而左边的运算符的优先级又大于右边。
而表中没有填的部分表示正确的算术表达式不可能出现的情况
【代码】
#define mem(a,x) memset(a,x,sizeof(a))
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const double PI = acos(-1.0);
const int inf = 0x3f3f3f3f;
stack<double>opnd;//操作数栈
stack<char>optr;//操作符栈
//初始化栈
void InitStack