ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:391.82KB ,
资源ID:9115969      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9115969.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构课程设计指导书.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构课程设计指导书.docx

1、数据结构课程设计指导书数据结构课程设计指导书长春工业大学人文信息学院 2011-31前 言1.1概述数据结构是一门实践性很强的课程,只靠读书和做习题是不能提高实践能力的,尤其是在数据结构中要解决的问题更接近于实际。数据结构的课程设计是对学生的一种全面的综合训练,与程序设计语言课程中的课程设计不同,数据结构课程设计属于创造性的活动,需要学生自己进行问题分析、进行数据结构和算法的设计、再上机调试和测试程序。数据结构课程设计是一种自主性很强的学习过程,其教学目的主要有两个: 深化理解和掌握书本上的理论知识,将书本上的知识变“活”; 理论和实践相结合,使学生学会如何把书本上有关数据结构和算法的知识用于

2、解决实际问题,培养数据结构的应用能力和软件工程所需要的实践能力。为了达到上述目的,本学期数据结构课程设计题目如下:1数组的循环移位2约瑟夫环问题3求二叉树中叶子结点的个数4判断两棵二叉树是否相似5信号放大器6Huffman编码7机器调度问题8医院选址问题9简单个人电话号码查询系统10各种排序算法时间性能的比较11机器调度问题1.1.2 实验的一般步骤1. 预备知识的学习需要学生在实验前复习实验所用的预备知识。这需要学生有自主的学习意识和整理知识的能力。2. 上机前的准备将实现提示中给出的数据类型和算法转换为对应的程序,并进行静态检查,尽量减少语法错误和逻辑错误。上机前的充分准备能高效利用机时,

3、在有限的时间内完成更多的实验内容。3. 上机调试和测试程序调试程序是一个辛苦但充满乐趣的过程,也是培养程序员素质的一个重要环节。很多学生都有这样的经历:化了好长时间去调试程序,错误却越改越多。究其原因,一方面,是对调试工具不熟悉,出现了错误提示却不知道这种错误是如何产生的;另一方面,没有认识到努力预先避免错误的重要性,也就是对程序进行静态检查。对程序进行测试,首先需要设计测试数据。在数据结构中测试数据需要考虑两种情况: 一般情况:例如循环的中间数据、随机产生的数据等; 特殊情况:例如循环的边界条件、数据结构的边界条件等。4. 课程设计报告在课程设计完成相关题目后要总结和整理的报告。2题目概述2

4、.1数组的循环移位1. 问题描述对于一个给定的整型数组循环右移i位。2. 基本要求 在原数组中实现循环右移,不另外申请空间; 时间性能尽可能好; 分析算法的时间复杂度。3. 设计思想将这个问题看作是把数组ab转换成数组ba(a代表数组的前i个元素,b代表数组中余下的n-i个元素),先将a逆置得到arb,再将b逆置得到arbr,最后将整个arbr逆置得到(arbr)r=ba。设Reverse函数执行将数组元素逆置的操作,对abcdefgh向左循环移动3个位置的过程如下:Reverse(0, i-1); /得到cbadefgh Reverse(i, n-1); /得到cbahgfedReverse

5、(0, n-1); /得到defghabc具体分析过程请参见主教材第一章思想火花。4. 算法描述2.2 约瑟夫环问题1. 问题描述 设有编号为1,2,n的n(n0)个人围成一个圈,每个人持有一个密码m,从第1个人开始报数,报到m时停止报数,报m的人出圈,再从他的下一个人起重新报数,报到m时停止报数,报m的出圈,如此下去,直到所有人全部出圈为止。当任意给定n和m后,设计算法求n个人出圈的次序。2. 基本要求 建立模型,确定存储结构; 对任意n个人,密码为m,实现约瑟夫环问题; 出圈的顺序可以依次输出,也可以用一个数组存储。3. 设计思想首先,设计实现约瑟夫环问题的存储结构。由于约瑟夫环问题本身具

6、有循环性质,考虑采用循环链表,为了统一对表中任意结点的操作,循环链表不带头结点。将循环链表的结点定义为如下结构类型:struct Node int data; /编号 Node *next; ;其次,建立一个不带头结点的循环链表并由头指针first指示。具体算法请参见2.1.2自行设计。最后,设计约瑟夫环问题的算法。下面给出伪代码描述,操作示意图如图2-1所示。23 求二叉树中叶子结点的个数1. 问题描述 已知一棵二叉树,求该二叉树中叶子结点的个数。2. 基本要求 采用二叉链表作存储结构; 设计递归算法求叶子结点的个数。3. 设计思想 求二叉树中叶子结点的个数,即求二叉树的所有结点中左、右子树

7、均为空的结点个数之和。因此可以将此问题转化为遍历问题,在遍历中“访问一个结点”时判断该结点是不是叶子,若是则将计数器累加。算法如下:24 判断两棵二叉树是否相似1. 问题描述设计算法判断给定的两棵二叉树是否相似。两棵二叉树当且仅当满足以下条件,称这两棵二叉树是相似的: 他们都为空或都只有一个根结点; 他们的左右子树也相似。2. 基本要求 采用二叉链表作存储结构; 设计递归算法判断两棵二叉树是否相似。3. 设计思想由二叉树相似的定义,得到如下判定两棵二叉树s和t是否相似的递归函数Like: 若s=t=NULL,则s和t相似,即Like(s, t)=1; 若s和t中有一个为NULL,另一个不为NU

8、LL,则s和t不相似,即Like(s, t)=0; 进一步判断s的左子树和t的左子树、s的右子树和t的右子树是否相似。具体算法如下:2.5 信号放大器1. 问题描述天然气经过管道网络从其生产基地输送到消耗地,在传输过程中,其性能的某一个或几个方面可能会有所衰减(例如气压)。为了保证信号衰减不超过容忍值,应在网络中的合适位置放置放大器以增加信号(例如电压)使其与源端相同。设计算法确定把信号放大器放在何处,能使所用的放大器数目最少并且保证信号衰减不超过给定的容忍值。2. 基本要求 建立模型,设计数据结构; 设计算法完成放大器的放置; 分析算法的时间复杂度。3. 设计思想为了简化问题,假设分布网络是

9、二叉树结构,源端是树的根结点,信号从一个结点流向其孩子结点,树中的每一结点(除了根)表示一个可以用来放置放大器的位置。如下图是一个网络示意图,边上标出的是从父结点到子结点的信号衰减量。对于网络中任一结点i,设d(i)表示结点i与其父结点间的衰减量,D(i)为从结点i到结点i的子树中任一叶子结点的衰减量的最大值,并有如下递推公式:在此公式中,要计算某结点的D值,必须先计算其孩子结点的D值,因而必须后序遍历二叉树,当访问一个结点时,计算其D值。例如,D(B)=maxD(D)+d(D),D(E)=4,若容忍值为3,则在B点或其祖先的任意一点放置放大器,并不能减少B与其后代的衰减量,必须在D点放置一个

10、放大器或在其孩子结点放置一个或多个放大器。若在结点D 处放置一个放大器,则D(B)=2。根据上述分析,设计如下存储结构: struct element int D; / 该结点的衰减量 int d; / 父结点的衰减量 bool boost; /当且仅当本处设置放大器,则boost为true ; struct BiNode element data; BiNode *lchild,*rchild; ;计算并放置放大器的伪代码为:26 Huffman编码1. 问题描述设某编码系统共有n个字符,使用频率分别为w1, w2, , wn,设计一个不等长的编码方案,使得该编码系统的空间效率最好。2. 基

11、本要求 设计数据结构; 设计编码算法; 分析时间复杂度和空间复杂度。3. 设计思想 利用Huffman编码树求得最佳的编码方案。根据哈夫曼算法,建立哈夫曼树时,可以将哈夫曼树定义为一个结构型的一维数组HuffTree,保存哈夫曼树中各结点的信息,每个结点包括:权值、左孩子、右孩子、双亲,如下图所示。由于哈夫曼树中共有2n-1个结点,并且进行n-1次合并操作,所以该数组的长度为2n-1。构造哈夫曼树的伪代码如下: 在哈夫曼树中,设左分支为0,右分支为1,从根结点出发,遍历整棵哈夫曼树,求得各个叶子结点所表示字符的哈夫曼编码。27 TSP问题1. 问题描述所谓TSP问题是指旅行家要旅行n个城市,要

12、求各个城市经历且仅经历一次,并要求所走的路程最短。该问题又称为货郎担问题、邮递员问题、售货员问题,是图问题中最广为人知的问题。2. 基本要求 上网查找TSP问题的应用实例; 分析求TSP问题的全局最优解的时间复杂度; 设计一个求近似解的算法; 分析算法的时间复杂度。3. 设计思想对于TSP问题,一种最容易想到的也肯定能得到最佳解的算法是穷举法,即考虑所有可能的旅行路线,从中选择最佳的一条。但是用穷举法求解TSP问题的时间复杂度为(n!),当n大到一定程度后是不可解的。本实验只要求近似解,可以采用贪心法求解:任意选择某个城市作为出发点,然后前往最近的未访问的城市,直到所有的城市都被访问并且仅被访

13、问一次,最后返回到出发点。为便于查找离某顶点最近的邻接点,可以采用邻接矩阵存储该图。算法用伪代码描述如下:28 医院选址问题1. 问题描述n个村庄之间的交通图可以用有向网图来表示,图中边上的权值表示从村庄i到村庄j的道路长度。现在要从这n个村庄中选择一个村庄新建一所医院,问这所医院应建在哪个村庄,才能使所有的村庄离医院都比较近?2. 基本要求 建立模型,设计存储结构; 设计算法完成问题求解; 分析算法的时间复杂度。3. 设计思想医院选址问题实际是求有向图中心点的问题。首先定义顶点的偏心度。设图G=(V,E),对任一顶点k,称E(k)=maxd(i, k)(iV)为顶点k的偏心度。显然,偏心度最

14、小的顶点即为图G的中心点。如图6-2(a)所示是一个带权有向图,其各顶点的偏心度如图(b)所示。医院选址问题的算法用伪代码描述如下:29 简单个人电话号码查询系统1. 问题描述人们在日常生活中经常需要查找某个人或某个单位的电话号码,本实验将实现一个简单的个人电话号码查询系统,根据用户输入的信息(例如姓名等)进行快速查询。2. 基本要求 在外存上,用文件保存电话号码信息; 在内存中,设计数据结构存储电话号码信息; 提供查询功能:根据姓名实现快速查询; 提供其他维护功能:例如插入、删除、修改等。3. 设计思想 由于需要管理的电话号码信息较多,而且要在程序运行结束后仍然保存电话号码信息,所以电话号码

15、信息采用文件的形式存放到外存中。在系统运行时,需要将电话号码信息从文件调入内存来进行查找等操作,为了接收文件中的内容,要有一个数据结构与之对应,可以设计如下结构类型的数组来接收数据: const int max=10; struct TeleNumber string name; /姓名 string phoneNumber; /固定电话号码 string mobileNumber; /移动电话号码 string email; /电子邮箱 Telemax; 为了实现对电话号码的快速查询,可以将上述结构数组排序,以便应用折半查找,但是,在数组中实现插入和删除操作的代价较高。如果记录需频繁进行插入

16、或删除操作,可以考虑采用二叉排序树组织电话号码信息,则查找和维护都能获得较高的时间性能。更复杂地,需要考虑该二叉排序树是否平衡,如何使之达到平衡。210 各种排序算法时间性能的比较1. 问题描述 对本章的各种排序方法(直接插入排序、希尔排序、起泡排序、快速排序、直接选择排序、堆排序和归并排序)的时间性能进行比较。2. 基本要求 设计并实现上述各种排序算法; 产生正序和逆序的初始排列分别调用上述排序算法,并比较时间性能; 产生随机的初始排列分别调用上述排序算法,并比较时间性能。3. 设计思想上述各种排序方法都是基于比较的内排序,其时间主要消耗在排序过程中进行的记录的比较次数和移动次数,因此,统计

17、在相同数据状态下不同排序算法的比较次数和移动次数,即可实现比较各种排序算法的目的。直接插入排序、起泡排序、直接选择排序在8.1中已经实现,请仿照8.1中的方法在其他排序算法中的适当位置插入计数器统计元素的比较次数和移动次数。211 机器调度问题1. 问题描述机器调度是指有m台机器需要处理n个作业,设作业i的处理时间为ti,则对n个作业进行机器分配,使得: 一台机器在同一时间内只能处理一个作业; 一个作业不能同时在两台机器上处理; 作业i一旦运行,则需要ti个连续时间单位。设计算法进行合理调度,使得在m台机器上处理n个作业所需要的处理时间最短。2. 基本要求 建立问题模型,设计数据结构; 设计调

18、度算法,为每个作业分配一台可用机器; 给出分配方案。3. 设计思想假设有七个作业,所需时间分别为2, 14, 4, 16, 6, 5, 3,有三台机器,编号分别为m1、m2和m3。这七个作业在三台机器上进行调度的情形如图8-2所示,阴影区代表作业的运行区间。作业4在0到16时间被调度到机器1上运行,在这16个时间单位中,机器1完成了对作业4的处理;作业2在0到14时间被调度到机器2上处理,之后机器2在14到17时间处理作业7;在机器3上,作业5在06时间完成,作业6在611时间完成,作业3在1115时间完成,作业1在1517时间完成。注意到作业i只能在一台机器上从si时刻到si +ti时间完成且任何机器在同一时刻仅能处理一个作业,因此最短调度长度为17。 在上述处理中,采用了最长时间优先(LPT)的简单调度策略。在LPT算法中,作业按其所需时间的递减顺序排列,在分配一个作业时,将其分配给最先变为空闲的机器。 下面设计完成LPT算法的存储结构。 为每个机器设计数据类型: struct MachineNode int ID; /机器号int avail; /机器可用时刻 ; 为每个作业设计数据类型: struct JobNode int ID; /作业号int time; /处理时间 ;LPT算法用伪代码描述如下:

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1