【数据结构】使用栈实现的算符优先算法

这个例子是书上P52页栈应用举例的其中一个算法

算法的简单描述

为了实现这个算法,我们需要两个栈,一个是符号栈OPTR,另一个是数据栈OPND,算符预先设定好优先级,当解析到数字的时候,将其入数据栈

当解析到运算符的时候,比较它和之前一个运算符的优先级,如果比之前的优先级高的话,先入栈,如果和之前的元素优先级一样的话,就可以将括号去掉了(因为这个时候已经算完了),如果比之前的优先级低的话,那么就需要将两个运算数据出栈,运算符也出栈,进行运算,然后将运算结果入栈,并且保留这个运算符继续进行比较。

这里有一个小细节需要注意,就是,先出栈的是第二个运算数,后出栈的是第一个运算数,如果没有注意到的话做减法的时候符号是相反的。

如果符号栈OPTR的栈底元素是#,并且当前元素也是#的话,表示解析结束

算符优先级表如下所示

代码实现

我是用查表的方式来检查两个算符的优先级关系的

用1表示theta1>theta2;用-1表示theta1<theta2;用2表示语法错误


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值