数据结构课程设计指导书.docx
《数据结构课程设计指导书.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计指导书.docx(9页珍藏版)》请在冰豆网上搜索。
数据结构课程设计指导书
数据结构
课
程
设
计
指
导
书
目录
一、课程设计的基本任务…………………………………………………3
二、课程设计的基本要求…………………………………………………3
三、课程设计的基本步骤和方法…………………………………………4
四、课程设计说明书(含报告的书写规范)……………………………5
五、附录(课程设计大纲等内容)…………………………………………13
一、课程设计的基本任务
数据结构是一门涉及多门课程的课程,难度较大,需要较好的C语言的程序设计和调试能力,如果学生能够按照要求,从时间和精力上保证完全的投入,相信能够有很大的收获,学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况,及时的向教师汇报。
《数据结构》课程设计是计算机科学与技术专业的主要实践性教学环节。
在进行了专业基础课和《数据结构》课程的基础上,设计一个实际的应用软件,初步软件设计的基本方法,提高进行工程设计的基本技能及分析、解决实际问题的能力,为毕业设计和以后的工程实践打下良好的基础。
二、课程设计的基本要求
课程设计按照教学要求需要一周时间完成,总共至少要上机调试程序10小时。
对每个题目要有需求分析, 在需求分析中,将题目中要求的功能进行叙述分析,并且设计解决此问题的数据存储结构,(有些题目已经指定了数据存储的,按照指定的设计),设计或叙述解决此问题的算法,描述算法建议使用流程图,进行算法分析指明关键语句的时间复杂度。
给出实现功能的一组或多组测试数据,程序调试后,将按照此测试数据进行测试的结果列出来。
对有些题目提出算法改进方案,比较不同算法的优缺点。
如果程序不能正常运行,写出实现此算法中遇到的问题,和改进方法;2对每个题目要有相应的源程序(可以是一组源程序,即详细设计部分):
源程序要按照写程序的规则来编写。
要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。
程序能够运行,要有基本的容错功能。
尽量避免出现操作错误时出现死循环;3最后提供的主程序可以象一个应用系统一样有主窗口,通过主菜单和分级菜单调用课程设计中要求完成的各个功能模块,调用后可以返回到主菜单,继续选择其他功能进行其他功能的选择。
1、能力培养要求
①巩固和加深对数据结构的理解,提高综合运用本课程所学知识的能力。
②培养学生选用参考书,查阅手册及文献资料的能力。
培养独立思考,深入研究,分析问题、解决问题的能力。
③过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。
④够按要求编写课程设计报告书,能正确阐述设计和实验结果,正确绘制系统和程序框图。
⑤通过课程设计,培养学生严肃认真的工作作风,逐步建立正确的生产观念、经济观念和全局观念。
2、学生提交课程设计报告要求
1)设计题目
2)设计目的
3)设计内容
4)程序流程图
5)源程序
6)软件测试报告(包括所用到的数据及结果)
三、课程设计的基本步骤和方法
1、学生以自学为主,独立完成设计任务,注重学生能力的培养。
2、教师要注意按学生基础和能力提出要求,辅导时要有侧重,做到因材施教。
对基础差的学生要勤检查多指导,对能力强的学生应提出更高的要求,增加些选作内容,充分发挥其潜力。
3、教师要教书育人。
要求学生从点滴开始,每步操作都要按规定去做,以培养严肃认真的科学态度。
选定方案要考虑经济效益,坚持勤俭节约的原则。
要教育学生团结协作,遵守纪律,爱护公物。
通过设计提高业务能力,提高思想觉悟。
4、课程设计安排
①教师下达设计任务书
任务书内容包括题目、主要技术指标和要求、给定条件及原始数据、所用仪器设备和参考资料及文献等。
教师讲授必要的设计思路和设计方法。
②学生完成预设计
本阶段学生应明确任务,查阅资料及文献(主要自学),掌握工程设计基本方法,确定设计方案,进行设计分析,完成预设计。
③实验阶段
经教师审查通过预设计方案后,即可进行编程调试。
实验由学生独立完成,教师定时指导。
④设计总结阶段
本阶段学生要认真完成课程设计报告书,整理技术资料,如有需要还应写出课程设计的心得体会和改进意见。
课程设计报告书包括:
设计任务及主要技术指标、设计方案及论证结果、系统的原理框图、设计程序、实验结果、实验中主要问题及故障现象的分析及设计结论等。
报告书中还应附实验数据、系统软硬件环境、使用说明及参考资料等。
四、课程设计说明书(含报告的书写规范)
课程设计要求学生在以下模块中选作一个
1、建立二叉树,层序、先序遍历(用递归或非递归的方法都可以)**
任务:
要求能够输入树的各个结点,并能够输出用不同方法遍历的遍历序列;分别建立建立二叉树存储结构的的输入函数、输出层序遍历序列的函数、输出先序遍历序列的函数并能统计各种结点的个数及树的深度等;
数据结构描述:
#include
#defineNUM10
structnode{
intdata;
structnode*lchild;
structnode*rchild;
};
voidmake(structnode**boot,inta[]);
voidmiddle(structnode*boot);
voidleft(structnode*boot);
2、赫夫曼树的建立
任务:
建立建立最优二叉树函数
要求:
可以建立函数输入二叉树,并输出其赫夫曼树(编码)
在上交资料中请写明:
存储结构、基本算法(可以使用程序流程图)、输入输出、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;
数据结构描述:
typedefstruct
{intweight;
intparent;
intlchild;
intrchild;
}HTNode;
typedefstruct
{chared[M];
intstart;
}HTcode;
操作步骤:
定义赫夫曼树和编码的存储结构――输入赫夫曼编码的个数和权值――生成赫夫曼树――编码――输出编码。
3、图的建立及输出
任务:
建立图的存储结构(图的类型可以是有向图、无向图、有向网、无向网,学生可以任选一种类型),能够输入图的顶点和边的信息,并存储到相应存储结构中,而后输出图的邻接矩阵。
要求:
按某种遍历输出所有顶点。
数据结构描述:
typedefstructArcNode
{
intadjvex;
intweight;
structArcNode*nextarc;
}ArcNode,*AdjList;
typedefstructGraph
{
AdjListelem[MAX+1];
intvexnum;
intarcnum;
intGraphKind;
}Graph;
4、拓扑排序
任务:
编写函数实现图的拓扑排序。
算法思想:
首先选择一个无前驱的顶点(即入度为0的顶点,图中至少应有一个这样的顶点,否则肯定存在回路),然后从图中移去该顶点以及由他发出的所有有向边,如果图中还存在无前驱的顶点,则重复上述操作,直到操作无法进行。
如果图不为空,说明图中存在回路,无法进行拓扑排序;否则移出的顶点的顺序就是对该图的一个拓扑排序。
其抽象算法可描述为:
NonPreFirstTopSort(G){//优先输出无前趋的顶点
while(G中有人度为0的顶点)do{
从G中选择一个人度为0的顶点v且输出之;
从G中删去v及其所有出边;
}
if(输出的顶点数目<|V(G)|)
//若此条件不成立,则表示所有顶点均已输出,排序成功。
Error("G中存在有向环,排序失败!
");
}
5、各种排序
任务:
实现各种排序并分别时行分析
要求:
用随机数生成100个整数存入文本文件中,并对这些数进行多种方法进行排序。
至少采用三种方法实现上述问题求解(提示,可采用的方法有插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序)并将结果存入另外的文本文件中。
6、文章编辑
任务:
输入一页文字,程序可以统计出文字、数字、空格的个数。
要求:
静态存储一页文章,每行最多不超过80个字符,共N行;
1)分别统计出其中英文字母数和空格数及整篇文章总字数;
2)统计某一字符串在文章中出现的次数,并输出该次数;
3)删除某一子串,并将后面的字符前移。
存储结构使用线性表,分别用几个子函数实现相应的功能;
输入数据的形式和范围:
可以输入大写、小写的英文字母、任何数字及标点符号。
输出形式:
1)分行输出用户输入的各行字符;
2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"
3)输出删除某一字符串后的文章;
文章编辑系统功能模块:
typedefstruct_DOC_CONTEXT
{
unsignedcharContext[MAX_COL+1][MAX_LINES];
intTotalLines;/*当前文档行数*/
}DOC_CONTEXT,*PDOC_CONTEXT;
intPrintfContext(PDOC_CONTEXTpContext);
intAddLine(PDOC_CONTEXTpContext,char*szNewStr);
intInsertLine(PDOC_CONTEXTpContext,char*szNewStr,intPos);
intModifyLine(PDOC_CONTEXTpContext,char*szNewStr,intPos);
intDeleteLine(PDOC_CONTEXTpContext,intPos);
intGetStringCount(PDOC_CONTEXTpContext,char*szDemo);
intGetLetterCount(PDOC_CONTEXTpContext);
intGetDigCount(PDOC_CONTEXTpContext);
intGetSpaceCount(PDOC_CONTEXTpContext);
intGetCharCount(PDOC_CONTEXTpContext);
intSaveDocToFile(PDOC_CONTEXTpContext,char*szFileName);
intLoadDocFromFile(PDOC_CONTEXTpContext,char*szFileName);
要求完成:
输出整篇文章内容;在文章尾部追加一行;在文章指定行插入新行;修改文章指定行;删除文章指定行;统计某一字符串在文章中出现的次数;统计文章的全部字母数;统计文章的数字个数;保存文章到磁盘指定文件;加载磁盘文章文件。
7、作双链表的插入运算建立线性链表,然后利用链表的查找、删除、计数、输出等运算反复实现链表的这些操作(插入、删除、查找、计数、输出单独写成函数的形式),并能在屏幕上输出操作前后的结果。
链表节点的数据结构定义:
structnode
{
intnum;
structnode*pre;
Structnode*next;
};
要求:
单链表的创建过程有以下几步
1)定义链表的数据结构。
2)创建一个空表。
3)利用malloc()函数向系统申请分配一个节点。
4)将新节点的指针成员赋值为空。
若是空表,将新节点连接到表头;若是非空表,将新节点接到表尾。
5)判断一下是否有后续节点要接入链表,若有转到3),否则结束。
8.一元稀疏多项式相加
要求:
设计一个一元多项式加法器。
数据结构自行设定,实现如下操作:
1)输入并建立多项式;
2)两个多项式相加;
3)输出多项式:
n,c1,e1,c2,e2,…cn,en,其中,n是多项式项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列。
9.简易学生管理系统设计
要求:
选择一种数据结构实现对每个学生信息的存储,并实现如下功能
1)插入一个学生信息
2)删除一个学生信息
3)修改学生信息
4)查找学生信息
实现时要求做一个简单的界面,能让程序反复的执行不同功能。
10.哈希表设计
为班级的52个人的姓名设计一个哈希表,假设姓名用汉语拼音表示。
要求用除留余数法构造哈希函数,用平线性探测再散列法处理冲突,平均查找长度上限定为2(即小于等于2)。
附录1课程设计任务书模板
三峡大学信息与计算机学院
课程设计任务书
题目
专业、班级学号姓名
主要内容、基本要求、主要参考资料等:
完成期限:
指导教师签名:
课程负责人签名:
年月日
附录2课程设计总结报告模板
三峡大学信息与计算机学院
数据结构课程设计总结报告
设计题目:
学生姓名:
系别:
计算机软件工程
专业:
计算机软件工程
班级:
学号:
指导教师:
年月日
一、设计题目(任选其一)
二、运行环境(软、硬件环境)
三、算法设计的思想
四、算法的流程图
五、算法设计分析
六、源代码
七、运行结果分析
八、收获及体会