没有合适的资源?快使用搜索试试~ 我知道了~
数据结构与算法应用课程设计.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 113 浏览量
2022-05-04
20:21:51
上传
评论
收藏 423KB DOC 举报
温馨提示
试读
31页
数据结构与算法应用课程设计.doc
资源推荐
资源详情
资源评论
数据结构与算法应用综合课程设计要求与指导
数据结构是一门实践性很强的课程,只靠读书和做习题是不能提高实践能力的,尤其是
在数据结构中要解决的问题更接近于实际。所以要求学生在学习过程中,结合实际问题进行
相应的课程设计与实践,自己分析问题、设计数据结构和算法,再编写代码上机调试和测试
程序,以达到解决实际问题,培养数据结构的应用能力与实践能力。
一、 课程设计的要求
1、熟练掌握各种数据结构的逻辑结构特性、存储结构与常用操作算法;
2、能分析课程设计的相应题目,结合理论学习考虑用一种或多种数据结构来解决问题;
3、能分析并设计在某种数据结构下解决问题的步骤即算法;
4、熟练掌握面向对象程序设计思想方法与编译系统的使用方法,能较好地编写程序实
现数据结构与算法,解决实际问题
5、能较好地进行程序的静态检查与动态调试与测试
6、能按要求写好课程设计报告
二、 课程设计的目的
1、深入理解和掌握书本上的理论知识,将书本上的知识变“活”
2、理论与实践相结合,学会如何把书本上的数据结构和算法的知识用于解决实际问题,
培养数据结构的应用能力和软件工程所需要的实践能力
3、进行软件工作的规范训练,初次体会软件开发的一般简单过程
4、培养团队合作精神和良好的科学作风以及沟通能力
三、 课程设计的工作步骤
1、明确课程设计小组构成与分工
每一小组由 2 人组成,各同学可自由组合。每小组选择后面课程设计备选题目中的一个,
共同完成问题分析和任务定义、数据类型和系统设计后,2 人协商分工进行程序设计与调试。
每个同学必须有明确而又互不相同的工作任务,并保证工作量一致。在课程设计中还要注意
两人的协调与合作。
2、问题分析和任务定义
首先充分分析和理解问题,明确问题要求做什么,限制条件是什么,即明确“做什么”。
如:输入数据的类型、值的范围以及输入的形式;输出数据的类型、值的范围及输出的形式 ;
若是会话式的输入,则结束标志是什么,是否接受非法的输入,对非法输入的回答方式是什
么等等
2、数据类型和系统设计
1)逻辑设计:
对问题描述中涉及的操作对象定义相应的数据类型,并定义主程序模块和各抽象数据类
型,画出模块之间调用关系图
2)详细设计:
定义相应的存储结构(写出数据存储结构的类型定义)并写出各过程和函数的算法
3、编码实现和静态检查
1)编码实现:
把算法设计的结果用程序设计语言程序写出来。每个函数体,即不计首部和规格说明部
分,一般不要超过 40 行,最长不得超过 60 行,否则应分成更小的函数。要控制 IF 语句连续
嵌套的深度。
首先可以在一个程序文件中实现,然后做成头文件形式的软件模块,随着工作的积累,
这些成熟的软件模块也会越来越丰富,当常用的数据结构都以抽象数据类型的形式实现以后 ,
其他问题编程的工作也就会比较顺手了。抽象数据类型的实现作为头文件必须包含进工程文
件。
2) 静态检查:
通过阅读或给别人讲解自己的程序深入全面理解程序逻辑,检查是否有明显错误,加入
一些注释。可用简单的数据试人工运行程序,此时数据规模应比较小,而且考虑到各种情况 ,
如空表、空二叉树、一个结点二叉树、两个结点二叉树等各种情况。应访遍程序的各条路径
(即各分支的情况)。通过静态检查程序由于疏漏而产生的错误,也可为接下去的动态调试找
到一种“程序感觉”
4、上机准备和上机调试
首先,应熟悉 Microsoft Visual C++5.0/6.0 的开发环境。
在运行时可能发生以下三种类型的错误:语法错误、连接错误、运行错误
前两种错误一般由系统提示指出,一般按语言的语法和系统的环境要求加以改正即可。
第三种错误与算法和程序有关,大致又有两种情况:一种是因为存储结构使用不当引起
的,例如最常见的无效指针和数组下标越界等;另一种是纯粹的逻辑性错误,如程序不能正
常终止、输出与问题的要求有出入等,在很大程度上是由于控制条件考虑不周所至。这类错
误是初学数据结构编程者最易犯的毛病,而当运行出现这类错误时又往往感到束手无策。为
了从程序中忙地排除这类错误,首要是能对错误的出处准确定位,常用的简便办法是利用集
成环境提供的 Debug 功能加以定位。在程序中适当位置临时加入一些反映调试信息的输出语
句,以此来反映动态运行善有时也比较有效。调试中出现的警告性提示,也不能轻易放过,
必须究其原因排除之。
对某一组数据运行成功,并不意味程序正确。在进行整个程序的联调时,要特别注意对
多组数据模型进行试验,并分别选择几种具有一般性和特殊性的数据进行调试,用测试数据
(包括正确的数据和错误的数据)测试程序是否能得到正确结果,程序健壮性(容错处理)怎样
等?
因为本材料不是讲解 Microsoft Visual C++的专门手册性读物,有关 Visual C++本身的知
识内容的讲解,请读者参考相关的书籍。可带一本 C++程序设计教材或 Visual C++操作手册,
进行调试。
5、总结和整理课程设计报告
课程设计报告应包括以下几部分内容
1)题目、姓名、学号、完成日期,见封面附件
2)问题描述
包括题目内容,基本要求,测试数据
3)需求分析:
输入的形式和输入值的范围
输出的形式
程序所能达到的功能
测试数据要求
4)概要设计:
抽象数据类型的定义,各程序模块之间的调用关系,各类之间的继承关系
5)详细设计
定义所有类,写出每个操作的算法,主程序也可按需要写出算法,函数调用关系图
6)调试分析:
遇到的问题及解决的方法
经验与体会
7)用户使用说明
简单说明怎样使用你的程序,特别是对使用中应注意的问题加以说明
8)测试结果:
列出输入输出结果
附录:源程序
本示例中的分析、描述与实现均是在以 C 语言的形式,用到了 C++对 C 的扩展,代码是
在 VC++6.0 中调试成功的。有些同学反映主程序不会写,大家可在示例程序中了解简单主
程序的写法,并在这里通过两个例子体会主函数如何调用各模块,从而统一协调地完成要求
的。需要强调的是决不是仅有此一种方法,事实上,在主函数中常作的类似的事情都还可以
在主程序中写成其他函数,以让主函数所作的主要工作能更清晰。
9)总结:详细注明小组中每位同学负责的工作、课程设计过程的收获、遇到问题以及解
决问题的思路和方法、程序调试能力的思考、对数据结构这门课程的思考、在课程设计过程
中对《数据结构》课程的认识等内容
10)附录:将程序清单及程序附上
四、 评分办法:
课程设计成绩=上机考勤 10%+程序及其调试 40%(程序的规范性 10%、功能实现情
况 20%、程序调试能力 10%)+设计报告质量 50%(流程规范 15%,设计合理 15% ,报告
撰写 15%,分工合理 5%)
程序的规范:应养成良好的程序书写规范,需要注意:注释,命名规则,格式等。源代
码作为设计报告附件提交。
流程规范性:报告中显示出来的设计过程按规范的步骤进行:问题分析、系统设计、代
码编写、测试与调试,每个步骤均在报告中描述清楚。
设计合理性:在查询参考文献、问题分析的基础上,认真完成系统的设计,模块设计合
理、数据类型设计合理、类的设计合理、算法设计合理
报告撰写:认真书写设计报告,要求:逻辑合理、内容翔实、格式规范、排版工整、语
句通顺。
无设计报告者以及严重抄袭他人设计者,成绩为不及格。
五、 课程设计报告示例:
本材料以一个简单的题目来说明课程设计报告的格式与内容,每一个题目都不同,每个同学课程设
计后的心得体会与收获与不同,请注意准确完整地描述课程设计的步骤与成果。
数据结构课程设计报告
封面(见封面模板)
一、问题描述
1、题目内容:
利用链表表示家电信息,实现链表的初始化、创建表、插入、 删除、更新数据、打印、查询以及链
式结构的有序表与文件之间的数据转换。
2、基本要求:由用户输入一组数据包括家电名称、品牌型号、单价、及数量, 以结点中单价值的非
减序列体现着有序性。
3、测试数据:链表初始数据为{{彩电、TCL 超平 29 英寸、2100 元、234 台},{冰箱、海尔、1800
元、 302 台},{洗衣机、小鸭、1200 元、105 台}}
二、需求分析
1、本程序用以实现家电信息的初始化、创建表、插入、删除、更新数据、打印、查询以及有序表与
文件之间的数据转换。
2、程序运行后显示提示信息,由用户输入家电相关信息来创建有序链表。
3、在创建好后,用户可根据需要选择所要的操作。
4、数据信息应包含家电名称、品牌型号、单价、及数量。
三、概要设计
为实现上述程序功能,应以有序链表表示家电信息。为此需要有序表和结构体两个 抽象数据类型。
1、结构体的抽象数据类型定义为:
ADT goods{
数据对象:d={char name[10];
char sname[10];
int price;
int num;
} ADT goods
2、有序表的抽象数据类型定义为:
ADT OrderedList{
lnode *listcreate_l(goods *a,int n)
初始条件:
运行结果:
} ADT OrderedList
数据关系:同属于一个结点
基本操作:lnode *listcreate_l(goods *a,int n)
操作结果:构造一个有序链表。
node *listinsert_l(lnode *l,goods a)
初始条件:有序链表已经存在。
操作结果:插入一个结点,此结点信息为 a。
lnode *listdelete_l(lnode *l,goods e)
初始条件:有序链表已经存在。
操作结果:删除 e 结点。
lnode *listchange_l(lnode *l,goods e)
初始条件:有序链表已经存在。
操作结果:用 e 的信息更换有序表中与 e 同名的结点的信息。
void listsearch_l(lnode *l,char *sname)
初始条件:有序链表已经存在。
操作结果:查询结点中名为 sname 的结点的相关信息。
void listtraverse_l(lnode *l)
初始条件:有序链表已经存在。
操作结果:打印有序链表中的信息。
}
3、本程序包含三个模块:
主程序模块:进行简要说明
结构体模块:进行简要说明
有序表模块:进行简要说明
模块之间的关系如图所示:(加一模块结构图)
四、详细设计
1、元素类型、结点类型、指针类型。
typedef struct {
char name[20];
char sname[20];
int price;
int num;
}goods;
2、有序表类型。
typedef struct lnode {
goods data;
struct lnode *next;
}lnode,*linklist;
部分操作实现的伪代码算法如下:
1)lnode *listcreate_l(goods *a,int n)
{
for (int k=0;k<n;++k)
{
for (int j=0;j<n-k-1;j++)
剩余30页未读,继续阅读
资源评论
老帽爬新坡
- 粉丝: 79
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功