题目设计一个程序实现基于二叉树表示的算术表达式的操作.docVIP

题目设计一个程序实现基于二叉树表示的算术表达式的操作.doc

  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文档。上传文档
查看更多
题目:设计一个程序实现基于二叉树表示的算术表达式的操作。 一、 需求分析 1、以二叉树为基本模型,构建了表达式二叉树。算术表达式的合法输入数据包括变量(,a~z)、常量(0-9)和二元运算符(+,-,*,/,^(乘幂)),一元运算符(sin, cos,tan)。演示程序以人机对话的方式执行,即在计算机上显示提示信息后,由用户在键盘上输入对应的数据或命令,程序将执行相应的操作并显示下一步信息。表达式的输出主要是用带括号的中缀表示式输出调用函数InorderExp( ExpTree E, Status ( * Visit )( ExpTree e ) ); 2、 程序的目的实现算术表达式在计算机里的树形存储,实现基本的运算(+,-,*,/,^(乘幂))sin,cos,tan),求偏导,常数合并。 3、 测试数据( 附后 )。 提供两种方式的测试:一种是自动测试,即程序调用test文件夹data.txt文件里的测试数据,另一种方式是手动测试,即按程序提示一步一步输入测试。 除了满足要求的0; a; -91; +a*bc; +*5^x2*8x; +++*3^x3*2^x2x6,还有几十组数据测试。 每当输入一个表达式后,程序提示用户赋值,再对表达式求值。为了方便用户,我在程序中用数组保存着一些测试数据,以供测试用。 二、概要设计 1.以字符串保存输入的字符序列。 2.提示用户赋值的同时将数据取出建立二叉树。 3.用后根遍历的次序用递归函数对表达式求值,求值时进行相应的转化,将运算数的字符形式转换成整数形式。 4.用中缀表达式输出表达式时,适当添加括号,以正确反映运算的优先次序。 5.抽象数据类型的定义: 1)、存放表达式的结构类型,是以二叉树为基本原型。 typedef enum{ OPER, VAR, ORD }ElemTag;//运算符,变量,常量 typedef struct ExpNode { ElemTag tag; //标记 union{ char expr[4]; //存放运算符名 struct{ char var; //存放变量名 int val; //存放变量的值,初始值为0 }vary; //存放变量 int ordina; //存放常量值 }; struct ExpNode *lchild, *rchild; /* 左右孩子指针 */ } *ExpTree; /* 二叉树的二叉链表存储表示 */ 基本操作: int Random( int nMin, int nMax ); //返回nMin到nMax之间的随机数 void FindVary( char * c, char * e ); //找出表达式中的变量 Status ArrayCreateExp( ExpTree E, char *ch, int i ); //从ch数组中读取字符串,构造表达式 void CreateExp( ExpTree E, char *ch, int i ) ; //Status InputCreateExp( ExpTree E ); //从键盘先序输入来构造表达式树T Status Visit( ExpTree e ); //输出e的内容 void InorderExp( ExpTree E, Status ( * Visit )( ExpTree e ) ); //输出中序表达式用带括号的中缀表示式输出 Status Assign( ExpTree E, char v, float c ) ; //对表达式内的所有v,赋值c float Value( ExpTree E ); //计算表达式的值 ExpTree Compound( char p, ExpTree e1, ExpTree e2 ); //5.构造一个新的复合表达式(E1)P(E2) Status Diff( ExpTree E, char V ); //求表达式E对变量V的导数 void MergeConst( ExpTree E ); //合并表达式种所有常数运算 Status PreOrderTraverse( ExpTree E, Status ( * Visit )( ExpTree e ) ); //波兰式输出 Status PostOrderTraverse( ExpTree E, Status ( * Visit )( ExpTree e ) ); //逆波兰式输出 2)、队列 typedef char QElemType; typedef struct QNode { QElemType data; struct QNode *next; }QNod

文档评论(0)

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

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

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档