




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 前 前 言言 1 2 概要设计 概要设计 1 2 1 数据结构设计数据结构设计 1 2 2 算法设计算法设计 1 2 3 ADT 描述描述 2 2 4 功能模块分析功能模块分析 2 3 详细设计 详细设计 3 3 1 数据存储结构设计数据存储结构设计 3 3 2 主要算法流程图 或算法伪代码 主要算法流程图 或算法伪代码 3 4 软件测 软件测试试 6 5 心得体会 心得体会 8 参考文献参考文献 8 附附 录录 8 北京理工大学珠海学院计算机科学技术学院 第 1 页 1 前 前 言言 在计算机中 算术表达式由常量 变量 运算符和括号组成 由于不同的运算符具有不同的优先级 又要考虑括号 因此 算术表达式的求值不可能严格地从左到右进行 因而在程序设计时 借助栈实现 算法输入 一个算术表达式 由常量 变量 运算符和括号组成 以字符串形式输入 为简化 规 定操作数只能为正整数 操作符为 用 表示结束 算法输出 表达式运算结果 算法要点 设置运算符栈和运算数栈辅助分析算符优先关系 在读入表达式的字符序列的同时 完 成运算符和运算数的识别处理 以及相应运算 2 概要设计 概要设计 2 1 数据结构设计 任何一个表达式都是由操作符 运算符和界限符组成的 我们分别用顺序栈来寄存表达式的操作 数和运算符 栈是限定于紧仅在表尾进行插入或删除操作的线性表 顺序栈的存储结构是利用一组连 续的存储单元依次存放自栈底到栈顶的数据元素 同时附设指针 top 指示栈顶元素在顺序栈中的位置 base 为栈底指针 在顺序栈中 它始终指向栈底 即 top base 可作为栈空的标记 每当插入新的 栈顶元素时 指针 top 增 1 删除栈顶元素时 指针 top 减 1 2 2 算法设计 为了实现算符优先算法 可以使用两个工作栈 一个称为 OPTR 用以寄存运算符 另一个称做 OPND 用以寄存操作数或运算结果 1 首先置操作数栈为空栈 表达式起始符 为运算符栈的栈底元素 2 依次读入表达式 若是操作符即进 OPND 栈 若是运算符则和 OPTR 栈的栈顶运算符比较优 先权后作相应的操作 直至整个表达式求值完毕 即 OPTR 栈的栈顶元素和当前读入的字符均为 数据结构课程设计 第 2 页 2 3 ADT 描述 ADT Stack 数据对象 D ElemSet i 1 2 n n 0 i a i a 数据对象 R1 i 2 n 1 ii aa 1 i aDai 约定端为栈顶 端为栈底 n a i a 基本操作 InitStack char top int Stacksize Operator 定义整型栈 typedef struct int base int top int Stacksize Operand 3 2 主要算法流程图 或算法伪代码 1 Precede char c1 char c2 判断运算符优先权 返回优先权高的 数据结构课程设计 第 4 页 算符间的优先关系如下 用一维数组存储 49 种情况 switch c1 i 为下面 array 的横标 case i 0 break case i 1 break case i 2 break case i 3 break case i 4 break case i 5 break case i 6 break switch c2 j 为下面 array 的纵标 case j 0 break case j 1 break case j 2 break case j 3 break case j 4 break case j 5 break case j 6 break return array 7 i j 返回运算符 array 7 i j 为对应的 c1 c2 优先关系 北京理工大学珠海学院计算机科学技术学院 第 5 页 2 int EvalExpr 主要操作函数 算法概要流程图 利用该算法对算术表达式 3 7 2 求值操作过程如下 步骤OPTR 栈OPND 栈输入字符主要操作 1 3 7 2 Push OPND 3 2 3 7 2 Push OPTR 3 3 7 2 Push OPNR 4 37 2 Push OPND 7 5 3 7 2 Push OPNR 6 3 72 Push OPND 2 7 3 7 2 Operate 7 2 8 3 5 Pop OPTR 9 3 5 Operate 3 5 10 15 Return GetTop2 OPND 表 2 算法伪代码如下 int EvalExpr 主要操作函数 c ptr while c GetTop OPTR if In c 不是运算符即进栈 数据结构课程设计 第 6 页 if In ptr 1 ptr ptr 1 m atoi ptr 取字符串前面的数字段 n num m Push2 ptr ptr n c ptr else switch Precede GetTop OPTR c case 退栈并将运算结果入栈 theta Pop b Pop2 a Pop2 Push2 break 4 软件测试 软件测试 1 运行成功后界面 北京理工大学珠海学院计算机科学技术学院 第 7 页 2 输入正确的表达式后 3 更改表达式 输入有 2 位数的整数调试 数据结构课程设计 第 8 页 5 心得体会 心得体会 这次课程设计让我更加了解大一学到的 C 和这个学期学到的数据结构 课设题目要 求不仅要求对课本知识有较深刻的了解 同时要求程序设计者有较强的思维和动手能力 和更加了解编程思想和编程技巧 这次课程设计让我有一个深刻的体会 那就是细节决定成败 编程最需要的是严谨 如何的严谨都不过分 往往检查了半天发现错误发生在某个括号 分号 引号 或者数 据类型上 就像我在写 EvalExpr 函数时 忘了指针的地址符值不用加 号 这一点小小 的错误也耽误了我几十分钟 所以说细节很重要 程序设计时 也不要怕遇到错误 在实际操作过程中犯的一些错误还会有意外的收 获 感觉课程设计很有意思 在具体操作中这学期所学的数据结构的理论知识得到巩固 达到课程设计的基本目的 也发现自己的不足之出 在以后的上机中应更加注意 同时 体会到 C 语言具有的语句简洁 使用灵活 执行效率高等特点 发现上机的重要作用 特别算术表达式有了深刻的理解 这个程序是我们 3 个人完成的 同时我认为我们的工作是一个团队的工作 团队需 要个人 个人也离不开团队 必须发扬团结协作的精神 某个人的离群都可能导致导致 整项工作的失败 实习中只有一个人知道原理是远远不够的 必须让每个人都知道 否 则一个人的错误 就有可能导致整个工作失败 团结协作是我们成功的一项非常重要的 保证 而这次课程设计也正好锻炼我们这一点 这也是非常宝贵的 最后 感谢老师在这次课程设计的悉心指导 祝老师身体健康 工作顺利 最后 感谢老师在这次课程设计的悉心指导 祝老师身体健康 工作顺利 参考文献参考文献 1 数据结构 C 语言版 严蔚敏 清华大学出版社 2 C 语言程序设计 丁峻岭 中国铁道出版社 3 C 程序设计 谭浩强 清华大学出版社 附附 录录 程序源代码 北京理工大学珠海学院计算机科学技术学院 第 9 页 include include include define NULL 0 define OK 1 define ERROR 1 define STACK INIT SIZE 100 define STACKINCREMENT 20 定义字符类型栈 typedef struct int stacksize char base char top Stack 定义整型栈 typedef struct int stacksize int base int top Stack2 全局变量 Stack OPTR 定义运算符栈 Stack2 OPND 定义操作数栈 char expr 255 存放表达式串 char ptr expr 构造运算符栈 int InitStack Stack s s base char malloc STACK INIT SIZE sizeof char if s base return ERROR s top s base s stacksize STACK INIT SIZE return OK 构造操作数栈 int InitStack2 Stack2 s s base int malloc STACK INIT SIZE sizeof int if s base return ERROR s top s base s stacksize STACK INIT SIZE return OK 数据结构课程设计 第 10 页 判断字符是否是运算符 int In char ch return ch ch ch ch ch ch ch 运算符栈顶插入新元素 int Push Stack s char ch s top ch s top return 0 操作数栈顶插入新元素 int Push2 Stack2 s int ch s top ch s top return 0 删除运算符栈顶元素 char Pop Stack s char p s top p s top return p 删除操作数栈顶元素 int Pop2 Stack2 s int p s top p s top return p 返回运算符栈顶元素 char GetTop Stack s char p s top 1 return p 返回操作数栈顶元素 int GetTop2 Stack2 s 北京理工大学珠海学院计算机科学技术学院 第 11 页 int p s top 1 return p 返回高优先权的运算符 char Precede char c1 char c2 int i 0 j 0 static char array 49 switch c1 i 为下面 array 的横标 case i 0 break case i 1 break case i 2 break case i 3 break case i 4 break case i 5 break case i 6 break switch c2 j 为下面 array 的纵标 case j 0 break case j 1 break case j 2 break case j 3 break case j 4 break case j 5 break case j 6 break return array 7 i j 返回运算符 操作函数 int Operate int a char op int b switch op 数据结构课程设计 第 12 页 case return a b case return a b case return a b case return a b return 0 返回操作数长度 int num int n char p 10 itoa n p 10 把整型转换成字符串型 n strlen p return n 主要操作函数 int EvalExpr char c theta x int n m int a b c ptr while c GetTop OPTR if In c if In ptr 1 ptr ptr 1 m atoi ptr 取字符串前面的数字段 n num m Push2 ptr ptr n c ptr else switch Pr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工业废水处理与节能环保的综合策略
- 工业无线通信中的机器学习技术
- 工业大数据的采集与处理技术
- 工业机器人技术及其在制造业中的应用探讨
- 工业污染控制与智能环境监测的融合
- 工业生产中的资源循环利用技术
- 工业绿色生产技术创新与发展趋势
- 工业污染防治的国际经验与启示
- 工业涂料生产中的环保技术及措施
- 工业设计中的创新方法与技术应用
- 《我和我的同学》的主题班会
- 高中生知识抢答竞赛题
- 抖音直播知识考试题库200题(含答案)
- 廉洁教育班会(共37张PPT)
- 2023高效制冷机房系统应用技术规程
- 通信电子线路创新训练教程部分习题答案
- 前沿科学与创新学习通超星课后章节答案期末考试题库2023年
- 柳州职业技术学院辅导员考试题库
- 药学综合知识与技能
- 汽车维修服务清单
- 2022年天水市武山县社区工作者招聘考试试题
评论
0/150
提交评论