达式类型的实现.docVIP

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

**理工大学 数据结构课程设计报告 题目: 表达式类型的实现 院(系): 计算机工程学院 学生姓名: ** 班级: 计算111 学号: 2011070** 起迄日期: 2012.7.8——2012.7.19 指导教师: *** 一、需求分析 1.问题描述: 本程序通过输入前缀表达式建立一颗二叉树,通过中序遍历建立好的二叉树输出带括号的中缀表达式。然后中序遍历二叉树对表达式中的未知数x进行赋值。通过后序遍历二叉树计算表达式的值。根据两颗二叉树和输入的运算符构造复合表达式。另外,通过中序遍历二叉树对表达式进行化简。 2.基本功能 ⑴以字符序列的形式输入语法正确的前缀表示式并构成表达式E ⑵用带括号的中缀表达式输出表达式E ⑶实现对变量x的赋值,变量初始值为0 ⑷对算术表达式求值 ⑸构造新的复合表达式(E1)P(E2) ⑹对表达式进行化简 3.输入输出 本程序运算数的输入输出局限于无符号整型数据,运算符的输入输出包括“+、-、*、/、^” 二、 概要设计 1.设计思路: 本程序以字符序列的形式输入语法正确的前缀表达式,在输入表达式的过程中判断输入的字符是运算数还是运算符并将其保存到树节点中相应的位置,表达式输入结束的同时也就构成一颗二叉树。根据建立好的二叉树,可以采用中序遍历二叉树的方法输出正常顺序的表达式。在中序遍历二叉树时,访问存放运算符的结点时要判断其与双亲结点中运算符的优先级关系来判断是否要添加括号。在给表达式中的未知数x赋值时,本程序采用的是中序遍历二叉树的方法,遇到存放x的结点就将数值赋值给其数据域的变量。然后通过后序遍历二叉树的方法就行表达式求值。构造复合表达式可以分别建立两颗二叉树,然后将这两颗二叉树作为新申请的运算符结点的左右孩子结点。在化简表达式时,先判断运算符结点的两个孩子节点是不是运算数结点(不包括x结点)。如果两个孩子节点是运算数结点,就计算出这个子表达式的值并用其代替这个运算符结点。 2.数据结构设计: 抽象数据类型二叉树的定义如下: ADT BinaryTree{ 数据对象D:D是具有相同特性的数据元素的集合。 数据关系R: 若D=φ,则R=φ,称BinaryTree为空二叉树; 若D≠φ,则R={H},H是如下二元关系: (1)在D中存在唯一的称为根的数据元素root,它在关系H下无前驱; (2)若D-{root}≠φ,则存在D_{root}={D1,Dr},且D1∩Dr=φ; (3)若D1≠φ,则D1中存在唯一的元素X1,root,X1∈H,且存在 D1上的关系H1∈H;若Dr≠φ,则Dr中存在唯一的元素Xr,root,Xr ∈H,且存在Dr上的关系Hr∈H;H={root,X1,root,Xr,H1,Hr}; (4)(D1,{H1})是一颗符合本定义的二叉树,称为根的左子树,(Dr,{Hr}) 是一颗符合本定义的二叉树,称为根的右子树。 基本操作: CreatBitTree (BitTree T,BitTree p); 操作结果:根据前缀表达式先序构造二叉树。 InOrderTraverse(BitTree T) 初始条件:二叉树T存在。 操作结果:中序遍历二叉树T,输出每个结点的数据域且仅一次。 InOrder(BitTree T,int *num); 初始条件:二叉树T存在且存在x结点。 操作结果:将num赋值给x。 PostOrderTraverse(BitTree T); 初始条件:二叉树T。 操作结果:后序遍历二叉树求表达式的值。 }ADT BinaryTree 3.软件结构设计: 三、 详细设计 定义程序中所有用到的数据及其数据结构,基本操作typedef struct BitNode { char data; int opnd; struct BitNode *lchild; struct BitNode *rchild; struct BitNode *parent; }BitNode,*BitTree; 2.主函数和其他函数的伪码算法; (1)主函数: int main() { BitTree T=NULL; T=(BitTree )malloc(sizeof(BitNode)); if(T==NULL) {printf(有错\n);} else { flag=0; menu(T); } return 0; } 菜单函数: void menu(BitTree T) { int sel=0; do { printf(\n\n); printf(

文档评论(0)

小教资源库 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档