文档详情

课程设计报告-表达式类型实现-方锐洲.doc

发布:2017-04-22约3.18万字共35页下载文档
文本预览下载声明
数据结构课程设计报告 第  PAGE 35 页 共  NUMPAGES 35 页 数据结构 课程设计 表达式类型的实现 学 院 计算机学院 专 业 计算机科学与技术 年级班别 2006级01班 学 号 3106006394 学生姓名 方锐洲 辅导教师__ 吴伟民_______ 成 绩_______ ______ 2008年7月 3 日 ~~~~~~~~~~表达式类型的实现~~~~~~~~~~ 目录: 一、需求分析3 二、概要设计3-6 1、数据类型的声明: 2、表达式的抽象数据类型定义 3、整体设计 三、详细设计7-13 1、二叉树的存储类型 2、顺序栈的存储类型 3、表达式的基本操作 4、主程序和其他伪码算法 5、函数的调用关系 四、设计和调试分析14 五、用户手册14 六、测试15-18 七、课程设计的心得和心得以及问题18 八、参考文献19 九、附录:程序清单19-35 一、需求分析【课程设计要求】 【问题的描述】 一个表达式和一棵二叉树之间,存在着自然的对应关系。写一个程序,实现基于二叉树表示的算术表达式Expression的操作。 【基本要求】 【一】【必做部分】 假设算术表达式Expression内可以含有变量(a-z),常量(0-9)和二元运算符(+,-,*,/,^(乘幂))。实现以下操作: (1)ReadExpr(E)――以字符序列的形式输入语法正确的前缀表达式并构造表达式E。 (2)WriteExpr(E)――用带括号的中缀表达式输出表达式E。 (3)Assign(V,c)――实现对变量V的赋值(V=c),变量的初值为0。 (4)Value(E)――对算术表达式E求值。 (5)CompoundExpr(p,E1,E2)――构造一个新的复合表达式(E1)p(E2)。 【二】【选做部分】 (1)以表达式的原书写形式输入,支持大于0的正整数常量; (2)增加常数合并操作MergeConst(E)——合并表达式E中所有常数运算。例如,对表达式E=(2+3-a)*(b+3*4)进行合并常数的操作后,求得E=(5-a)*(b+12) 【测试数据】 分别输入0;a;-91;+a*bc;+*5x2*8x;+++*3^*2^x2x6并输出。 每当输入一个表达式后,对其中的变量赋值,然后对表???式求值。 还有很多测试的数据,详细请见附上的文件Test.txt。 二、概要设计 1、数据类型的声明: 在这个课程设计中,采用了链表二叉树的存储结构,以及两个顺序栈的辅助存储结构 /*头文件以及存储结构*/ #includestdio.h #includeconio.h #includestdlib.h #includestring.h #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW 0 typedef int Status; 2、表达式的抽象数据类型定义 ADT Expression{ 数据对象D:D是具有数值的常量C和没有数值的变量V; 数据关系:R={(V或者C)P(V或者C)|V,C∈D, (V或者C)P(V或者C)表示由运算符P结合起来的表达式E} 基本操作: Status Input_Expr(string,flag) 操作结果:以字符序列的形式输入语法正确的前缀表达式,保存到字符串string; 参数flag表示输出的提示信息是什么,输入成功返回OK,否则,返回ERROR。 void judge_value(E,string,i) 初始条件:树E存在,表达式的前缀字符串string存在; 操作结果:判断字符string[i],如果是0-9常量之间,二叉树结点E存为整型;否则,存为字符型。 Status ReadExpr(E,exprstring) 初始条件:表达式的前缀形式字符串exprstring存在; 操作结果:以正确的前缀表示式exprstring并构造表达式E,构造成功,返回OK,否则返回ERROR。 Status Pri_Compare(c1,c2) 初始条件:c1和c2是字符; 操作结果:如果两个字符是运算符,比较两个运算符的优先级,c1比c2优先,返回OK,否则返回ERROR。 void WriteExpr(E) 初始条件:表达式E存在; 操作条件:用带括弧的中缀表达式输入表达式E。 void Assign(E,V,c,flag) 初始条件:表达式E存在,flag为标志是否有赋值过
显示全部
相似文档