1、数据结构课程设计指导书数据结构课程设计指导书一、课程设计目的数据结构是一门实践性较强的软件基础课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。课程设计是加强学生实践能力的一个强有力手段。本课程设计的目的就是要达到理论与实际应用相结合,使学生深化理解书本知识,获取上机实践经验,使学生能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,并培养软件工作者所需的动手能力、独立解决问题的能力。该课程设计侧重软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧,以至一整套软件工作规范的训练和科学作风的培养。通过该课程设计
2、的操作与实践,使学生真正掌握数据结构相关算法的实现及应用方法,在一定程度上提高使用数据结构相关算法的综合设计能力,具体掌握的基本能力如下:1. 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;2. 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3. 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4. 训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。二、课程设计要求学生必须仔细阅读数据结构课程设计方案,认真主动完成课程设计的要求。通过设计一个完整的程序,使学生掌握数据结构的应用,算法的编写。要
3、求如下:1. 做好上机准备:要充分认识课程设计对自己的重要性,认真做好设计前的各项准备工作。每次上机前,要事先编制好准备调试的程序,认真想好调试步骤和有关环境的设置方法,准备好有关的文件。2. 既要虚心接受老师的指导,又要充分发挥主观能动性。结合课题,独立思考,努力钻研,勤于实践,勇于创新。充分利用时间,安排好课程设计的时间计划,并在课程设计过程中不断检测自己的计划完成情况,及时向教师汇报。3. 独立思考,独立完成:课程设计中各项任务的设计和调试要求独立完成,遇到问题可以讨论,但不可以拷贝。在设计过程中,要严格要求自己,树立严肃,严密,严谨的科学态度,必须按时,按质,按量完成课程设计。不得弄虚
4、作假,不准抄袭他人内容。4. 设计的题目要求达到一定工作量(1000行以上代码),并具有一定的深度和难度。 编写出课程设计说明书,说明书不少于2000字(代码不算)。5. 课程设计按照教学要求需要两周时间完成,两周中每天(按每周5天)至少要上3-4小时的机来调试C语言设计的程序,总共至少要上机调试程序30小时。课程设计期间,无故缺席按旷课处理。6. 按照任意性(用户任意给定输入,系统能够完成正确的计算),友好性(界面要友好,输入有提示,尽量展示人性化),可读性(源程序代码清晰、有层次),健壮性(用户输入非法数据时,系统要及时给出警告信息),结构性(应用程序具有良好的程序结构)要求分析设计实现。
5、7. 整个系统只能有一个执行程序,各项内容分别以不同文件存放,功能尽量模块化。三、考核方式与成绩评定1. 由指导教师根据学生完成任务的情况、课程设计报告的质量和课程设计过程中的工作态度等综合打分。成绩评定实行优秀、良好、中等、及格和不及格五个等级。2. 设计程序的检查由教师当面在计算机上检查测试,并同时对程序中的问题至少提出三个问题,学生当面回答,作为最终成绩评定的一部分;3. 独立按时完成规定的工作任务,不得弄虚作假,不准抄袭他人内容,否则成绩以不及格计。发现课程设计基本雷同,一律不及格;缺席时间达四分之一以上者,其成绩按不及格处理;上机时间内做与课设无关的事情,达五次以上者,其成绩按不及格
6、处理。4. 完成2项以下者,最好成绩为及格;完成2项至3项者,最好成绩为中;完成4项至6项者,最好成绩为良;完成7项以上,成绩为优秀。5. 成绩评定标准:平时表现:50%,上机演示:30%,设计报告:20%。四、课程设计最终需提交的内容:1. 学生应提交的资料包括: 纸质的课程设计报告1份; 程序及代码(电子文档)。该部分包括源代码和可执行文件两个部分。以电子方式提交的文件全部存在一个目录中,并对其进行压缩(用Winrar或Winzip均可),压缩后的文件按规定格式进行命名,命名格式为:班级+序号+姓名。rar(如地信051_12_张文。rar)。 将源程序、课程设计报告的电子文档按规定的文件
7、名称和格式放在所建的文件夹(各班序号)下,并拷贝到指导教师指定的文件夹中。2. 课程设计报告应包括封面、目录、正文和参考文献等部分,一律用A4纸张打印,正文用5号宋体(报告封面、内容及要求都在服务器的数据结构目录下)。3. 报告提交时间 :第21周星期三下午4点之前由学习委员收集上交,迟交无成绩。五、注意事项1. 迟到3次或缺席一次,成绩下降一个档次,迟到6次或缺席2次,成绩再下降一个档次,依次类推。2. 上机时发现玩游戏及聊天2次,成绩下降一个档次,玩游戏4次,成绩再下降一个档次,依次类推。3. 源程序和课程设计报告,缺一不可。4. 平时上机带齐C+语言程序设计、数据结构、笔、纸。六、参考实
8、例(任选)1. 内部排序算法的性能分析问题描述设计一个测试程序比较几种内部排序算法的关键字比较次数和移动次数以取得直观感受。基本要求1). 对起泡排序、直接排序、简单选择排序、快速排序、希尔排序、堆排序算法进行比较;2). 待排序表的表长不小于100,表中数据随机产生,至少用5组不同数据作比较,比较指标有:关键字参加比较次数和关键字的移动次数(关键字交换记为3次移动);数据类型可变。3). 输出比较结果。实现提示采用模版及顺序存储结构2. 线性链表基本操作的实现问题描述 线性链表的插入、删除、遍历等操作的实现。基本要求 要求生成线性表时,可以键盘上读取元素3. 表达式求解问题问题描述设计一个程
9、序,求解算术表达式。基本要求 以字符序列的形式从键盘输入语法正确的、不含变量的整数表达式,实现对算术四则混合运算表达式的求值。4. 二叉排序树的操作(创建,插入,查询,删除)5. 二叉树的遍历、线索及应用( 用递归或非递归的方法都可以)问题描述 建立二叉树,并输出二叉树的先序,中序和后序遍历序列,以及二叉树的叶子数。基本要求 要求根据读取的元素建立二叉树,能输出各种遍历。实现提示 可通过输入带空格的前序序列建立二叉链表。6. 哈夫曼编码/译码器问题描述设计一个哈夫曼编码/译码系统,对一个文本文件中的字符进行哈夫曼编码,生成编码文件;反过来,可将一个压缩文件译码还原为一个文本文件。基本要求输入一
10、个待压缩的文本文件名, 统计文本文件中各字符的个数作为权值,生成哈夫曼树;1). 将文本文件利用哈夫曼树进行编码,生成压缩文件;2). 输入一个待解压的压缩文件名称,并利用相应的哈夫曼树将编码序列译码;3). 显示指定的压缩文件和文本文件; 实现提示采用顺序存储结构建立赫夫曼树,编码采用从叶子结点到根结点的求取方法。7. 图的建立及输出任务:建立图的存储结构(图的类型可以是有向图、无向图、有向网、无向网,学生可以任选两种类型),能够输入图的顶点和边的信息,并存储到相应存储结构中,而后输出图的邻接矩阵。 要求:给出图的深度优先和广度优先遍历算法,并给出遍历过程的动态演示效果8. 最小生成树问题。
11、在n个城市之间建设网络,只需保证连通即可,求最经济的架设方法。9. 拓扑排序问题描述 建立图的存储结构,能够输入图的顶点和边的信息,并存储到相应存储结构中,再编写函数实现图的拓扑排序。基本要求 选择邻接表作为有向图的存储结构模拟整个过程,并输出拓扑排序的顶点序列。10. 校园导游咨询系统问题描述 设计一个校园导游程序, 为来访的客人提供信息查询服务。基本要求1). 设计学校的校园平面图,所含景点不少于10个,以图中顶点表示校内各景点,存放景点名称、代号、简介等信息,以边表示路径,存放路径长度等相关信息。2). 为来访客人提供图中任意景点相关信息的查询;3). 为来访客人提供从校门口到图中任意景
12、点的问路查询;4). 提供求任意两个景点之间的所有路径的功能;5). 提供校园图中多个景点的最佳访问路线查询,即求途经这多个景点的最佳(短)路径。11. 订票系统任务:通过此系统可以实现如下功能:录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;订票:可以订票(订票情况可以存在一个数据文件中,结构自己设定),如果该航班已经无票,可以提供相关可选择航班;退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订
13、票数量及航班情况,订单要有编号。修改航班信息:当航班信息改变可以修改航班数据文件要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能; 12. 运动会分数统计任务:参加运动会有n个学校,学校编号为1n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1m,女子m+1m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m=20,n对“推广广告”提建议 数据结构表达式求解 喜欢的句子数据结构课程设计算术表达式求解数据结构 2009-06-15 16:56:35 阅读986
14、评论2 字号:大中小订阅 题目:算术表达式求值演示一、 需求分析1、 为了实现算符优先算法使用两个工作栈,一个称作OPTR,用以寄存运算符;另一个称作OPND,用以寄存操作数或运算结果。2、 在操作数和操作符入栈前,通过一个函数来判别,输入的是操作数还是操作符,操作数入OPND,操作符入OPTR。3、 开始将#入操作符栈,通过一个函数来判别算术运算符的优先级。且规定#的优先级最低。在输入表达式的最后输入#,代表表达式输入结束。在表达式输入过程中,遇操作数则直接入栈。遇到运算符则与栈顶运算符比较优先级,当前运算符优先级高(前面的运算还不应执行)则当前运算符入栈,扫描下一符号;否则栈顶运算符出栈,
15、两操作数出栈,进行运算,所得结果入数栈,重新比较当前运算符(注意当前运算符未变)与新栈顶运算符。如此重复直到栈顶运算符与当前符号均为#,运算结束。4、 最初实现的加、减、乘、除及带小括号的基本运算,但考虑到实用性,后来的设计中有加上了乘方运算。在乘方运算中借用了C库中自带的乘方函数pow。二、 概要设计1、 设定栈的抽象数据类型定义:ADT Stack 数据对象: D ai | ai ElemSet, i=1,2,.,n, n0 数据关系: R1 | ai-1, aiD, i=2,.,n 约定an 端为栈顶,a1 端为栈底。 基本操作:InitStack(&S) 操作结果:构造一个空栈 S。D
16、estroyStack(&S) 初始条件:栈 S 已存在。 操作结果:栈 S 被销毁。StackEmpty(S)初始条件:栈 S 已存在。 操作结果:若栈 S 为空栈,则返回 TRUE,否则 FALE。StackLength(S)初始条件:栈 S 已存在。 操作结果:返回 S 的元素个数,即栈的长度。GetTop(S, &e) 初始条件:栈 S 已存在且非空。操作结果:用 e 返回 S 的栈顶元素。ClearStack(&S)初始条件:栈 S 已存在。 操作结果:将 S 清为空栈。Push(&S, e)初始条件:栈 S 已存在。 操作结果:插入元素 e 为新的栈顶元素。Pop(&S) 初始条件
17、:栈 S 已存在且非空。 操作结果:删除 S 的栈顶元素,并用 e 返回其值。 ADT Stack2、表达式的抽象数据类型ADT arithmetic 数据对象:D1=+、-、*、/、#, D2= a1 a2 a3 a4 基本操作: int In(int c) /判断输入字符c是否为运算符,返回1,则c为操作符,返回0则c不是操作符char precede(int top,char c)/判断当前运算符与前一个运算符的优先级,前一个运算符高于或等于当前运算符的优先级则返回, 前一个运算符小于当前运算符的优先级则返=s.stacksize) s.base=(elemtype*)realloc(s
18、.base,(s.stacksize+stack_increasement)*sizeof(elemtype); if(!(s.base) return OVERFLOW; s.top=s.base+s.stacksize; s.stacksize+=stack_increasement; * s.top+=e; return OK;(3)出栈elemtype pop(struct Sqstack &s) elemtype e; if(s.top= =s.base) return ERROR; e=*-s.top; return e;(4)取栈顶元素elemtype gettop(struct Sqstack &s) elemtype e; if(s.top=s.base) return ERROR; e=*(s.top-1); return e; 3、判断c是否是操作数代码具体设计:int In(int c) /
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1