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