版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构实验报告评分满分5分学号: 姓名:许明华 专业:计算机科学与技术知识范畴:栈与队列 完成日期:2017年4月03日实验题目:后缀表达式求值实验内容及要求:从键盘输入后缀表达式(运算符和操作数建议以字符串形式输入,空格作为分隔符),计算并输出后缀表达式的求值结果。 基本要求:实现 +, -, *, /四个二元运算符; 实现+, -两个一元运算符(即正、负号); 操作数用整数表示。提高要求:输出对应的前缀表达式。每位同学可必须实现基本要求,可选择实现提高要求;程序可不处理表达式语法错误。实验目的:掌握堆栈在表达式求值中的应用。数据结构设计简要描述:序言:这是本学期第三个实验,这个实验比较的
2、基本要求是要我们求出一个已经按后缀表达式形式输入的值,除了之前的堆栈部分,新增了一部分就是判断操作数和运算符,并将操作数入栈,将运算符进行对应的操作数功能实现,并将结果入栈。数据结构简要设计: 本实验主要可分为两个大的模块,一个是堆栈操作,另外一个就是后缀表达式求值操作。堆栈操作:用结构体类型名来创建用于保存操作数的堆栈,并实现判断栈空、栈满、栈初始化、入栈以及退栈等操作;后缀表达式求值操作:用string类型定义一个字符串,并对其进行判断,是操作数就入栈,是运算符就进行运算,并保存结果。算法设计简要描述:后缀表达式求值算法:用string类型定义一个字符串,并用一个switch来实现运算符的
3、操作和操作数的入栈,再用一个while来进行循环遍历整个字符串,直到字符串的末尾为止。最后将算得最终结果退栈,并打印到屏幕上即可。输入/输出设计简要描述:输入:从键盘上输入一个已经排好序的后缀表达式,如12-82-74-/*输出:屏幕上将输出后缀表达式的值,如上面表达式的值为6编程语言说明:1, 编程软件,Code Blocks 16.0;2, 代码均用C+语言实现;3, 输入输出采用C+语言的cout和cin函数;4, 程序注释采用C/C+规范;主要函数说明:void InitStack(Stack *s);/栈的初始化int EmptyStack(Stack *s);/判断栈空int fu
4、ll(Stack *s);/判断栈满int push(Stack *s,elemtype x);/入栈操作int pop(Stack *s,elemtype &x);/退栈操作int result(string s);/后缀表达式求值程序测试简要报告:见截图:1, 2, 源程序代码:#include#includeusing namespace std;typedef int elemtype;/整数型数据类型typedef struct elemtype *elem; int length; int top; Stack;/函数声明void InitStack(Stack *s);/栈的初始
5、化int EmptyStack(Stack *s);/判断栈空int full(Stack *s);/判断栈满int push(Stack *s,elemtype x);/入栈操作int pop(Stack *s,elemtype &x);/退栈操作int result(string s);/后缀表达式求值/函数具体实现/顺序存储的栈结构,以及其相应算法void InitStack(Stack *s) s-length = 100; s-elem = (elemtype *)malloc(sizeof(elemtype)*s-length); s-top = -1;/判断栈是否为空int Em
6、ptyStack(Stack *s) return s-top = -1;/判断栈满int full(Stack *s) return s-top=s-length-1;/入栈int push(Stack *s,elemtype x) if(full(s) return 0; s-elem+s-top = x; return 1;/退栈int pop(Stack *s,elemtype &x) if(EmptyStack(s) return 0; x = s-elems-top-; return 1;/后缀表达式求值函数int result(string s) int Result;/定义一个
7、保存输出结果的值 Stack *p;/建栈 p = (Stack *)malloc(sizeof(Stack);/为新建的栈分配内存空间 InitStack(p);/初始化刚建的栈,这一步不进行的话,入栈将不能进行,之前这个问题将我难到了好久 int i = 0;/定义一个字符串下标,用来循环判断字符串中的内容 elemtype a,b,d;/定义三个elemtype类型变量,用来进行操作数的实现 while(1) if(is.length()-1) break; switch(si) case +:/加号则退两个,并相加将结果保存在栈中 pop(p,a); pop(p,b); d = a +
8、 b; push(p,d); break; case -:/加号则退两个,并相减将结果保存在栈中 pop(p,a); pop(p,b); d = b - a; push(p,d); break; case *:/加号则退两个,并相乘将结果保存在栈中 pop(p,a); pop(p,b); d = a*b; push(p,d); break; case /:/加号则退两个,并相除结果保存在栈中 pop(p,a); pop(p,b); d = b/a; push(p,d); break; default:/是数字就转换为数字后入栈 d = si - 0; push(p,d); break; i+;/字符串自增一进
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第四章 多彩的光2012.2
- 集成电路供电配电系统升级改造方案
- 新工人三级教育卡
- 第八课 法治中国建设 第三框法治社会
- 甲状腺疾病护理新进展
- 学校汛期安全检查情况记录表
- 2025年人工智能伦理评估技术伦理指南
- 糖尿病护理新技术与新进展
- 兰亭集序(教学课件) -高中语文人教统编版
- 结膜炎的预防与控制措施
- 2025-2026学年高一上学期做个文明人:青春修养主题班会
- 西红柿的营养奥秘(大班教学)
- 红楼梦木石前盟课件
- GB/T 31150-2025汽车零部件物流塑料周转箱尺寸系列及技术要求
- 中考英语作文写作万能句型汇编
- 清理河道劳务合同范本
- 树木疏伐施工方案
- 雨课堂在线学堂《大数据可视化》单元考核测试答案
- 安装灭火器施工方案模板
- 2025年医疗器械自查报告模板
- 2025重庆机场集团有限公司社会招聘150人(第二次)笔试参考题库附带答案详解
评论
0/150
提交评论