- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
井冈山大学
电子与信息工程学院
数据结构课程设计报告
( 201——201 年度第一学期)
课程名称: 数据结构课程设计
题 :
题 : 题 : 院 系: 计算机科学系
班 级:
姓 名:
学 号:
指导教师: 孙凌宇老师
成 绩:
201 年 月 日
成 绩 评 定
一、 指导教师评语
二、 成绩
成绩 备注
指导教师:
日 期: 年 月 日目 录
设计题目一: “表达式求值问题”的设计与实现 1
设计题目 “表达式求值问题”的设计与实现
设计要求
问题描述
任何一个表达式都是由操作数、运算符和界限符组成的。其中,操作数可以是常量,也可以是变量;运算符可以是算术运算符、关系运算符和逻辑运算符;界限符是左右括号和标志表达式结束的结束符。在本课程设计中,仅讨论简单算术表达式的求值问题,约定表达式中只包含加减乘除4种运算,所有的运算对象均为简单变量,表达式的结束符为“#”。
要求以字符序列的形式从终端输入语法正确,不含变量的整式表达式。利用已知的运算符优先关系,实现对算术表达式的求值。
需求分析
这是一个利用栈结构完成的程序。为了实现算术优先算法,我们使用两个工作栈,一个称为操作符栈(OPTR),用以寄存运算符;一个称为操作数栈(OPND),用以寄存操作数或运算结果。算法的基本思想是:
(1)首先置操作数栈OPND为空栈,表达式结束符“#”为操作符栈OPTR的栈底元素。
(2)依次读入表达式中的每个字符,表达式结束符“#”为操作符栈OPTR的栈底元素。栈的栈顶运算符比较优先级后做相应操作,直至整个表达式求值完毕。
2. 概要设计
2.1主界面设计
表达式求值程序界面设计并不复杂,有提示表达式输入及结束符号的信息即可。运行界面如图1所示。
图1 表达式求值主菜单
2.2 存储结构设计
本系统采用顺序栈结构类型存储表达式计算中的数据。程序中需要建立两个栈,一个栈用来寄存运算符,另一个用来以寄存操作数和运算结果。
2.3 算术优先级设计
对于算术优先级的算法设计,有如下一些关键存储结构和函数。
数组名为ch的数组存放所有运算符,数组名为f1的数组存放栈内运算符的优先级,数组名为f2的数组存放栈外运算符的优先级,通过函数con可将运算符:+,-,*,/,(,),#,转化成数字0,1,2,3,4,5,6,如图2所示。
运算符 + - * / ( ) # 转化为整形数字 0 1 2 3 4 5 6 栈内操作符的优先级 3 3 5 5 1 6 0 栈外操作符的优先级 2 2 4 4 2 1 0 图2 运算符优先级
当遇到当前运算符c是否入操作符栈(OPNT)时,进行如下操作:
将操作符栈(OPNT)的栈顶运算符和当前运算符c分别通过cton()函数转化成整形数字。假设,用i1表示转化成整形数字的栈顶数字的栈顶运算符,用i2表示转化成整形数字的栈顶数字的当前运算符c。
用Compare()函数比较数组元素f1[i1]和f2[i2]的优先级大小。
如果f1[i1] f2[i2],函数返回值为,表示当前运算符的优先级较小,栈顶运算符是目前优先级最大的运算符,因此将进行栈顶运算符出栈并进行相应的运算。具体步骤如下:首先,将操作数栈栈顶元素出栈,并用变量t存放;然后从操作数栈弹出一个栈顶元素并用变量b存放,继续从操作数栈弹出下一个栈顶元素用变量a存放;最后,将a,b两个操作数通过运算符通过运算符t做算术运算,运算结果仍入操作数栈,运算完毕后,继续扫描表达式。
如果f1[i1]f2[i2],函数返回值为,表示当前运算符的优先级较大,应继续扫描表达式优先级更大的算出现。此时暂不进行数据运算,只需将当前运算符c入操作符栈。
如果f1[i1]=f2[i2],函数返回值为=,表示界限符内的式子已计算完毕,不需要进行数据运算,只需将操作符栈栈顶元素出栈即可。
3 模块设计
3.1 模块设计
本程序包含3个模块,主程序模块,计算模块和顺序栈操作模块,调用关系如图3所示。
图3 模块调用示意图
3.2系统子程序及功能设计
本系统共设置10个函数,其中主要包括主函数。各函数及功能说明如下。
(1)elemtype cton(char c) //把操作符转换成相应
您可能关注的文档
最近下载
- 400字作文稿纸A4打印模板-400字作文稿纸[参考].doc VIP
- 物业三标体系培训.pptx VIP
- 7838G_Ren Jiansheng LD-Parex芳烃联合装置工程变化_04_20.pdf VIP
- 教育法律法规-教育法律法规.ppt VIP
- 《电子商务实务》课程标准.doc VIP
- PCS-9621_120189站用接地变保护装置说明书.doc VIP
- 2024甘肃武威凉州区发放镇招聘专业化管理的大学生村文书历年考试试题及答案.docx
- (2025秋新版)苏教版科学三年级上册全册教案.docx
- 党员转正申请书范文3篇.doc VIP
- 如何与学生进行有效沟通培训.pptx VIP
文档评论(0)