




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 / 9 数据结构实验报告 学号:2015111898 姓名:许明华 专业:计算机科学与技术 知识范畴:栈与队列 完成日期:2017 年 4 月 03 日 实验题目:后缀表达式求值 实验内容及要求: 从键盘输入后缀表达式(运算符和操作数建议以字符串形式输入,空格作为分隔符) ,计 算并输出后缀表达式的求值结果。 基本要求:实现 +, -, *, /四个二元运算符; 实现+, -两个一元运算符(即正、负号) ; 操作数用整数表示。 提高要求:输出对应的前缀表达式。 每位同学可必须实现基本要求,可选择实现提高要求;程序可不处理表达式语法错误。 实验目的:掌握堆栈在表达式求值中的应用。 数据结构设计简要描述: 序言: 这是本学期第三个实验,这个实验比较的基本要求是要我们求出一个已经按后缀表达式 形式输入的值,除了之前的堆栈部分,新增了一部分就是判断操作数和运算符,并将操作数 入栈,将运算符进行对应的操作数功能实现,并将结果入栈。 数据结构简要设计: 本实验主要可分为两个大的模块,一个是堆栈操作,另外一个就是后缀表达式求值操作。 堆栈操作:用结构体类型名来创建用于保存操作数的堆栈,并实现判断栈空、栈满、栈初始 化、入栈以及退栈等操作;后缀表达式求值操作:用 string 类型定义一个字符串,并对其进 行判断,是操作数就入栈,是运算符就进行运算,并保存结果。 算法设计简要描述: 后缀表达式求值算法:用 string 类型定义一个字符串,并用一个 switch 来实现运算符 评分 满分5 分 2 / 9 的操作和操作数的入栈,再用一个 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 full(Stack *s);/判断栈满 int push(Stack *s,elemtype x);/入栈操作 int pop(Stack *s,elemtype /退栈操作 int result(string s);/后缀表达式求值 程序测试简要报告: 见截图: 1, 3 / 9 2, 源程序代码: #include #include using namespace std; typedef int elemtype;/整数型数据类型 typedef struct elemtype *elem; int length; int top; Stack; 4 / 9 /函数声明 void InitStack(Stack *s);/栈的初始化 int EmptyStack(Stack *s);/判断栈空 int full(Stack *s);/判断栈满 int push(Stack *s,elemtype x);/入栈操作 int pop(Stack *s,elemtype /退栈操作 int result(string s);/后缀表达式求值 /函数具体实现 /顺序存储的栈结构,以及其相应算法 void InitStack(Stack *s) s-length = 100; s-elem = (elemtype *)malloc(sizeof(elemtype)*s-length); s-top = -1; /判断栈是否为空 int EmptyStack(Stack *s) return s-top = -1; /判断栈满 5 / 9 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 = s-elems-top-; 6 / 9 return 1; /后缀表达式求值函数 int result(string s) int Result;/定义一个保存输出结果的值 Stack *p;/建栈 p = (Stack *)malloc(sizeof(Stack);/为新建的栈分配内存空间 InitStack(p);/初始化刚建的栈,这一步不进行的话,入栈将不能进行,之前这个问题 将我难到了好久 int i = 0;/定义一个字符串下标,用来循环判断字符串中的内容 elemtype a,b,d;/定义三个 elemtype 类型变量,用来进行操作数的实现 while(1) if(is.length()-1) break; 7 / 9 switch(si) 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; case *:/加号则退两个,并相乘将结果保存在栈中 pop(p,a); 8 / 9 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:/是数字就转
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年金融科技企业估值模型构建与投资决策的金融科技投资趋势预测
- 2025年智能照明系统在智能商业建筑中的节能控制与智能照明场景切换可行性研究报告
- 中小企业运营管理方案
- 少儿美育的策略及实施路径
- 2025年文化创意产业园区建筑初步设计设计创新理念评估报告
- 高新技术产业园运营管理方案
- 架空线路设计复习测试卷含答案
- 质量竞赛复习试题及答案
- 2025年交通设备制造业数字化转型对环境保护的贡献报告
- 基层医疗卫生机构信息化建设中的医疗服务流程再造报告
- 中国民族钢琴艺术鉴赏智慧树知到期末考试答案章节答案2024年西安交通大学
- 咖啡文化与饮品调制智慧树知到期末考试答案2024年
- (高清版)DZT 0319-2018 冶金行业绿色矿山建设规范
- 体检中心医护培训课件
- 2024年中国人保财险全系统陕西分公司招聘笔试参考题库含答案解析
- 深度学习技术在医学图像识别中的应用
- 医院培训课件:《护患沟通技巧》
- 空调风道改造技术方案
- 前悬挂整秆式甘蔗收割机双刀盘切割与喂入装置设计与试验的中期报告
- 《林业科普知识》课件
- 国开电大操作系统-Linux系统使用-实验报告
评论
0/150
提交评论