表达式类型的实现.doc

表达式类型的实现.doc

ID:55901884

大小:646.03 KB

页数:17页

时间:2020-06-13

表达式类型的实现.doc_第1页
表达式类型的实现.doc_第2页
表达式类型的实现.doc_第3页
表达式类型的实现.doc_第4页
表达式类型的实现.doc_第5页
资源描述:

《表达式类型的实现.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、**理工大学数据结构课程设计报告题目:表达式类型的实现院(系):计算机工程学院学生姓名:**班级:计算111学号:2011070**起迄日期:2012.7.8——2012.7.19指导教师:***一、需求分析1.问题描述:本程序通过输入前缀表达式建立一颗二叉树,通过中序遍历建立好的二叉树输出带括号的中缀表达式。然后中序遍历二叉树对表达式中的未知数x进行赋值。通过后序遍历二叉树计算表达式的值。根据两颗二叉树和输入的运算符构造复合表达式。另外,通过中序遍历二叉树对表达式进行化简。2.基本功能⑴以字符序列的形式输入语法正确的前缀表示式并构成表达式E⑵用带括号的中缀表达式输

2、出表达式E⑶实现对变量x的赋值,变量初始值为0⑷对算术表达式求值⑸构造新的复合表达式(E1)P(E2)⑹对表达式进行化简3.输入输出本程序运算数的输入输出局限于无符号整型数据,运算符的输入输出包括“+、-、*、/、^”二、概要设计1.设计思路:本程序以字符序列的形式输入语法正确的前缀表达式,在输入表达式的过程中判断输入的字符是运算数还是运算符并将其保存到树节点中相应的位置,表达式输入结束的同时也就构成一颗二叉树。根据建立好的二叉树,可以采用中序遍历二叉树的方法输出正常顺序的表达式。在中序遍历二叉树时,访问存放运算符的结点时要判断其与双亲结点中运算符的优先级关系来判断

3、是否要添加括号。在给表达式中的未知数x赋值时,本程序采用的是中序遍历二叉树的方法,遇到存放x的结点就将数值赋值给其数据域的变量。然后通过后序遍历二叉树的方法就行表达式求值。构造复合表达式可以分别建立两颗二叉树,然后将这两颗二叉树作为新申请的运算符结点的左右孩子结点。在化简表达式时,先判断运算符结点的两个孩子节点是不是运算数结点(不包括x结点)。如果两个孩子节点是运算数结点,就计算出这个子表达式的值并用其代替这个运算符结点。2.数据结构设计:抽象数据类型二叉树的定义如下:ADTBinaryTree{数据对象D:D是具有相同特性的数据元素的集合。数据关系R:若D=φ,则

4、R=φ,称BinaryTree为空二叉树;若D≠φ,则R={H},H是如下二元关系:(1)在D中存在唯一的称为根的数据元素root,它在关系H下无前驱;(2)若D-{root}≠φ,则存在D_{root}={D1,Dr},且D1∩Dr=φ;(3)若D1≠φ,则D1中存在唯一的元素X1,∈H,且存在D1上的关系H1∈H;若Dr≠φ,则Dr中存在唯一的元素Xr,∈H,且存在Dr上的关系Hr∈H;H={,,H1,Hr};(4)(D1,{H1})是一颗符合本定义的二叉树,称为根的左子树,(Dr,{Hr}

5、)是一颗符合本定义的二叉树,称为根的右子树。基本操作:CreatBitTree(BitTreeT,BitTreep);操作结果:根据前缀表达式先序构造二叉树。InOrderTraverse(BitTreeT)初始条件:二叉树T存在。操作结果:中序遍历二叉树T,输出每个结点的数据域且仅一次。InOrder(BitTreeT,int*num);初始条件:二叉树T存在且存在x结点。操作结果:将num赋值给x。PostOrderTraverse(BitTreeT);初始条件:二叉树T。操作结果:后序遍历二叉树求表达式的值。}ADTBinaryTree3.软件结构设计:Bit

6、TreeReadExpr(BitTreeT);BitTreeWriteExpr(BitTreeT)BitTreeAssign(BitTreeT);BitTreeValue(BitTreeT);Intmain()Voidmenu()voidCompoundExpr(BitTreeT);voidMergeConstruction(BitTreeT);退出!三、详细设计1.定义程序中所有用到的数据及其数据结构,及其基本操作的实现;typedefstructBitNode{chardata;intopnd;structBitNode*lchild;structBitNode

7、*rchild;structBitNode*parent;}BitNode,*BitTree;2.主函数和其他函数的伪码算法;(1)主函数:intmain(){BitTreeT=NULL;T=(BitTree)malloc(sizeof(BitNode));if(T==NULL){printf("有错");}else{flag=0;menu(T);}return0;}(2)菜单函数:voidmenu(BitTreeT){intsel=0;do{printf("");printf("(1)以字符序列的形式输入语法正确的前缀表示式并构造表达式");p

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。