栈的应用之求解算术表达式

以前是怎么处理算术表达式的?好像都是自己瞎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
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值