博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
对象栈和运算栈
阅读量:4116 次
发布时间:2019-05-25

本文共 867 字,大约阅读时间需要 2 分钟。

表达式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;*^(-

链接:

来源:牛客网
 

一、准备两个栈:操作数栈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;算符栈:*,^,(,- 

转载地址:http://hqypi.baihongyu.com/

你可能感兴趣的文章
实例区别BeanFactory和FactoryBean
查看>>
Spring后置处理器BeanPostProcessor的应用
查看>>
Spring框架的ImportSelector到底可以干嘛
查看>>
Mysql中下划线问题
查看>>
微信小程序中使用npm过程中提示:npm WARN saveError ENOENT: no such file or directory
查看>>
Xcode 11 报错,提示libstdc++.6 缺失,解决方案
查看>>
idea的安装以及简单使用
查看>>
Windows mysql 安装
查看>>
python循环语句与C语言的区别
查看>>
Vue项目中使用img图片和background背景图的使用方法
查看>>
vue 项目中图片选择路径位置static 或 assets区别
查看>>
vue项目打包后无法运行报错空白页面
查看>>
Vue 解决部署到服务器后或者build之后Element UI图标不显示问题(404错误)
查看>>
element-ui全局自定义主题
查看>>
facebook库runtime.js
查看>>
vue2.* 中 使用socket.io
查看>>
openlayers安装引用
查看>>
js报错显示subString/subStr is not a function
查看>>
高德地图js API实现鼠标悬浮于点标记时弹出信息窗体显示详情,点击点标记放大地图操作
查看>>
初始化VUE项目报错
查看>>