2020年新编题目设计一个程序实现基于二叉树表示的算术表达式的操作名师资料

题目:设计一个程序实现基于二叉树表示的算术表达式的操作。一、需求分析1、以二叉树为基本模型,构建了表达式二叉树。算术表达式的合法输入数据包括变量(,a~z)、常量(0-9)和二元运算符(+,-,*,/,^(乘幂)),一元运算符(sin,cos,tan)。演示程序以人机对话的方式执行,即在计算机上显示提示信息后,由用户在键盘上输入对应的数据或命令,程序将执行相应的操作并显示下一步信息。表达式的输出主要是用带括号的中缀表示式输出调用函数InorderExp(ExpTreeE,Status(*Visit)(ExpTreee));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)、存放表达式的结构类型,是以二叉树为基本原型。typedefenum{OPER,VAR,ORD}ElemTag;//运算符,变量,常量typedefstructExpNode{ElemTagtag;//标记union{charexpr[4];//存放运算符名struct{charvar;//存放变量名intval;//存放变量的值,初始值为0}vary;//存放变量intordina;//存放常量值};structExpNode*lchild,*rchild;/*左右孩子指针*/}*ExpTree;/*二叉树的二叉链表存储表示*/基本操作:nMax);nMin,intintRandom(int---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---//返回nMin到nMax之间的随机数voidFindVary(char*c,char*e);//找出表达式中的变量StatusArrayCreateExp(ExpTreeE,char*ch,inti);//从ch数组中读取字符串,构造表达式voidCreateExp(ExpTreeE,char*ch,inti);//StatusInputCreateExp(ExpTreeE);//从键盘先序输入来构造表达式树TStatusVisit(ExpTreee);//输出e的内容voidInorderExp(ExpTreeE,Status(*Visit)(ExpTreee));//输出中序表达式用带括号的中缀表示式输出StatusAssign(ExpTreeE,charv,floatc);//对表达式内的所有v,赋值cfloatValue(ExpTreeE);//计算表达式的值ExpTreeCompound(charp,ExpTreee1,ExpTreee2);//5.构造一个新的复合表达式(E1)P(E2)StatusDiff(ExpTreeE,charV);//求表达式E对变量V的导数voidMergeConst(ExpTreeE);//合并表达式种所有常数运算StatusPreOrderTraverse(ExpTreeE,Status(*Visit)(ExpTreee));//波兰式输出StatusPostOrderTraverse(ExpTreeE,Status(*Visit)(ExpTreee));//逆波兰式输出2)、队列typedefcharQElemType;typedefstructQNode{QElemTypedata;structQNode*next;}QNode,*QuePtr;typedefstruct{QuePtrfront;QuePtrrear;}Queue;基本操作:StatusInitQueue(QueueQ);构造一个空队列//---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---StatusDestroyQueue(QueueQ);//销毁队列StatusQueueEmpty(QueueQ);//判空StatusEnQueue(QueueQ,QElemTypee);//插入元素e为Q的新的队尾元素StatusDeQueue(QueueQ,QElemTypee);//删除队头元素,用e返回其值,并返回OK,否则返回ERROR;3)、栈typedefstruct{SElemType*base;SElemType*top;intstacksize;}SqStack;基本操作:StatusInitStack(SqStackS);StatusStackEmpty(SqStackS);StatusPush(SqStackS,SElemTypee);StatusPop(SqStackS,SElemTypee);SElemTypeTop(SqStackS);6、主程序:voidmain(){while(1){接受命令处理命令;Switch(){case:1.以数组形式输入前缀表示式函数构造表达式.case:2.以字符序列输入前缀表示式函数构造表达...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

笔杆子文秘
机构认证
内容提供者

为您提供优质文档,供您参考!

确认删除?