4.程序实现:把详细设计的结果进一步求精为程序设计语言程序。同时加入一些注解和断言,使程序中逻辑概念清楚;(算法实现)
5.程序调试与测试:采用自底向上,分模块进行,即先调试低层函数。
能够熟练掌握调试工具的各种功能,设计测试数据确定疑点,通过修改程序来证实它或绕过它。调试正确后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果;
6.结果分析:程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。算法的时间、空间复杂性分析;
五。上机任务。
1.选择合适的数据结构,并定义数据结构的结构体;
2.根据程序所要完成的基本要求和程序实现提示,设计出完整的算法;
3.设计出主程序(main函数),使其成为完整的程序。
六。课程设计报告内容包括:
1.需求分析。
在该部分中叙述,每个模块的功能要求。
2.概要设计。
在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义。
3.详细设计。
各个算法实现的源程序,对每个题目要有相应的源程序(可以是一组源程序,每个功能模块采用不同的函数实现)。源程序要按照写程序的规则来编写。要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。
4.调试分析。
调试过程中所做的工作,设计的测试用例,时间复杂度等,测试数据,测试输出的结果,时间复杂度分析,和每个模块设计和调试时存在问题的思考(问题是哪些?问题如何解决?),算法的改进设想。
5.测试结果。
输入数据和输出数据示例。
6.课程设计总结可以包括:课程设计过程的收获、遇到问题、遇到问题解决问题过程的思考、程序调试能力的思考、对数据结构这门课程的思考、在课程设计过程中对《数据结构》课程的认识等内容;
七。上交相关内容要求。
上交的成功内容必须由以下三个部分组成,缺一不可。
1.上交源程序:学生按照课程设计的具体要求所开发的所有源程序(应该放到一个文件夹中);
2.上交程序的说明文件:在说明文档中应该写明上交程序所在的目录,上交程序的主程序文件名,如果需要安装,要有程序的安装使用说明;
3.课程设计报告:保存在word文档正文中,文件名要求按照“学号-姓名-课程设计题目”命名。
八。考核方式与成绩评定。
设计报告与程序源码作为考核的内容,成绩计分按优,良,中,差4级评定。
九。课程设计题目。
1.一元多项式的运算。
设计要求:计算任意两个一元多项式的加法、减法以及乘法。
基本功能:1.按照指数升序次序,输入并建立多项式a与b。
2.计算多项式a与b的和,即建立多项式a+b。
3.按照指数升序次序,输出多项式a、b、a+b。
实现提示:一元n次多项式:p(x,n)=p0+p1x1+p2x2+…+pnxn,其每一个子项都是由“系数”和“指数”两部分来组成的,因此可以将它抽象成一个由“系数、指数对”构成的线性表,其中,多项式的每一项都对应于线性表中的一个数据元素。
由于对多项式中系数为0的子项可以不记录它的指数值,对于这样的情况就不再付出存储空间来存放它了;基于此,可以采用一个带有头结点的单链表来表示一个一元多项式。
数据类型定义可描述如下:
typedef struct pnode
int coef; /系数域*/
int exp; /指数域*/
struct pnode *next; /指针域,指向下一个系数不为0的子项*/
polynode, *polylink;
polylink a, b, c; /单链表存储的多项式a、b、c*/
2.算术表达式求值。
设计要求:将任意一个算术表达式转化为逆波兰表示,并根据逆波兰表示计算表达式的值。
基本功能:算法输入:一个算术表达式,由常量、变量、运算符和括号组成(以字符串形式输入)。为简化,规定操作数只能为正整数,操作符为+、-用#表示结束。
算法输出:表达式运算结果。
实现提示:算术表达式由常量、变量、运算符和括号组成。由于不同的运算符具有不同的优先级,又要考虑括号,因此,算术表达式的求值不可能严格地从左到右进行。
因而在程序设计时,借助栈实现。设置运算符栈和运算数栈辅助分析算符优先关系。在读入表达式的字符序列的同时,完成运算符和运算数的识别处理,以及相应运算。
3. 简易家谱系统。
设计要求:输入家族成员情况,建立树结构,统计家族成员人数,能查询家族成员辈份情况。
系统功能:1. 输入、修改与删除家谱信息功能。
2. 查询功能:
1)某家谱成员的所有子孙的集合。
2) 某家谱成员的所有祖先的集合。
3) 某家谱成员的所有同辈成员的集合。
4)求某家谱成员的所有上一辈成员的集合。
5)给出两个家谱成员,确定他们的关系。
3. 统计功能。
1)统计家谱成员总人数。
2) 统计从事某种职业的人数。
实现提示:使用多叉树表示家族成员的关系。
4.哈希表及其应用。
建立一个小型信息管理系统(可以是图书、人事、学生、物资、商品等任何信息管理系统)。
基本功能:使用哈希查找表存储信息;实现查找、插入、删除、统计、输出等功能;
实现提示:利用关键字与存储位置之间的对应关系的哈希函数构造哈希表,哈希表既可以用于存储信息,也可以提高查找信息的速度。
5. 二叉排序树与平衡二叉排序树基本操作的实现。
设计要求:用二叉链表作存储结构,编写程序实现二叉排序树上的基本操作。
基本功能:用二叉链表作存储结构,编写程序实现二叉排序树上的基本操作:以回车('')为输入结束标志,输入数列l,生成二叉排序树t;对二叉排序树t作中序遍历;计算二叉排序树t的平均查找长度,输出结果;输入元素x,查找二叉排序树t,若存在含x的结点,则删除该结点,并作中序遍历;否则输出信息“无结点x”; 判断二叉排序树t是否为平衡二叉树;再用数列l,生成平衡二叉排序树bt:
当插入新元素之后,发现当前的二叉排序树bt不是平衡二叉排序树,则立即将它转换成新的平衡二叉排序树bt;计算平衡的二叉排序树bt的平均查找长度,输出结果。
实现提示:建立二插排序树采用边查找边插入的方式。查找函数采用递归的方式进行查找。
如果查找成功则不应再插入原树,否则返回当前结点的上一个结点。然后利用插入函数将该元素插入原树。对二叉树进行中序遍历采用递归函数的方式。
在根结点不为空的情况下,先访问左子树,再访问根结点,最后访问右子树。计算二插排序树的平均查找长度时,可采用类似中序遍历的递归方式,用s记录总查找长度,j记录每个结点的查找长度,s置初值为0,采用累加的方式最终得到总查找长度s。平均查找长度就等于s/i(i为树中结点的总个数)。
删除结点函数,采用边查找边删除的方式。如果没有查找到,则不对树做任何的修改;如果查找到结点,则分四种情况分别进行讨论:1、该结点左右子树均为空;2、该结点仅左子树为空;3、该结点仅右子树为空;4、该结点左右子树均不为空。
判断二插排序树是否为平衡二叉树的函数,也是采用递归函数的方式,分别判定以树中每个结点为根结点的子树是否为平衡二叉树。只要有一个子树不为平衡二叉树,则该树便不是平衡二叉树。
6.哈夫曼树的应用。
设计要求:从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树并将它存于文件hfmtree中。将已在内存中的哈夫曼树以直观的方式(比如树)显示在终端上;利用已经建好的哈夫曼树(如不在内存,则从文件htmtree中读入),对文件tobetran中的正文进行编码,然后将结果存入文件codefile中,并输出结果,将文件codefile以紧凑格式先是在终端上,每行50个**。
同时将此字符形式的编码文件写入文件codeprint中。利用已建好的哈夫曼树将文件codefile中的**进行译码,结果存入文件textfile中,并输出结果。
实现提示:在构造哈夫曼树时,可以设置一个大小为2n-1的数组ht保存哈夫曼树中各结点的信息。其中,weight域保存结点的权值,lchild和rchild域分别保存该结点的左、右孩子结点在数组ht中的序号,叶子结点的这两个指针值为空(即-1)。
为了判定一个结点是否已加入到要建立的s哈夫曼树中,可通过parent域的值来确定。初始时parent的值为-1,当结点加入到树中时,该结点parent的值为其双亲结点在数组ht中的序号。
哈夫曼树的存储结构定义述如下:
#define maxsize 10000 /*定义最大权值*/
typedef struct {
int weight;
int parent;
int lchild;
int rchild;
hnode;
7.图的遍历。
设计要求:实现图的深度优先, 广度优先遍历算法,并输出原图结构及遍历结果。
实现提示:连通图的广度优先遍历算法思想。
1)顶点v入队列。
2)当队列非空时则继续执行,否则算法结束。
3)出队列取得队头顶点v;访问顶点v并标记顶点v已被访问。
4)查找顶点v的第一个邻接顶点col。
5)若v的邻接顶点col未被访问过的,则col入队列。
6)继续查找顶点v的另一个新的邻接顶点col,转到步骤(5)。直到顶点v的所有未被访问过的邻接点处理完。转到步骤(2)。
图的深度优先遍历dfs算法是每次在访问完当前顶点后,首先访问当前顶点的一个未被访问过的邻接顶点,然后去访问这个邻接点的一个未被访问过的邻接点,这样的算法是一个递归算法。
8.矩阵相乘。
设计要求:设计一个矩阵相乘的程序,首先从键盘输入两个矩阵a,b的内容,并输出两个矩阵,输出矩阵a、b相乘的结果。
实现提示:矩阵的存储结构可采用以下形式:
/三元组结构。
typedefstruct
intr,c;//矩阵行下标和列下标。
intv;//值。
triple;
/矩阵结构。
typedefstruct
tripledata[maxsize];
intnum[maxsize];/存放各行非零元个数。
introps[maxsize+1];/存放各行第一个非零元在矩阵中的位置。
intmu,nu,tu;//矩阵的行数、列数、非零元个数。
matrix;
9.公园导游图。
设计要求:给出一张某公园的导游图,游客通过终端询问可知:从某一景点到另一景点的最短路径。
游客从公园大门进入,选一条最佳路线,使游客可以不重复地游览各景点,最后回到出口(出口就在入口旁边)。
实现提示:将导游图看作一张带权无向图,顶点表示公园的各个景点,边表示各景点之间的道路,边上的权值表示距离。利用深度优先的思想,遍历图找出一条最佳的路径,让它遍历所有景点。
利用递归的思想,往下遍历,访问标志位,若访问过在下次就不用访问。若找完一个分支在下次重新遍历程序执行是需要有描述地图的文件,并放在相应的位置。文件中开始位置存放景点个数,图存在多少条边;接着是存放景点序号、名称、相关信息;最后是存放着各个景点之间的距离矩阵。
数据结构课程设计指导书
数据结构。课。程。设。计。指。导。书。目录。一 课程设计的基本任务3 二 课程设计的基本要求3 三 课程设计的基本步骤和方法4 四 课程设计说明书 含报告的书写规范5 五 附录 课程设计大纲等内容13 一 课程设计的基本任务。数据结构是一门涉及多门课程的课程,难度较大,需要较好的c语言的程序设计和调...
数据结构课程设计指导书
数据结构。课。程。设。计。指。导。书。一 课程设计的基本任务3 二 课程设计的基本要求3 三 课程设计的基本步骤和方法4 四 课程设计说明书 含报告的书写规范5 五 附录 课程设计大纲等内容13 一 课程设计的基本任务。数据结构是一门涉及多门课程的课程,难度较大,需要较好的c语言的程序设计和调试能力...
数据结构课程设计指导书
指导书。信息工程学院计算机科学与技术专业。2013年12月。数据结构课程设计 指导书。一 课程设计题目与要求。根据课程设计题目规模,要求每个题目3人一组。分组规则如下 按照学号顺序每3人编为一组 或者自由组合 一经确定不得随意调换,题目由各组选派代表抽签确定,设计题目不得更换。选题一 教学计划编制问...