数据结构实验报告--表达式求值.pdf

上传人:tbuqq 文档编号:4651006 上传时间:2019-11-24 格式:PDF 页数:7 大小:164.83KB
返回 下载 相关 举报
数据结构实验报告--表达式求值.pdf_第1页
第1页 / 共7页
亲,该文档总共7页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《数据结构实验报告--表达式求值.pdf》由会员分享,可在线阅读,更多相关《数据结构实验报告--表达式求值.pdf(7页珍藏版)》请在三一文库上搜索。

1、数据结构实验报告 班级 : 姓名 : 学号: E-mail: 日期 : 实验题目 :表达式求值 实验目地:对表达式进行求值并转化为后缀表达式求值. 实验内容:使用键盘输入表达式, 计算表达式地值并输出;将表达式转化成后 缀表达式输出 , 利用后缀表达式求表达式地值并输出.b5E2RGbCAP ( 一 需求分析 1本次实验要求输入一个表达式, 数字0-9, 运算符有“ +、- 、* 、 / 、 #”, 以及“ 概要设计 为了实现上述操作,构建两个栈最为存储结构. 1基本操作: typedef struct int stacksize。 int *base。 int *top。 Sqstack1,

2、*stack1。 typedef struct int stacksize。 char *base。 char *top。 Sqstack2,*stack2。 void Initstack1(stack1 *s; void Initstack2(stack2 *s; 2本程序包含六个模块: 详细设计 1元素类型 , 结点类型和指针类型: typedef struct int stacksize。 int *base。 int *top。 Sqstack1,*stack1。 typedef struct int stacksize。 char *base。 char *top。 Sqstack2

3、,*stack2。 2每个模块地分析: char StrSIZE = 0。 printf(“请输入中缀表达式:n “ 。 gets(Str。 CalculateMD(Str。 Transform_CalculateLT(Str。 (*s-base = (int *malloc(SIZE * (sizeof(int。 (*s-top = (*s-base。 (*s-stacksize = INCREMENT。 int Ifempty2(stack2 *s if(*s-base = (*s-top return 1。 else return 0。 int i,c,d。 char bijiao77

4、= , , , , , , ,#。 for(i = 0。 i if(a = chi c = i。 if(b = chi d = i。 return bijiaocd。 char Precede2(char a,char b if(a=*|(a=/&(b=+|(b=-|(b=#5PCzVD7HxA return 。 else return int t。 if(b = + t = a + c。 if(b = - t = a - c。 if(b =* t = a * c。 if(b = / if(c = 0 printf(“ !n 错误:除数不能为零n“ 。 exit(-1。 else t = a

5、/ c。 return t。 Sqstack1 a 。 Sqstack2 b 。 stack1 OPND = &a 。 stack2 OPTR = &b 。 Initstack1(&OPND。 Initstack2(&OPTR。 Push2(&OPTR,# 。 char x 。 int i = 0。 int m,n。 char theta。 char c 。 c = Hi。 while(c != # | *(OPTR-top != # if(Distinguish(c = 0 Push1(&OPND,(intc - 48。 c = H+i。 else switch(Precede1(*(OPT

6、R-top,c case。 c = H+i。 break 。 case=: x = Pop2(&OPTR。c = H+i。 break 。 case: theta = Pop2(&OPTR。 n = Pop1(&OPND 。 m = Pop1(&OPND。 Push1(&OPND,Operate(m,theta,n。 break 。 printf(“计算地结果为:n “ 。 printf(“%dn“,*(OPND-top。 int i,j = 0,r。 int bSIZE = 0。 char kSIZE = 0。 Sqstack2 q。 stack2 OPTR = &q。 Initstack2

7、(&OPTR。 for(i = 0。ti != #。i + if(Distinguish(ti = 0 kj+=ti。 if(Distinguish(ti = 1 Push2(&OPTR,ti。 if(Distinguish(ti = 2 while(*(OPTR-top != ( kj+ = Pop2(&OPTR。 Pop2(&OPTR。 if(Distinguish(ti = 3 while(Ifempty2(&OPTR = 0&(Precede2(ti,*(OPTR-top != &(*(OPTR-top != (jLBHrnAILg kj+ = Pop2(&OPTR。 Push2(&O

8、PTR,ti。 while(Ifempty2(&OPTR = 0 kj+ = Pop2(&OPTR。 printf(“转化为后缀表达式:n “ 。 puts(k。 for(i = 0,j = 0。ki != #。i + if(Distinguish(ki = 0 / bj+ = (intki - 48。 if(Distinguish(ki = 3 r = Operate(bj-2,ki,bj-1。 bj-1 = 0。 bj-2 = 0。 j = j - 2。 bj = r。 j +。 printf(“计算地结果为:n %dn“,b0。 3完整地程序:( 见源文件 . ( 四 程序使用说明及测试

9、结果 1程序使用说明 4运行界面 你在编程过程中花时多少? 多少时间在纸上设计? 多少时间上机输入和调试? 多少时间在思考问题? 遇到了哪些难题? 你是怎么克服地? 你地收获有哪些? 这次编程工作量比较大, 由于栈地内容掌握得不够熟练, 编程进程进步缓慢, 实验课 地时间内将程序主体已经打好, 调试过程复杂而琐碎, 时间已经记不准了, 只想着赶快编完就 好, 调试过程中遇见了一个很难发现而又对程序影响很大地错误, 可能是打字时过急, 把一个 返回值“ 3”打成了“ 2”, 结果没有error,但是程序没有输出. 从这件事我知道了编程时要 细心认真 ,不能心急 . 接下来还要再将栈地内容进行复习.xHAQX74J0X 教师评语: 实验成绩: 指导教师签名: 批阅日期:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1