数据结构课程设计表达式类型的实现(难度系数1.2)大学论文.doc
《数据结构课程设计表达式类型的实现(难度系数1.2)大学论文.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计表达式类型的实现(难度系数1.2)大学论文.doc(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构课程设计报告 题目:表达式类型的实现(难度系数:1.2) 学 院 计算机 专 业 计算机科学与技术 年级班别 2015级8班 学 号 3115005210 学生姓名 杨嘉慧 指导教师 李杨 编 号 成 绩 2017 年 1 月报告:报告内容:详细完整基本完整 不完整设计方案:非常合理合理基本合理 较差算法实现:全部实现基本实现部分实现 实现较差测试样例:完备比较完备基本完备 不完备文档格式:规范比较规范基本规范 不规范答辩:理解题目透彻,问题回答流利理解题目较透彻,回答问题基本正确部分理解题目,部分问题回答正确未能完全理解题目,答辩情况较差总评成绩:优良中及格不及格运行环境:CodeB
2、locks完成的题目:表达式类型的实现(难度系数:1.2)选做的内容:(4)在表达式内增加对三角函数等初等函数的操作。一、 需求分析【课程设计要求】 【问题的描述】 一个表达式和一棵二叉树之间,存在着自然的对应关系。写一个程序,实现 基于二叉树表示的算术表达式Expression的操作。 【基本要求】 【一】【必做部分】 假设算术表达式Expression内可以含有变量(a-z),常量(0-9)和二元运算符(+,-,*,/,(乘幂)。实现以下操作: (1)ReadExpr(E)以字符序列的形式输入语法正确的前缀表达式并构造表达式E。 (2)WriteExpr(E)用带括号的中缀表达式输出表达式
3、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)(3)增加对求偏导数的运算Diff(E,V)求表达式E对V的导数 (4)在表达式内增加对三角函数等初等函数的操作。 【测试数据】
4、 (1)分别输入0;a;-91;+a*bc;+*5x2*8x;+*3*2x2x6并输出。 (2)每当输入一个表达式后,对其中的变量赋值,然后对表达式求值。 二、【概要设计】 1、数据类型的声明: 在这个课程设计中,采用了链表二叉树的存储结构,以及两个顺序栈的辅助存储结构/*头文件以及存储结构*/#include #include #include #include #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0typedef int Status;2、表达式的抽象数据类型定义 基本操作:void judge_str(&E,
5、&string1) 初始条件:树E存在,表达式的前缀字符串string存在; 操作结果:判断字符stringi,如果是0-9常量之间,二叉树结点E存为整型;否则,存为字符型。 Status ReadExpr(&E,&string1) 初始条件:表达式的前缀形式字符串exprstring存在; 操作结果:以正确的前缀表示式exprstring并构造表达式E,构造成功,返回OK,否则返回ERROR。 Status Pri_Compare(c1,c2) 初始条件:c1和c2是字符; 操作结果:如果两个字符是运算符,比较两个运算符的优先级,c1比c2优先,返回OK,否则返回ERROR。 void Wr
6、iteExpr(&E) 初始条件:表达式E存在; 操作条件:用带括弧的中缀表达式输入表达式E。 void Assign(&E,V,c) 初始条件:表达式E存在,flag为标志是否有赋值过; 操作结果:实现对表达式E中的所有变量V的赋值(V=c)。 long Operate(opr1,opr,opr2) 初始条件:操作数opr1和操作数opr2以及操作运算符opr; 操作结果:运算符运算求值,参数opr1,opr2为常量,opr为运算符,根据不同的运算符,实现不同的运算,返回运算结果。 Status Check(E) 初始条件:表达式E存在; 操作结果:检查表达式E是否还存在没有赋值的变量,以便
7、求算数表达式E的值。 long Value(E) 初始条件:表达式E存在; 操作结果:对算术表达式求值,返回求到的结果。 void CompoundExpr(P,&E1,E2) 初始条件:表达式E1和E2存在; 操作条件:构造一个新的复合表达式(E1)P(E2)。3、整体设计 在这个课程设计中,有一个源代码文件:expression.c。 在expression.c文件中,是实现课程设计要求的各个函数。 主程序的流程以及各程序模块之间的调用关系:1、各个存储结构的声明; 2、顺序栈的基本操作。其基本操作如下: 对于栈SqStack: Status InitStack(SqStack *S) /
8、* 构造一个空栈S */ Status StackEmpty(SqStack S) /* 若栈S为空栈,则返回TRUE,否则返回FALSE */ Status Push(SqStack *S,SElemType e) /* 插入元素e为新的栈顶元素 */ Status Pop(SqStack *S,SElemType *e) /* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */ Status GetTop(SqStack S,SElemType *e) /* 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR */ 顺序栈SqStack模块二叉树
9、模块主程序模块3、本程序有三个模块,主程序模块,二叉树模块,一个个顺序栈模块。三者者的调用关系如下:三、【详细设计】 1、二叉树的存储类型 /*二叉树结点类型*/ typedef enumINT,CHARElemTag;/*INT为整型数据num,CHAR为字符型数据c*/ typedef struct TElemType ElemTag tag;/*INT,CHAR指示是整型还是字符型*/ union int num;/*tag=INT时,为整型*/ char c;/*tag=CHAR时,为字符型*/ ; TElemType; /*二叉树的二叉链表存储表示 */ typedef struct
10、 BiTNode TElemType data; struct BiTNode *lchild,*rchild; /* 左右孩子指针 */ BiTNode,*BiTree; 二叉树的基本操作已经在构造表达式和表达式中的基本操作中根据不同的功能和实际 情况修改了,详细见各个函数操作的算法设计。 2、顺序栈的存储类型 /*栈的顺序存储表示 */ #define STACK_INIT_SIZE 10 /* 存储空间初始分配量 */ #define STACKINCREMENT 2 /* 存储空间分配增量 */ /*顺序栈*/ typedef struct SqStack SElemType *bas
11、e; /* 在栈构造之前和销毁之后,base的值为NULL */ SElemType *top; /* 栈顶指针 */ int stacksize; /* 当前已分配的存储空间,以元素为单位*/ SqStack; /* 顺序栈SqStack */3、表达式的基本操作 Status Input_Expr(char *string,int flag); /*以字符序列的形式输入语法正确的前缀表达式,保存到字符串string*/ /*参数flag=0表示输出的提示信息是请输入正确的前缀表示式:*/ /*flag=1表示输出的提示信息为请以表达式的原书写形式输入正确表示式:*/ void judge_
12、str(BiTree *E,char *string,int i); /*判断字符stringi,如果是0-9常量之间,二叉树结点存为整型;否则,存为字符型*/ Status Pri_Compare(char c1,char c2); /*如果两个字符是运算符,比较两个运算符的优先级,c1比c2优先,返回OK,否则返回ERROR*/ void WriteExpr(BiTree E); /*用带括弧的中缀表达式输入表达式*/ void Assign(BiTree *E,char V,int c,int *flag); /*实现对表达式中的所有变量V的赋值(V=c),参数flag为表示是否赋值过的
13、标志*/ long Operate(int opr1,char opr,int opr2); /*运算符运算求值,参数opr1,opr2为常量,opr为运算符,根据不同的运算符,实现不同的运算,返回运算结果*/ Status Check(BiTree E); /*检查表达式是否还存在没有赋值的变量,以便求算数表达式的值*/ long Value(BiTree E); /*对算术表达式求值*/ void CompoundExpr(char P,BiTree *E1,BiTree E2); /*构造一个新的复合表达式*/4、主程序和其他伪码算法void main() BiTree E1,E2; c
14、har V,P; int c; ReadExpr(&E1); printf(nE1带括弧的中缀表示式为:); WriteExpr(E1); while(Check(E1)=TRUE) printf(n请输入要赋值的字符:); V=getchar(); printf(请输入要将赋值为:); scanf(%d,&c); Assign(&E1,V,c); getchar(); WriteExpr(E1); printf(n输入未知数后E1表达式为:); WriteExpr(E1); printf(nE1表达式的值为: %d,Value(E1); ReadExpr(&E2); printf(nE2带括
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 表达式 类型 实现 难度 系数 1.2 大学 论文
限制150内