ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:17.47KB ,
资源ID:7228129      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7228129.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(表达式求值实验报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

表达式求值实验报告.docx

1、表达式求值实验报告数据结构课程设计报告班级姓名:学号:2009年12月17日目 录1需求分析 32概要设计 33详细设计 64测试与分析 65总结 76附录 71需求分析1、问题描述用栈来实现表达式求值2、基本要求(1)输入的形式:可以输入数字、“+”“-”“*”“/”以及与其匹配的“(”“)”“”“”“”“”;(2)输出的形式:直接输出数字答案;(3)程序所能达到的功能:一般的四则混合运算;2概要设计1、数据结构 用2个栈进行运算,其中一个栈用来进行运算符存储及运算,另一个栈用来进行数字的存储及运算。栈的概念:栈(stack)是限定仅在表尾进行插入或删除操作的线性表。其特点为先进后出。ADT

2、 Stack 数据对象:D=aiaiElemSet, i=1,2,n,n0 数据关系:R1=ai-1,aiai-1,aiD, I=2,n 约定an端为栈顶,a1端为栈底。基本操作: InitStack(&S)操作结果:构造一个空栈S。 DestroyStack(&S)初始条件:栈S已存在。操作结果:栈S被销毁。 ClearStack(&S)初始条件:栈S已存在。操作结果:栈S清为空栈。 StackEmpty(S)初始条件:栈S已存在。操作结果:若栈S为空栈,则返回TRUE,否则FALSE。 StackLength(S)初始条件:栈S已存在。操作结果:返回S的元素个数,即栈的长度。 GetTop

3、(S,&e)初始条件:栈S已存在且非空。操作结果:用e返回S的栈顶元素。 Push(&S,e)初始条件:栈S已存在。操作结果:插入元素e为新的栈顶元素。Pop(&S, e) 初始条件:栈S已存在且非空。操作结果:删除S的栈顶元素,并用e返回其值。StackTraverse(S,visit()初始条件:栈S已存在且非空。操作结果:从栈底到栈顶依次对S的每个数据元素调用函数visit()。一旦visit()失败,则操作失效。ADT Stack2、程序模块(1) void F_push(Fnode *h,char c) Fnode *p; p=(Fnode*)malloc(sizeof(Fnode)

4、; p-fh=c; p-next=NULL; if(c=+|c=-) p-yxj=1; else if(c=*|c=/) p-yxj=2; else if(c=(|c=) p-yxj=0; else free(p); return; while(h-next!=NULL) h=h-next; p-next=h-next; h-next=p; (2) char F_pop(Fnode *h) char c; while(h-next-next!=NULL) h=h-next; c=h-next-fh; free(h-next); h-next=NULL; return c; int F_look

5、(Fnode *h) while(h-next!=NULL) h=h-next; return h-yxj; (3) void S_push(Snode *h,double c) Snode *p; p=(Snode*)malloc(sizeof(Snode); p-data=c; p-next=NULL; while(h-next!=NULL) h=h-next; p-next=h-next; h-next=p; (4) double S_pop(Snode *h) double i; while(h-next-next!=NULL) h=h-next; i=h-next-data; fre

6、e(h-next); h-next=NULL; return i; 3、各模块之间的调用关系以及算法设计 main() Fnode *fh; Snode *sh; char *str; printf(请输入表达式,按回车之后输出结果: ) ; fh=(Fnode*)malloc(sizeof(Fnode); fh-next=NULL; sh=(Snode*)malloc(sizeof(Snode); sh-next=NULL; str=change(gets(str); printf( =%lf,final(str,fh,sh); getch(); 3详细设计OperandType Evaua

7、teExpression() Initstack(OPTR); Push(OPTR,#); initStack(OPND); c=getchar(); while(c!=#|GetTop(OPTR)!=#) if(In(c,OP)Push(OPND,c);c=getchar(); else switch(Precede(GetTop(OPTR);c) case: Pop(OPTR,theta); Pop(OPND,b); Pop(OPND,a); Push(OPND,Operate(a,theta,b); /switch /while Teturn GetTop(OPND);4测试与分析(1)

8、 运行页面请输入表达式,按回车后输出结果(2) 运行检测输入“1+1”,按“回车”后输出“2.000000”说明加减运算可以进行输入“2*3”,按“回车”后输出“6.000000”说明乘除运算可以进行输入“1+2*3”,按“回车”后输出“7.000000”说明加减乘除混合运算可以进行输入“(1+2)*3+4”,按“回车”后输出“13.000000”说明带括号的混合运算可以进行 程序可以进行。5总结经过此次数据结构课程设计是我对数据结构有了更深一步的认识,在编程过程中我既体验到了编程成功所带来的喜悦,也体会到了在编程过程中遇到的问题给我带来的烦恼。一个小错误会导致一个花费了很长时间和心思编出来的

9、程序无法运行。此次编程是我了解到学习知识的扎实性和编程的细心是很重要的,与此同时我也发现在自己程序出现问题而有无法发现时,虚心向他人求教也是必要的。我将会在以后的编程过程中努力改正自己的缺点,不断完善自己。6附录#include #include #include typedef struct Fnode/*符号单链表*/ int yxj; char fh; struct Fnode *next; Fnode; void F_push(Fnode *h,char c)/*对运算符号的入栈操作*/ Fnode *p; p=(Fnode*)malloc(sizeof(Fnode); p-fh=c;

10、 p-next=NULL; if(c=+|c=-) p-yxj=1; else if(c=*|c=/) p-yxj=2; else if(c=(|c=) p-yxj=0; else free(p); return; while(h-next!=NULL) h=h-next; p-next=h-next; h-next=p; char F_pop(Fnode *h)/*对运算符号的出栈操作*/ char c; while(h-next-next!=NULL) h=h-next; c=h-next-fh; free(h-next); h-next=NULL; return c; int F_loo

11、k(Fnode *h) while(h-next!=NULL) h=h-next; return h-yxj; /*-*/ typedef struct Snode/*数字单链表*/ double data; struct Snode *next; Snode; void S_push(Snode *h,double c)/*对数字的入栈操作*/ Snode *p; p=(Snode*)malloc(sizeof(Snode); p-data=c; p-next=NULL; while(h-next!=NULL) h=h-next; p-next=h-next; h-next=p; doubl

12、e S_pop(Snode *h)/*对数字的出栈操作*/ double i; while(h-next-next!=NULL) h=h-next; i=h-next-data; free(h-next); h-next=NULL; return i; /*-*/ char *change(char *str)/*字符串前加(,后加 )*/ char *r; *(str-1)=(; str-; r=str; strcat(r,); return r; /*;-*/ double final(char *str,Fnode *fh,Snode *sh)/*计算表达式结果*/ double i,t

13、emp,emp; while(*str!=0) if(*str=() F_push(fh,*str); str+; continue; else if(*str=0&*str=0&*str=0&*str=0&*strF_look(fh) F_push(fh,*str); else switch(F_pop(fh) case +:emp=S_pop(sh);S_push(sh,(S_pop(sh)+emp);break; case -:emp=S_pop(sh);S_push(sh,(S_pop(sh)-emp);break; case *:emp=S_pop(sh);S_push(sh,(S_

14、pop(sh)*emp);break; case /:emp=S_pop(sh);S_push(sh,(S_pop(sh)/emp);break; default :; F_push(fh,*str); str+;continue; return S_pop(sh); main() Fnode *fh; Snode *sh; char *str; printf(请输入表达式,按回车之后输出结果: ) ; fh=(Fnode*)malloc(sizeof(Fnode); fh-next=NULL; sh=(Snode*)malloc(sizeof(Snode); sh-next=NULL; str=change(gets(str); printf( =%lf,final(str,fh,sh); getch();

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1