栈的应用:逻辑表达式求值(C++)

1、不需要括号的后缀表达式(逆波兰表达式)

后缀的意思是所有的符号都是在要运算的数字后面出现,这样就没有了括号。
例如:9+(3-1)*3+10/2,其后缀表达式为9 3 1 - 3 * + 10 2 / +

1.1 中缀表达式转后缀表达式

先初始化一个空栈Q,用来存储操作符。从左到右遍历中缀表达式的数字和符号,若是数字就输出,即成为后缀表达式的一部分;若是符号,则判断其与栈顶符号的优先级,是右括号或优先级低于栈顶符号,则栈顶元素依次出栈并输出,并将当前符号进栈,一直到最终输出后缀表达式为止。

1.2 利用后缀表达式进行计算

先初始化一个空栈P,用来存储要运算的数字。从左到右遍历后缀表达式的数字和符号,若是数字就进栈;若是符号,则将栈顶的两个数字出栈,进行计算,运算结果进栈,一直到最终获得计算结果。

2、 逻辑表达式求值

输入:一个字符串(中缀表达式)
输出:逻辑表达式的值,0或1
规则:利用两个栈,一个存储数字,一个存储运算符。

对于两个相继出现的操作符θ1和θ2 有三种关系:大于、等于和小于。由此可以列出 ! & | ( ) #之间的优先级。如下表:

     !     &     |     (     ) 
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值