数据结构学院要求.docx
- 文档编号:17217445
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:16
- 大小:24.37KB
数据结构学院要求.docx
《数据结构学院要求.docx》由会员分享,可在线阅读,更多相关《数据结构学院要求.docx(16页珍藏版)》请在冰点文库上搜索。
数据结构学院要求
前言
数据结构是计算机科学的基础理论知识,也是软件设计的技术基础。
本课程设计的性质是检验理论课学习的效果以及综合运用的能力,目的是训练学生进行复杂程序设计的技能和培养良好程序设计的习惯。
本课程设计的任务是要求学生使用C++语言编程,解决具有一定规模的、具有实际意义的应用题,实现理论课所要求掌握的数据组织、存储、处理的基本方法。
本指导书由计算机与通信工程学院金保华副教授编写,由于时间仓促,难免有许多错误欢迎广大师生批评指正。
一、课程设计的基本任务
数据结构是一门涉及多门课程的课程,难度较大,需要较好的C语言的程序设计和调试能力,如果学生能够按照要求,从时间和精力上保证完全的投入,相信能够有很大的收获,学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况,及时的向教师汇报。
《数据结构》课程设计是计算机科学与技术专业的主要实践性教学环节。
在进行了专业基础课和《数据结构》课程的基础上,设计一个实际的应用软件,初步软件设计的基本方法,提高进行工程设计的基本技能及分析、解决实际问题的能力,为毕业设计和以后的工程实践打下良好的基础。
二、课程设计的基本要求
课程设计按照教学要求需要一周时间完成,总共至少要上机调试程序10小时。
对每个题目要有需求分析, 在需求分析中,将题目中要求的功能进行叙述分析,并且设计解决此问题的数据存储结构,(有些题目已经指定了数据存储的,按照指定的设计),设计或叙述解决此问题的算法,描述算法建议使用流程图,进行算法分析指明关键语句的时间复杂度。
给出实现功能的一组或多组测试数据,程序调试后,将按照此测试数据进行测试的结果列出来。
对有些题目提出算法改进方案,比较不同算法的优缺点。
如果程序不能正常运行,写出实现此算法中遇到的问题,和改进方法;2对每个题目要有相应的源程序(可以是一组源程序,即详细设计部分):
源程序要按照写程序的规则来编写。
要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。
程序能够运行,要有基本的容错功能。
尽量避免出现操作错误时出现死循环;3最后提供的主程序可以象一个应用系统一样有主窗口,通过主菜单和分级菜单调用课程设计中要求完成的各个功能模块,调用后可以返回到主菜单,继续选择其他功能进行其他功能的选择。
1、能力培养要求
①巩固和加深对数据结构的理解,提高综合运用本课程所学知识的能力。
②培养学生选用参考书,查阅手册及文献资料的能力。
培养独立思考,深入研究,分析问题、解决问题的能力。
③过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。
④够按要求编写课程设计报告书,能正确阐述设计和实验结果,正确绘制系统和程序框图。
⑤通过课程设计,培养学生严肃认真的工作作风,逐步建立正确的生产观念、经济观念和全局观念。
2、学生提交课程设计报告要求
1)设计题目
2)设计目的
3)设计内容
4)程序流程图
5)源程序
6)软件测试报告(包括所用到的数据及结果)
三、课程设计的基本步骤和方法
1、学生以自学为主,独立完成设计任务,注重学生能力的培养。
2、教师要注意按学生基础和能力提出要求,辅导时要有侧重,做到因材施教。
对基础差的学生要勤检查多指导,对能力强的学生应提出更高的要求,增加些选作内容,充分发挥其潜力。
3、教师要教书育人。
要求学生从点滴开始,每步操作都要按规定去做,以培养严肃认真的科学态度。
选定方案要考虑经济效益,坚持勤俭节约的原则。
要教育学生团结协作,遵守纪律,爱护公物。
通过设计提高业务能力,提高思想觉悟。
4、课程设计安排
①教师下达设计任务书
任务书内容包括题目、主要技术指标和要求、给定条件及原始数据、所用仪器设备和参考资料及文献等。
教师讲授必要的设计思路和设计方法。
②生完成预设计
本阶段学生应明确任务,查阅资料及文献(主要自学),掌握工程设计基本方法,确定设计方案,进行设计分析,完成预设计。
③实验阶段
经教师审查通过预设计方案后,即可进行编程调试。
实验由学生独立完成,教师定时指导。
④设计总结阶段
本阶段学生要认真完成课程设计报告书,整理技术资料,如有需要还应写出课程设计的心得体会和改进意见。
课程设计报告书包括:
设计任务及主要技术指标、设计方案及论证结果、系统的原理框图、设计程序、实验结果、实验中主要问题及故障现象的分析及设计结论等。
报告书中还应附实验数据、系统软硬件环境、使用说明及参考资料等。
四、课程设计说明书
课程设计要求学生在以下模块中选作一个
1、建立二叉树,层序、先序遍历(用递归或非递归的方法都可以)**
任务:
要求能够输入树的各个结点,并能够输出用不同方法遍历的遍历序列;分别建立建立二叉树存储结构的的输入函数、输出层序遍历序列的函数、输出先序遍历序列的函数;
二叉树是一种十分重要的树型结构。
它的特点是,树中的每个结点最多只有两棵子树,即树中任何结点的度数不得大于2。
二叉树的子树有左右之分,而且,子树的左右次序是重要的,即使在只有一棵子树的情况下,也应分清是左子树还是右子树。
数据结构描述:
#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;
适合于无向/有向图的两种常用遍历图的方法是:
1. 深度优先搜索过程(DFS)
(1) 基本思想:
假设初始状态是图中所有顶点未曾被访问,则深度优先搜索可以从图中某个顶点v出发,访问此顶点,然后依次从v的未被访问的邻接点出发深度优先遍历图,直至图中所有和v有路径相通的顶点都被访问到,则另选图中一个未曾被访问的顶点做始点,重复上述过程,直至图中所有顶点都被访问到为止。
(2) 由于深度优先搜索时,可选择同一深度邻接点中任何一个继续进行邻接点深度优先搜索,故其遍历序列不是唯一的。
2. 广度优先搜索(BFS)
(1) 基本思想:
假设从图中某个顶点v出发,在访问了v之后依次访问v的未被访问的邻接点,然后分别从这些邻接点出发一次访问它们的邻接点,并使“先访问的顶点的邻接点”先于“后访问的顶点的邻接点”被访问,直至图中所有已被访问的顶点的邻接点都被访问到。
如果此时图中还有顶点未被访问到,则另选图中一个未曾被访问的顶点做始点,重复上述过程,直至图中所有顶点都被访问到为止。
4、拓扑排序
任务:
编写函数实现图的拓扑排序。
算法思想:
首先选择一个无前驱的顶点(即入度为0的顶点,图中至少应有一个这样的顶点,否则肯定存在回路),然后从图中移去该顶点以及由他发出的所有有向边,如果图中还存在无前驱的顶点,则重复上述操作,直到操作无法进行。
如果图不为空,说明图中存在回路,无法进行拓扑排序;否则移出的顶点的顺序就是对该图的一个拓扑排序。
其抽象算法可描述为:
NonPreFirstTopSort(G){//优先输出无前趋的顶点
while(G中有人度为0的顶点)do{
从G中选择一个人度为0的顶点v且输出之;
从G中删去v及其所有出边;
}
if(输出的顶点数目<|V(G)|)
//若此条件不成立,则表示所有顶点均已输出,排序成功。
Error("G中存在有向环,排序失败!
");
}
5、各种排序
任务:
用程序实现插入法排序、起泡法改进算法排序;
利用插入排序和冒泡法的改进算法,将用户随机输入的一列数按递增的顺序排好。
输入的数据形式为任何一个正整数,大小不限。
输出的形式:
数字大小逐个递增的数列?
插入排序
<1> 基本思想
插入排序的思想就是读一个,排一个,将第1个数放入数组的第1个元素中,以后读入的数与已存入数组的数进行比较,确定它在从大到小的排列中应处的位置.将该位置以及以后的元素向后推移一个位置,将读入的新数填入空出的位置中.
希尔排序
<1> 基本思想
希尔排序法是1959年由D.L.Shell提出来的,又称减少增量的排序。
下表是以八个元素排序示范的例子.在该例中,开始时相隔4个成分,分别按组进行排序,这时每组2个成分,共4组; 然后相隔2个成分,在按组排序......最后,对所有相邻成分进行排序.
冒泡排序
<1> 基本思想
依次比较相邻的两个数,把大的放前面,小的放后面.即首先比较第1个数和第2个数,大数放前,小数放后.然后比较第2个数和第3个数......直到比较最后两个数.第一趟结束,最小的一定沉到最后.重复上过程,仍从第1个数开始,到最后第2个数.然后......
由于在排序过程中总是大数往前,小数往后,相当气泡上升,所以叫冒泡排序.
改进
上例中,可以发现,第二趟结束已经排好序.但是计算机此时并不知道已经排好序.所以,还需进行一次比较,如果没有发生任何数据交换,则知道已经排好序,可以不干了.因此第三趟比较还需进行,第四趟、第五趟比较则不必要.
快速排序
<1> 基本思想
快速排序的基本思想是基于分治策略的。
对于输入的子序列L[p..r],如果规模足够小则直接进行排序,否则分三步处理:
分解(Divide):
将输入的序列L[p..r]划分成两个非空子序列L[p..q]和L[q+1..r],使L[p..q]中任一元素的值不大于L[q+1..r]中任一元素的值。
递归求解(Conquer):
通过递归调用快速排序算法分别对L[p..q]和L[q+1..r]进行排序。
合并(Merge):
由于对分解出的两个子序列的排序是就地进行的,所以在L[p..q]和L[q+1..r]都排好序后不需要执行任何计算L[p..r]就已排好序。
这个解决流程是符合分治法的基本步骤的。
因此,快速排序法是分治法的经典应用实例之一。
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*p;
};
构。
•单链表的创建过程有以下几步:
1)定义链表的数据结构。
2)创建一个空表。
3)利用malloc()函数向系统申请分配一个节点。
4)将新节点的指针成员赋值为空。
若是空表,将新节点连接到表头;若是非空表,将新
节点接到表尾。
5)判断一下是否有后续节点要接入链表,若有转到3),否则结束。
从链表中删除一个节点有三种情况,即删除链表头节点、删除链表的中
间节点、删除链表的尾节点。
由于删除的节
点可能在链表的头,会对链表的头指针造成丢失,所以定义删除节点的函数的返回值定义为
返回结构体类型的指针。
在建立的单链表中,插入节点有三种情况,插入的节点可以在表头、表中或表尾。
假定我们按照以学号为顺序建立链表,则插入的节点依次与表中节点相比较,找到插入位置。
由于插入的节点可能在链表的头,会对链表的头指针造成修改,所以定义插入节点的函数的返回值定义为返回结构体类型的指针。
附录1课程设计任务书模板
郑州轻工业学院
课程设计任务书
题目
专业、班级学号姓名
主要内容、基本要求、主要参考资料等:
完成期限:
指导教师签名:
课程负责人签名:
年月日
附录2课程设计总结报告模板
郑州轻工业学院本科
数据结构课程设计总结报告
设计题目:
学生姓名:
系别:
计算机科学与工程
专业:
计算机科学与技术
班级:
学号:
指导教师:
年月日
一、设计题目(任选其一)
二、运行环境(软、硬件环境)
三、算法设计的思想
四、算法的流程图
五、算法设计分析
六、源代码
七、运行结果分析
八、收获及体会
附录3《数据结构》课程设计教学大纲
《数据结构课程设计》教学大纲
(计算机应用专业、软件工程专业、网络工程专业本科适用)
参考学时:
1周学分:
1课程编号:
一、本课程的性质和任务
数据结构是一门涉及多门课程的课程,难度较大,需要较好的C语言的程序设计和调试能力,如果学生能够按照要求,从时间和精力上保证完全的投入,相信能够有很大的收获,学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况,及时的向教师汇报。
二、课程设计的基本内容
课程设计要求学生在以下模块中选作一个
1、建立二叉树,层序、先序遍历(用递归或非递归的方法都可以)**
任务:
要求能够输入树的各个结点,并能够输出用不同方法遍历的遍历序列;分别建立建立二叉树存储结构的的输入函数、输出层序遍历序列的函数、输出先序遍历序列的函数;
2、赫夫曼树的建立
任务:
建立建立最优二叉树函数
要求:
可以建立函数输入二叉树,并输出其赫夫曼树
在上交资料中请写明:
存储结构、基本算法(可以使用程序流程图)、输入输出、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;
图的建立及输出
任务:
建立图的存储结构(图的类型可以是有向图、无向图、有向网、无向网,学生可以任选两种类型),能够输入图的顶点和边的信息,并存储到相应存储结构中,而后输出图的邻接矩阵。
要求:
3、拓扑排序
任务:
编写函数实现图的拓扑排序。
4、各种排序
任务:
用程序实现插入法排序、起泡法改进算法排序;
利用插入排序和冒泡法的改进算法,将用户随机输入的一列数按递增的顺序排好。
输入的数据形式为任何一个正整数,大小不限。
输出的形式:
数字大小逐个递增的数列?
5、文章编辑**
功能:
输入一页文字,程序可以统计出文字、数字、空格的个数。
静态存储一页文章,每行最多不超过80个字符,共N行;要求
(1)分别统计出其中英文字母数和空格数及整篇文章总字数;
(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。
6、存储结构使用线性表,分别用几个子函数实现相应的功能;
输入数据的形式和范围:
可以输入大写、小写的英文字母、任何数字及标点符号。
输出形式:
(1)分行输出用户输入的各行字符;
(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"(3)输出删除某一字符串后的文章;
7、作链表的插入运算建立线性链表,然后利用链表的查找、删除、计数、输出等运算反复实现链表的这些操作(插入、删除、查找、计数、输出单独写成函数的形式),并能在屏幕上输出操作前后的结果。
三、本课程设计的基本要求
课程设计按照教学要求需要一周时间完成,总共至少要上机调试程序10小时。
对每个题目要有需求分析, 在需求分析中,将题目中要求的功能进行叙述分析,并且设计解决此问题的数据存储结构,(有些题目已经指定了数据存储的,按照指定的设计),设计或叙述解决此问题的算法,描述算法建议使用流程图,进行算法分析指明关键语句的时间复杂度。
给出实现功能的一组或多组测试数据,程序调试后,将按照此测试数据进行测试的结果列出来。
对有些题目提出算法改进方案,比较不同算法的优缺点。
如果程序不能正常运行,写出实现此算法中遇到的问题,和改进方法;2对每个题目要有相应的源程序(可以是一组源程序,即详细设计部分):
源程序要按照写程序的规则来编写。
要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。
程序能够运行,要有基本的容错功能。
尽量避免出现操作错误时出现死循环;3最后提供的主程序可以象一个应用系统一样有主窗口,通过主菜单和分级菜单调用课程设计中要求完成的各个功能模块,调用后可以返回到主菜单,继续选择其他功能进行其他功能的选择。
四、学时分配建议
本课程设计两周时间集中安排,对各步工作不作统一规定,建议指导教师可按以下进度进行辅导:
课程内容
理论讲授
实验课
习题课
小计
查阅资料、搜集数据
1天
1天
分析、确定流程方案
1天
1天
上机调试
3天
3天
编制总结报告
2天
2天
合 计
7天
7天
五、其它说明
1、时间安排
建议安排在数据结构课学习结束后进行。
2、设计题目选择
学生按布置的题目任选一个,对较难的题目可以两人合作完成。
3、设计说明书要求
设计说明书应用统一纸张书写。
内容包括设计任务书,所有论述、原始资料和数据、计算及结构表格等,编写顺序建议如下:
(1)标题页
(2)设计任务书
(3)目录
(4)设计方案简介
(5)参考文献
起草人:
金保华专业负责人:
黄道颖教学院长(主任):
张建伟
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 学院 要求