数据结构课程设计实验指导书.doc_第1页
数据结构课程设计实验指导书.doc_第2页
数据结构课程设计实验指导书.doc_第3页
数据结构课程设计实验指导书.doc_第4页
数据结构课程设计实验指导书.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构课程设计指导书计算机科学与技术学院2016年1月目录1前言32 顺序表与链表62.1 实验内容62.2 实现提示73 树和二叉树83.1 实验内容83.2 实现提示84 图94.1 实验内容94.2 实现提示105 赫夫曼编码115.1赫夫曼编码的应用115.2设计要求115.3 实验内容125.4 问题分析135.5 实现提示131 前言数据结构是计算机科学与技术专业的一门核心专业基础课程,它主要介绍线性结构、树型结构和图型结构的存储实现与基本操作,尤其是查找与排序算法的实现,并分析相应算法的时间、空间效率。其主要任务是培养学生的算法设计能力及良好的程序设计习惯。通过学习,要求学生掌握典型算法的设计思想及程序实现,能够根据实际问题选取合适的存储方案、设计出简洁、高效、实用的算法,并为后续课程的学习及软件开发打下良好的基础。为了更好地配合数据结构课程的实践,特编写此课程设计指导书。1.1 指导思想本次课程设计的指导思想是:1、 学习获取知识的方法;2、 提高发现问题、分析问题和解决实际问题的能力;3、 加强创新意识和创新精神;4、 加强团队的分工与合作;5、 掌握面向实际背景思考问题的方法。1.2 设计任务本次课程设计任务主要分为个人任务和小组任务两种。个人基本任务:完成第2章以及第3章中的设计任务,其中选做题可不做。小组任务:完成第4章和第5章的设计任务,其中选做题可不做。1.3 要求1、 每项目小组人员为35名。2、 每项目小组提交一份课程设计报告,内容包括:课题名称(第4、第5个任务为两个课题),课题参加人员名单和贡献度,课题的目的,课题内容,需求分析、概要设计、主要代码分析、测试结果、课题特色和创新之处、使用说明、收获与体会。3、 每人必须在完成个人任务的基础上提交个人任务的设计报告,内容包括:任务名称、目的、具体内容、需求分析、概要设计、主要代码分析、测试结果、收获与体会。无论是个人任务还是小组任务希望各小组团队合作,小组成员之间应互相讨论,互相启发。1.4 参考进度第1天,布置任务。第1、2、3天,完成第2章任务第4、5、6天,开始第3章任务。第7到10天,完成小组任务。说明:以上所指的“天”为一个时间段,也就是我们半天的上课时间。1.5 成绩评定采用小组考核和个人考核两级考核方法。1、 小组考核(1)圆满完成第4章和第5章的全部内容的小组成绩为优。(2)第4章选做题任务未完成的小组成绩为良。(3)未通过验收的项目为不及格。2、 个人考核:全部完成并经过良好测试才能评优。个人未完成选做题任务的为良;个人只完成所有个人任务的一半以上的为及格;个人成绩的评定还受项目组成绩影响。3、 小组成绩折算成个人成绩方法:小组交实验报告时同时交一份成员贡献表(该贡献表位于封面的下一页),表格式如下:学号姓名贡献度101张三120102李四90103王五90104钱六100(总计)400上表中,如果成员数为4,则贡献度总和为400。如果小组成绩为80分,则折算到个人的成绩如下:张三:80*120/100=96分李四:80*90/100=72分王五:80*90/100=72分钱六:80*100/100=80分如果某小组无此表格,则每个成员的贡献度按100计算。如果某小组的贡献度平均值大于100,则降低组长的贡献度,使得平均值为100。如果某同学折算的小组成绩超过100分,则按100分计。1.6 注意事项:1、 迟到3次或缺席一次,成绩下降一个档次,迟到6次或缺席2次,成绩再下降一个档次,依次类推。2、 上机时发现玩游戏一次,成绩下降一个档次,玩游戏二次,成绩再下降一个档次,依次类推。3、 课程设计开始前,各班的同学在班内自由组合,形成小组,每小组自行推荐小组长一人,在课程设计开始的第一天上交组长名单、小组组员名单,名单上注明班级、学号、姓名。4、 小组成员尽量坐在一起,在电脑正常的情况下,座位需要固定下来。1.7 参考书目1 严蔚敏等著, 数据结构(C语言版), 清华大学出版社 2 顺序表与链表2.1 实验内容1、顺序表的应用(1)对于顺序存储的线性表,请实现以下功能:1)实现二路归并排序算法。2)实现快速排序算法。3)实现堆排序算法。4)实现冒泡排序和选择排序算法(2)已知长度为n的线性表A采用顺序存储结构,请写一时间复杂度为0(n)、空间复杂度为0(1)的算法,该算法删除线性表中所有值为item的数据元素。要求:线性表元素个数n很大,而值为item的数据元素个数很少,要求移动元素个数尽量少;删除后的数组元素与原数组元素不必保持顺序一致。(3)编写一个主函数,调试上述算法。注:需要额外设计一个线性表初始化的函数。(4). 对上述五个排序算法,使用两个长度为50万的线性表分别测试其性能,记录其运行时间(生成线性表的时间不计算在内)。第一个:线性表内的元素值随机生成;第二个:线性表的第i个元素值为i,即本来就有序。说明:如果算法本身原因导致程序运行出错,可不做改进,在实验报告中说明现象即可。2、链表的应用(1)假设有两个按元素值递增次序排列的线性表A和B,均以单链表形式存储,里面的大部分元素对应相等,请删除一些元素(A中有而B中没有,或B中有而A中没有),使得两个有序表中保留下来的元素对应相等(相当于求集合的交集)。比如,A中元素为(1,3,5,7,8,10,13,18),B中元素为(1,3,6,8,9,10,13,15),则删除元素后A、B里的元素为(1,3,8,10,13)。(2)猴子选大王。n只猴子围成一圈,从1到m报数,报m的猴子出局。余下的猴子从第m+1只开始继续从1到m报数,报m的猴子出局。第n只猴子报数后,第1只猴子接着报数(因为围成了圈)。待整个圈只剩下一只猴子时,该猴子即为大王。n和m由用户输入,请输出当选大王的猴子的编号。(3)设有一头指针为L的带有表头结点的非循环双向链表,其每个结点中除有prev(前驱指针),data(数据)和next(后继指针)域外,还有一个访问频度域freq。在链表被起用前,其值均初始化为零。每当在链表中进行一次Locate(L,x)运算时,令元素值为x的结点中freq域的值增1,并使此链表中结点保持按访问频度非增(递减)的顺序排列,同时最近访问的结点排在频度相同的结点的最后,以便使频繁访问的结点总是靠近表头。试编写符合上述要求的Locate(L,x)运算的算法,该运算为函数过程,返回找到结点的地址,类型为指针型。(4)对于稀疏矩阵的存储,可不使用二维数组来存储,而使用链表,只存储其中的非0元素。链表中的每个结点包含的域为(行,列,值, next),如以下稀疏矩阵: 02000300060000000700则链表为:012103146327请实现两个稀疏矩阵的相加,并输出结果。要求:相加后原来的两个矩阵仍然存在。(5)在主函数中设计一个简单的菜单,分别调试上述算法。3、选做题(1)对顺序表的快速排序算法中,如何选取一个界值(又称为轴元素),影响着快速排序的效率,而且界值也并不一定是被顺序表中的一个元素。例如,我们可以用被划分序列中所有元素的平均值作为界值。编写算法实现以平均值为界值的快速排序方法。(2)设有n个待排序元素存放在一个不带表头结点的单链表中, 每个链表结点只存放一个元素, 头指针为r。试设计一个算法, 对其进行二路归并排序, 要求不移动结点中的元素, 只改各链结点中的指针, 排序后r仍指示结果链表的第一个结点。2.2 实现提示(1)顺序表的第2题:顺序表中删除值为item的元素:并未要求元素间的相对位置不变。因此可以考虑设头尾两个指针(i=1,j=n),从两端向中间移动,凡遇到值item的数据元素时,直接将右端元素左移至值为item的数据元素位置。(2)选做题的快速排序:保存划分的第一个元素。以平均值作为枢轴,进行普通的快速排序,最后枢轴的位置存入已保存的第一个元素,若此关键字小于平均值,则它属于左半部,否则属于右半部。(3)选做题的二路归并排序:先对待排序的单链表进行一次扫描, 将它划分为若干有序的子链表, 其表头指针存放在一个指针队列中。当队列不空时重复执行, 从队列中退出两个有序子链表, 对它们进行二路归并, 结果链表的表头指针存放到队列中。如果队列中退出一个有序子链表后变成空队列, 则算法结束。这个有序子链表即为所求。3 树和二叉树3.1 实验内容1.基本题(1)输入字符序列,建立二叉链表。 (2)遍历二叉树输出。(3)在二叉树中查找值为x的结点,请编写一算法用以打印值为x的结点的所有祖先,假设值为x的结点不多于1个。3.2 实现提示(1)基本题第3题:非递归后序遍历该二叉树,由于最后才访问根结点,当访问到值为x的结点时,栈中所有元素均为该结点的祖先。4 图4.1 实验内容1.有向图(1)键盘输入数据,建立一个有向图的邻接表,并输出该邻接表。(2)采用邻接表存储实现有向图的深度优先遍历。(3)试写一算法,判断以邻接表方式存储的有向图中是否存在由顶点Vi到顶点Vj的路径(ij)。(4)已有邻接表表示的有向图,请编程判断从第u顶点至第v顶点是否有简单路径,若有则印出该路径上的顶点。(5)在主函数中设计一个简单的菜单,分别调试上述算法。2.无向图 (1)建立一个无向图的邻接表,并输出该邻接表。 (2)采用邻接表存储实现无向图的深度优先遍历。 (3)无向图采用邻接表存储方式,试写出删除边(i,j)的算法,并输出深度优先遍历的结果。(4)在主函数中设计一个简单的菜单,分别调试上述算法。3.选做题:(1)最小生成树问题:若要在n个城市之间建设通信网络,只需要架设n-1条线路即可。如何以最低的经济代价建设这个通信网,是一个网的最小生成树问题。设无向图的顶点数不超过30个,并为简单起见,图中边的权值设成小于100的整数。步骤: 1)利用普里姆算法求网的最小生成树。 2)以文本形式输出生成树中各条边以及他们的权值.例.测试运行实例:对下图求最小生成树。(2)关键路径问题步骤:1、 建立AOE网的存储结构2、 对AOE网进行拓扑排序,同时按拓扑序列的次序求出各顶点事件的最早发生时间ve。3、 按拓扑序列的逆序求出各顶点事件的最迟发生时间vl。4、 根据各顶点事件的ve值和v1值,求出各活动ai的最早开始时间e(i)和最迟开始时间l(i)。若e(i)=1(i),则ai为关键活动。5、 求关健路径例.测试运行实例:对下图求出关键路径。4.2 实现提示(1)有向图第4题:以顶点u为起点,非递归深度优先遍历图,当访问到顶点v时,栈中所有元素均为路径上的顶点。5 赫夫曼编码5.1赫夫曼编码的应用赫夫曼编码的应用很广泛,利用赫夫曼树求得的用于通信的二进制编码称为赫夫曼编码。树中从根到每个叶子都有一条路径,对路径上的各分支约定:指向左子树的分支表示“0”码,指向右子树的分支表示“1”码,取每条路径上的“0”或“1”的序列作为和各个叶子对应的字符的编码,就是赫夫曼编码。通常我们把数据压缩的过程称为编码,解压缩的过程称为解码。电报通信是传递文字的二进制码形式的字符串。但在信息传递时,总希望总长度能尽可能短,即采用最短码。5.2设计要求对输入的一串电文字符实现赫夫曼编码,再对赫夫曼编码生成的代码串进行译码,输出电文字符串。假设每种字符在电文中出现的次数为Wi,编码长度为Li,电文中有n种字符,则电文编码总长为WiLi。若将此对应到二叉树上,Wi为叶结点的权,Li为根结点到叶结点的路径长度。那么,WiLi恰好为二叉树上带权路径长度。因此,设计电文总长最短的二进制前缀编码,就是以n种字符出现的频率作权,构造一棵赫夫曼树。根据设计要求和分析,要实现本设计,必须实现以下几个方面的功能:1)赫夫曼树的建立;2)赫夫曼编码的生成;3)编码文件的译码。由赫夫曼算法的定义可知,初始森林中共有n棵只含有根结点的二叉树。算法的第二步是:将当前森林中的两棵根结点权值最小的二叉树,合并成一棵新的二叉树;每合并一次,森林中就减少一棵树,产生一个新结点。显然要进行n-1次合并,所以共产生n-1个新结点,它们都是具有两个孩子的分支结点。由此可知,最终求得的赫夫曼树中一共有2n-1个结点,其中n个叶结点是初始森林的n个孤立结点。并且赫夫曼树中没有度数为1的分支结点。我们可用一个大小为2n-1的一维数组来存储赫夫曼树中的结点。操作步骤:1 输入需要编码的字符串,统计字符串中字符的种类以及各类字符的个数2. 构造赫夫曼树3. 建立赫夫曼编码,生成编码文件要编码的字符串中的字符逐一与预先生成赫夫曼树时保存的字符编码进行比较,找到之后,对该字符的编码写入代码文件,直至所有都处理完。4 编码文件的译码读取编码文件,并与原先的赫夫曼编码比较,并对其进行译码。例:运行测试实例输入需要编码的字符串(假设均为大写字母):输入:LINEARALGEBRAINTRODUCTIONOFCOMPUTERPASCALLANGUGEMICROCOMPUTER并按“回车”后显示: 译码后的字符串:LINEARALGEBRAINTRODUCTIONOFCOMPUTERPASCALLANGUGEMICROCOMPUTER5.3 实验内容对附件中的”RFCdoc.txt”统计字符出现的频率,并以此频率为依据对所有字符进行赫夫曼编码。然后,对”RFCdoc.txt”文件按照以上得到的编码规则进行编码,得到的编码输出到一个文本文件,该文件的内容仅包含0和1。比如,字符“E”对应的编码为“001”,则将三个字符“001”输出到文本文件中。编码完成后,请观察生成的编码文件的字节数,并将该数字记录到实验报告中。编码完成后,请在屏幕上输出频率最高的5个字符以及它对应的频率和赫夫曼编码。然后再对编码得到的文件进

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论