对象栈和运算栈

表达式3*2^(4+2*2-6*3)-5求值过程中当扫描到6时,对象栈和运算符栈为(),其中^为乘幂

  • A.3,2,4,1,1;(*^(+*-
  • B.3,2,8;(*^-
  • C.3,2,4,2,2;(*^(-
  • D.3,2,8;*^(-

链接:https://www.nowcoder.com/questionTerminal/3a42f706132940218436b70cc9d32227
来源:牛客网
 

一、准备两个栈:操作数栈s1,运算符栈s2。

二、从【左至右】扫描表达式:3*2^(4+2*2-6*3)-5;

       遵循的原则是: 遇到操作数入s1栈;若遇到运算符c,则需要与s2的栈顶 字符c2进行优先级比较;

                《1》若c > c2,则c入栈;

                《2》若c < c2,则c2退栈,并将s1栈顶的两个元素退栈与操作符一起运算,将结果入s1栈;

      (1)操作数3,入栈s1;

      (2)运算符*,入栈s2;

      (3)操作数2,入栈s1;

      (4)运算符^ ,入栈s2;(理由是:^的优先级 高于 *的优先级)

      (5)运算符(,直接入s2;

      (6)操作数4,入栈s1;

      (7)运算符+,入栈s2;(理由是:( 后面的运算符直接入栈)

      (8)...数2,入栈s1;

      (9)...符*,入栈s2;(理由是:*的优先级 高于 +的优先级)

      (10)...数2,入栈s1;

      (11)...符 -,(由于 -的优先级低于*)s2的栈顶字符 * 出栈,并完成2*2=4的运算,将结果4存入s1中;---s1:3,2,4,4;

                             (由于 -的优先级低于+)s2的栈顶字符+出栈,并完成4+4=8的运算,将结果8存入s1中;---s1:3,2,8;

                              此时,- 成为了(后的运算符,则直接入栈s2;---s2:*^(-;

       (12)...数6;



对象栈:3,2,8;算符栈:*,^,(,- 。

具体过程:

第一次:对象栈:3;算符栈:*;

第二次:对象栈:3,2;算符栈:*,^,(;

第三次:对象栈:3,2,4;算符栈:*,^,(,+;

第四次:对象栈:3,2,4,2;算符栈:*,^,(,+,*;

第五次:对象栈:3,2,4,4;算符栈:*,^,(,+;

第六次(扫描到6):对象栈:3,2,8;算符栈:*,^,(,- 

  • 18
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值