| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
Reworld,下班在家制作游戏,1500万奖金等你拿千里之行 始于足下
共有 386 人关注过本帖
标题:关于表达式求值 问题
只看楼主 加入收藏
a15022606145
Rank: 1
等 级:新手上路
帖 子:75
专家分:0
注 册:2015-7-11
  问题点数:0  回复次数:1   
关于表达式求值 问题
我已经提取出来了  比如  “123.321+123*(213+3/4)”
   数字为  123.321  123  213  213  3  4
   操作符为 #       +     *    (  +   /  )
原来看了一个视频 第一位设置#  不过我忘记了 后面怎么做  听说是  3/4 存入   3的位置  但是4呢 ???  我这个定义的是一个double数组  难道要我改成链表??
搜索更多相关主题的帖子: 表达式求值 定义 double 数组 链表 
2018-08-28 17:24
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:城市猎人
威 望:9
帖 子:1069
专家分:5099
注 册:2015-10-27
  得分:0 
表达式求值使用的是“堆栈【先入后出】”的相关知识。
------------------------------
我以你给的这个表达式为例,简单说一下计算流程。
1.读入数字123.321,压入栈。
2.读入操作符+,压入栈。
3.读入数字123,压入栈。
4.读入操作符*,压入栈。
5.读入操作符(,压入栈。
6.读入数字213,压入栈。
7.读入操作符+,压入栈。
8.读入数字3,压入栈。
9.读入操作符/,压入栈。
10.读入数字4,出栈一个操作符/,一个数字3,运算3/4得到0.75,将0.75压入栈。
11.读入操作符),出栈一个数字0.75,一个操作符+,一个数字213,运算213+0.75得到213.75,出栈一个操作符(,将213.75压入栈。
12.表达式已读完,出栈一个数字213.75,出栈操作符*,出栈一个数字123,运算123*213.75得到45528.75,将45528.75压入栈。
13.表达式已读完,出栈一个数字45528.75,出栈操作符+,出栈数字123.321,运算123.321+75528.75得到45652.071,将45652.071压入栈。
14.表达式已读完,出栈一个数字45652.071,堆栈已空,计算结束。输出45652.071.

---------------------------------
遇到}])等右括号时,必须一直从堆栈里弹出数据计算,直到遇到与之匹配的左括号。
遇到乘除乘方等二级运算符夹在两个数字的中间时,应当直接计算,然后将运算结果入栈。
第一次遇到加减等一级运算符,第二次遇到一级运算符时则应当将堆栈里前一次的运算符和数字拿出来做计算,将结果和第二次遇到的一级运算符再入栈。

实现“堆栈”这个容器的时候既可以使用数组,也可以用链表。

φ(゜▽゜*)♪
2018-08-28 20:17
快速回复:关于表达式求值 问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.115454 second(s), 8 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved