实验4 表达树.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验4 表达树

实验4 表达树 目标 利用链式树结构,创建表达树的具体实现 开发一个逻辑表达树的实现,用它实现模拟一个简单的逻辑电路 创建一个表达树的复制 分析在表达树的实现中如何进行前序、中序、后序遮历 概述 通常按线性格式书写一个算术表达式,但在计算的时候,需要把它们作为一个分层实体。例如,在计算算术表达式: (1+3)*(6-4), 首先计算1加3,然后是6减去4 。最后将这两个中间结果相乘,得到表达式的值。在执行这些计算时,我们潜意识地将这些运算分层,乘法运算建立在加法和减法运算的基础上。可以利用下面这个二叉树来清楚地表示这个层次。这样的树就叫做表达树,如下图所示。 表达树 数据项: 在表达树中,每一个节点不是一个算术运算符就是一个数值。 结构: 节点构成树,树中每一个包含算术运算符的节点都有一对子节点,每个子节点都是一棵描述运算符操作数的子树的根。包含数值的节点没有子节点。 运算 ExprTree( ) 要求:无 结果:创建一棵空表达树。 ExprTree( ) 要求:无 结果:释放(free)用来存储表达树的空间。 void uild( ) 要求:无 结果:从键盘以前缀的形式读人一个算术表达式,并且建立相应的表达树。 void xpression( ) 要求:无 结果:以带完全括弧的中缀形式输出相应的算术表达式。 float valuate( ) 要求:表达树非空。 结果:返回相应的算术表达式的值。 void lear( ) 要求:无 结果:删除表达树中的所有数据项。 void howStructure( ) 要求:无 结果:从左(根)向右(叶)输出带有枝干的表达树,也就是说,将树从常规的方向逆时针旋转90度输出。如果树是空的,则输出“ Empty tree ”。这个运算只是为了测的调试目的。 假设算术表达式只仅含一位的非负整数算术运算符加、减、乘、除。 通常,我们以中缀形式书写算术表达式,即将每个运算符放在它的两个操作数之间: ( 1 + 3 ) * ( 6 - 4 ) 在这个实验中,我们根据一个前缀算术表达式来创建一棵表达树,在前缀形式中,每个运算符紧挨它的操作数放在前边。上面的表达式用前缀的形式表示为 * + 1 3 - 6 4 当我们从左向右处理前缀表达式时,按照定义,我们会将每个运算符与紧跟着它的操作数进行匹配。如果我们预先知道每个运算符拥有的操作数个数,就可以用下面的递归过程来建立相应的表达树。 读取下一个算术运算符或者数值。 创建一个包含运算符或者数值的节点。 if 节点包含运算符 then 递归建立与运算符的操作数对应的子树。 else 节点是叶子节点。 如果利用这个过程处理算术表达式: * + 1 3 - 6 4则创建出如下图所示的表达树结构 在处理这个算术表达式时,我们假设所有的数是一位的、非负整数,这样,所有的数值都用一个字符表示。如果我们想让这个过程一般化,能处理多位数,就必须在表达式中使用分界符来分隔数字。 实验4 作业单 姓名小组 日期 请在教师布置的练习时应的已布置列上打一个钩(√)。在提交这个实验的一组材料前面附上这个作业单。 练习 已布置:打钩或 列出练习编号 已完成 实验前练习 √ √ 过渡练习 √ √ 实验中练习1 √ √ 实验中练习2 √ √ 实验中练习3 √ √ 实验后练习1 实验后练习2 总计 实验4 实验前练习 姓名小组 日期 在这个练习中,我们将用递归函数实现表达树中的运算。 第一步:利用链接树结构实现表达树中的运算。假设算术表达式只包含一位的非负整数(‘0 ’.. ‘9 ’)以及四个基本的算术运算符(‘+’、‘-’、‘*’和‘/’)。并且假设每个算术表达式都是以前缀的形式从键盘输人, 所有的字符都在一行上。利用在前面的实验中开发的线性结构, 链接树结构实现需要使用两个类:一个是树的节点结构(ExprTreeNode),另一个是总体树结构(ExptrTree)。树的每个节点都应包含一个字符(dataItem)和一对指向两个子节点的指针(left和right)。还应该包括一个指向根节点(root)的指针。在文件exptree.h中定义表达树的类型。 在文件exprtree.cpp中实现ShowStructured运算。 ExprTreeNode { char dataItem; ExprTreeNode *left, *right; }; void InitExprTreeNode ( ExprTreeNode *root, char elem, struct ExprTreeNode *leftPtr, struct ExprTr

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档