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

上传人:b****7 文档编号:8827835 上传时间:2023-02-02 格式:DOCX 页数:18 大小:102.86KB
下载 相关 举报
数据结构课程设计指导.docx_第1页
第1页 / 共18页
数据结构课程设计指导.docx_第2页
第2页 / 共18页
数据结构课程设计指导.docx_第3页
第3页 / 共18页
数据结构课程设计指导.docx_第4页
第4页 / 共18页
数据结构课程设计指导.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

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

《数据结构课程设计指导.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计指导.docx(18页珍藏版)》请在冰豆网上搜索。

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

数据结构课程设计指导

 

数据结构课程设计指导

 

 

一、设计目的

熟悉各种数据结构和运算,会使用数据结构的基本操作解决一些实际问题。

二、设计要求

在本课程设计过程中要求学生:

(1)重视课程设计环节,用严谨、科学和踏实的工作态度对待课程设计的每一项任务;

(2)按照课程设计的题目要求,独立地完成各项任务,严禁抄袭;凡发现抄袭,抄袭者与被抄袭者皆以零分计入本课程设计成绩。

凡发现实验报告或源程序雷同,涉及的全部人员皆以零分计入本课程设计成绩。

(3)认真编写课程设计报告。

课程设计报告的书写格式及要求见附录2。

三、设计步骤

1、问题分析和任务定义;

2、数据类型和系统设计;

3、编码实现和静态检查;

4、上机调试;

5、总结和整理课程设计报告。

四、考核方式和成绩评定

考核分为两个部分:

●程序运行情况:

按规定时间到机房运行程序,由老师检查运行情况。

学生能对自己的程序面对教师提问并能熟练地解释清楚。

●实验报告:

是否按规定书写实验报告的各项内容。

课程设计成绩

100%=上机检查(50%)+课程设计报告(50%)

五、上交相关内容要求

上交的成果的内容必须由以下四个部分组成,缺一不可

1.上交源程序:

学生按照课程设计的具体要求所开发的所有源程序(应该放到一个文件夹中);

2.上交程序的说明文件:

(保存在.doc中)在说明文档中应该写明上交程序所在的目录,上交程序的主程序文件名,如果需要安装,要有程序的安装使用说明;

3.课程设计报告:

(保存在word文档中,文件名要求按照"姓名-学号-课程设计报告"起名,如文件名为"张三-101-课程设计报告".doc)按照课程设计的具体要求建立的功能模块,每个模块要求按照如下几个内容认真完成;

1、需求分析

1.程序的功能;

2.输入输出的要求;

3.测试数据。

2、概要设计

 包括程序设计组成框图,程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义)。

3、详细设计

包括模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等),每个模块的算法设计说明(可以是描述算法的流程图)。

源程序要按照写程序的规则来编写。

要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。

4、调试分析

测试数据,测试输出的结果,时间复杂度分析,和每个模块设计和调试时存在问题的思考(问题是哪些?

问题如何解决?

),算法的改进设想。

5、核心源程序清单和执行结果

源程序要按照写程序的规则来编写。

要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。

附录1数据结构课程设计的具体内容

本次课程设计完成如下模块(抽签决定自己所做题目的序号)

1、一元多项式乘法

【问题描述】

已知A(x)=a0+a1x+a2x2+……+anxn和B(x)=b0+b1x+b2x2+……+bmxm,并且在A(x)和B(x)中指数相差很多,求A(x)=A(x)*B(x)。

【基本要求】

(1)设计存储结构表示一元多项式;

(2)设计算法实现一元多项式乘法;

(3)分析算法的时间复杂度和空间复杂度。

2、抽签游戏

【问题描述】

抽签是我们日常生活中经常遇到的一件事,并且其形式有很多种。

这里介绍一种抽签游戏,如图3所示,最上面一排是游戏的参加者——称为抽签者,最下面一排是签号(奖品、公差等)。

每个人依次顺着竖线往下走,当碰到横线时,即转横向前进,碰到竖线再往下,以此类推,则游戏结束后,抽签者会一一对应到最下面一排的签号。

 

【基本要求】

(1)设计存储结构存储抽签者、签号、游戏用横线、竖线等;

(2)设计算法实现抽签;

(3)存储游戏的最终结果。

【设计思想】

分析上面的抽签游戏的示例,遇到一条横线,代表这两个竖线的数据就要交换顺序,例如,原来的顺序为{A0,A1,A2,A3,A4},经过第0层横线后,顺序为{A1,A0,A3,A2,A4},再经过第1层横线后,顺序为{A1,A3,A0,A2,A4},以此类推,最后顺序为{A4,A1,A0,A2,A3},对应到{p0,p1,p2,p3,p4}。

在该游戏中,需解决以下问题:

(1)抽签游戏可以多人参与,只要加上竖线和横线即可。

那么,如何表示这些参与者呢?

解决:

假设有n个人参加,可以用一个一维数组A[n]来记录n个抽签者。

(2)签号如何存储?

解决:

签号的存储也可设计成一个一维数组p[n]来记录n个签号。

(3)如何存储游戏的最终结果?

解决:

设计一维数组B[n]存储最终的对应结果,同时在执行过程中记载中间结果。

(4)当碰到某一横线跨在第i条和第i+1条竖线上时,如何交换数据?

解决:

用一维数组B[n]来存放游戏过程中的中间结果和最终结果,通过交换B[i]和B[i+1]的值解决交换数据问题。

(5)如何表示抽签游戏的竖线和横线布局?

解决:

设计一个二维数组M[m][n],M[i][j]表示第i层上第j条和第j+1条竖线之间是否有横线,其值为0或1,1代表有横线,0代表没有横线。

图3所述示例对应的数组M如图4所示。

 

算法设计要点如下:

(1)按从上到下、由左到右的方式遍历数组M,若某元素值为1,则进行数据交换。

(2)在数据交换的过程中,用一维数组B来存放游戏过程中的顺序和最终的顺序,即:

如果M[i][j]=1,则B[j]←→B[j+1];

(3)最后B[n]即为所求;

3、信号放大器

【问题描述】

天然气经过管道网络从其生产基地输送到消耗地,在传输过程中,其性能的某一个或几个方面可能会有所衰减(例如气压)。

为了保证信号衰减不超过容忍值,应在网络中的合适位置放置放大器以增加信号(例如电压)使其与源端相同。

设计算法确定把信号放大器放在何处,能使所用的放大器数目最少并且保证信号衰减不超过给定的容忍值。

【基本要求】

(1)建立模型,设计数据结构;

(2)设计算法完成放大器的放置;

(3)分析算法的时间复杂度。

【设计思想】

为了简化问题,假设分布网络是二叉树结构,源端是树的根结点,信号从一个结点流向其孩子结点,树中的每一结点(除了根)表示一个可以用来放置放大器的位置。

图5是一个网络示意图,边上标出的是从父结点到子结点的信号衰减量。

 

对于网络中任一结点i,设d(i)表示结点i与其父结点间的衰减量,D(i)为从结点i到结点i的子树中任一叶子结点的衰减量的最大值,并有如下递推公式:

 

在此公式中,要计算某结点的D值,必须先计算其孩子结点的D值,因而必须后序遍历二叉树,当访问一个结点时,计算其D值。

例如,D(B)=max{D(D)+d(D),D(E)}=4,若容忍值为3,则在B点或其祖先的任意一点放置放大器,并不能减少B与其后代的衰减量,必须在D点放置一个放大器或在其孩子结点放置一个或多个放大器。

若在结点D处放置一个放大器,则D(B)=2。

根据上述分析,设计如下存储结构:

structelement

{

intD;//该结点的衰减量

intd;//父结点的衰减量

boolboost;//当且仅当本处设置放大器,则boost为true

};

structBiNode

{

elementdata;

BiNode*lchild,*rchild;

};

计算并放置放大器的伪代码为:

1.D(i)=0;

2.for(i的每个孩子j)

2.1如果D(j)+d(j)>容忍值,则在j处放置放大器;

2.2否则D(i)=max{D(i),D(j)+d(j)};

【思考题】本题假设分布网络是一棵二叉树结构,如果是树结构应如何设计算法?

4、TSP问题

【问题描述】

所谓TSP问题是指旅行家要旅行n个城市,要求各个城市经历且仅经历一次,并要求所走的路程最短。

该问题又称为货郎担问题、邮递员问题、售货员问题,是图问题中最广为人知的问题。

【基本要求】

(1)上网查找TSP问题的应用实例;

(2)分析求TSP问题的全局最优解的时间复杂度;

(3)设计一个求近似解的算法;

(4)分析算法的时间复杂度。

【设计思想】

对于TSP问题,一种最容易想到的也肯定能得到最佳解的算法是穷举法,即考虑所有可能的旅行路线,从中选择最佳的一条。

但是用穷举法求解TSP问题的时间复杂度为Ο(n!

),当n大到一定程度后是不可解的。

本实验只要求近似解,可以采用贪心法求解:

任意选择某个城市作为出发点,然后前往最近的未访问的城市,直到所有的城市都被访问并且仅被访问一次,最后返回到出发点。

为便于查找离某顶点最近的邻接点,可以采用邻接矩阵存储该图。

算法用伪代码描述如下:

1.任意选择某个顶点v作为出发点;

2.执行下述过程,直到所有顶点都被访问:

2.1v=最后一个被访问的顶点;

2.2在顶点v的邻接点中查找距离顶点v最近的未被访问的邻接点j;

2.2访问顶点j;

3.从最后一个访问的顶点直接回到出发点v;

【思考题】上网查找TSP问题的应用实例,写一篇综述报告。

5、医院选址问题

【问题描述】

n个村庄之间的交通图可以用有向网图来表示,图中边上的权值表示从村庄i到村庄j的道路长度。

现在要从这n个村庄中选择一个村庄新建一所医院,问这所医院应建在哪个村庄,才能使所有的村庄离医院都比较近?

【基本要求】

(1)建立模型,设计存储结构;

(2)设计算法完成问题求解;

(3)分析算法的时间复杂度。

【设计思想】

医院选址问题实际是求有向图中心点的问题。

首先定义顶点的偏心度。

设图G=(V,E),对任一顶点k,称E(k)=max{d(i,k)}(i∈V)为顶点k的偏心度。

显然,偏心度最小的顶点即为图G的中心点。

如图7(a)所示是一个带权有向图,其各顶点的偏心度如图(b)所示。

 

医院选址问题的算法用伪代码描述如下:

1.对加权有向图,调用Floyd算法,求每对顶点间最短路径长度的矩阵;

2.对最短路径长度矩阵的每列求大值,即得到各顶点的偏心度;

3.具有最小偏心度的顶点即为所求。

【思考题】图的存储结构和算法的设计需要一定的灵活性和技巧。

从医院选址问题的求解过程,你有什么感想?

6、各种排序算法时间性能的比较

【问题描述】

对各种排序方法(直接插入排序、希尔排序、起泡排序、快速排序、直接选择排序、堆排序和归并排序)的时间性能进行比较。

【基本要求】

(1)设计并实现上述各种排序算法;

(2)产生正序和逆序的初始排列分别调用上述排序算法,并比较时间性能;

(3)产生随机的初始排列分别调用上述排序算法,并比较时间性能。

【设计思想】

上述各种排序方法都是基于比较的内排序,其时间主要消耗在排序过程中进行的记录的比较次数和移动次数,因此,统计在相同数据状态下不同排序算法的比较次数和移动次数,即可实现比较各种排序算法的目的。

直接插入排序、起泡排序、直接选择排序在教材中已经实现,请仿照教材中的方法在其他排序算法中的适当位置插入计数器统计元素的比较次数和移动次数。

【思考题】如果测算每种排序算法所用实际的时间,应如何修改排序算法?

7、机器调度问题

【问题描述】

机器调度是指有m台机器需要处理n个作业,设作业i的处理时间为ti,则对n个作业进行机器分配,使得:

(1)一台机器在同一时间内只能处理一个作业;

(2)一个作业不能同时在两台机器上处理;

(3)作业i一旦运行,则需要ti个连续时间单位。

设计算法进行合理调度,使得在m台机器上处理n个作业所需要的处理时间最短。

【基本要求】

(1)建立问题模型,设计数据结构;

(2)设计调度算法,为每个作业分配一台可用机器;

(3)给出分配方案。

【设计思想】

假设有七个作业,所需时间分别为{2,14,4,16,6,5,3},有三台机器,编号分别为m1、m2和m3。

这七个作业在三台机器上进行调度的情形如图9所示,阴影区代表作业的运行区间。

作业4在0到16时间被调度到机器1上运行,在这16个时间单位中,机器1完成了对作业4的处理;作业2在0到14时间被调度到机器2上处理,之后机器2在14到17时间处理作业7;在机器3上,作业5在0~6时间完成,作业6在6~11时间完成,作业3在11~15时间完成,作业1在15~17时间完成。

注意到作业i只能在一台机器上从si时刻到si+ti时间完成且任何机器在同一时刻仅能处理一个作业,因此最短调度长度为17。

 

 

在上述处理中,采用了最长时间优先(LPT)的简单调度策略。

在LPT算法中,作业按其所需时间的递减顺序排列,在分配一个作业时,将其分配给最先变为空闲的机器。

下面设计完成LPT算法的存储结构。

·为每个机器设计数据类型:

structMachineNode

{

intID;//机器号

intavail;//机器可用时刻

};

·为每个作业设计数据类型:

structJobNode

{

intID;//作业号

inttime;//处理时间

};

LPT算法用伪代码描述如下:

1.如果作业数n≤机器数m,则

1.1将作业i分配到机器i上;

1.2最短调度长度等于n个作业中处理时间最大值;

2.否则,重复执行以下操作,直到n个作业都被分配:

2.1将n个作业按处理时间建成一个大根堆H1;

2.2将m个机器按可用时刻建立一个小根堆H2;

2.3将堆H1的堆顶作业分配给堆H2的堆顶机器;

2.4将H2的堆顶机器加上H1的堆顶作业的处理时间重新插入h2中;

2.5将堆H1的堆顶元素删除;

3.堆H2的堆顶元素就是最短调度时间;

8、运动会分数统计

【问题描述】

参加运动会有n个学校,学校编号为1……n。

比赛分成m个男子项目,和w个女子项目。

项目编号为男子1……m,女子m+1……m+w。

不同的项目取前五名或前三名积分;取前五名的积分分别为:

7、5、3、2、1,前三名的积分分别为:

5、3、2;哪些取前五名或前三名由学生自己设定。

(m<=20,n<=20)

【基本要求】

(1)可以输入各个项目的前三名或前五名的成绩;

  

(2)能统计各学校总分,

  (3)可以按学校编号、学校总分、男女团体总分排序输出;

  (4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。

  规定:

输入数据形式和范围:

20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)

  输出形式:

有中文提示,各学校分数为整型

  界面要求:

有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。

  存储结构:

学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。

(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;

测试数据:

要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。

进行程序测试,以保证程序的稳定。

测试数据及测试结果请在上交的资料中写明;

9、订票系统

【问题描述】

通过此系统可以实现如下功能:

(1)录入:

 可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)

 

(2)查询:

  可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);

  可以输入起飞抵达城市,查询飞机航班情况;

 (3)订票:

(订票情况可以存在一个数据文件中,结构自己设定)

  可以订票,如果该航班已经无票,可以提供相关可选择航班;

 (4)退票:

可退票,退票后修改相关数据文件;

  客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。

 (5)修改航班信息:

  当航班信息改变可以修改航班数据文件

【基本要求】

  根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能。

10、文章编辑

【问题描述】

输入一页文字,程序可以统计出文字、数字、空格的个数。

【基本要求】

静态存储一页文章,每行最多不超过80个字符,共N行;要求

(1)分别统计出其中英文字母数和空格数及整篇文章总字数;

(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。

存储结构使用线性表,分别用几个子函数实现相应的功能;

输入数据的形式和范围:

可以输入大写、小写的英文字母、任何数字及标点符号。

输出形式:

(1)分行输出用户输入的各行字符;

(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"(3)输出删除某一字符串后的文章;

11、停车场管理

【问题描述】

  设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。

汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。

试为停车场编制按上述要求进行管理的模拟程序。

【基本要求】

  以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。

每一组输入数据包括三个数据项:

汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:

若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。

栈以顺序结构实现,队列以链表实现。

【测试数据】

设n=2,输入数据为:

(‘A’,1,5),(‘A’,2,10),(‘D’,1,15),(‘A’,3,20),(‘A’,4,25),(‘A’,5,30),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0)。

每一组输入数据包括三个数据项:

汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,其中,‘A’表示到达;‘D’表示离去,‘E’表示输入结束。

【实现提示】

需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。

输入数据按到达或离去的时刻有序。

栈中每个元素表示一辆汽车,包含两个数据项:

汽车的牌照号码和进入停车场的时刻。

【选作内容】

  

(1)两个栈共享空间,思考应开辟数组的空间是多少?

  

(2)汽车可有不同种类,则它们的占地面积不同,收费标准也不同,如1辆客车和1.5辆小汽车的占地面积相同,1辆十轮卡车占地面积相当于3辆小汽车的占地面积。

  (3)汽车可以直接从便道上开走,此时排在它前面的汽车要先开走让路,然后再依次排到队尾。

  (4)停放在便道上的汽车也收费,收费标准比停放在停车场的车低,请思考如何修改结构以满足这种要求。

12、哈希表设计

【问题描述】

  针对某个集体中人名设计一个哈希表,使得平均查找长度不超过R,并完成相应的建表和查表程序。

【基本要求】

  假设人名为中国人姓名的汉语拼音形式。

待填入哈希表的人名共有30个,取平均查找长度的上限为2。

哈希函数用除留余数法构造,用线性探测再散列法或链地址法处理冲突。

【测试数据】

  取读者周围较熟悉的30个人名。

【选作内容】

  

(1)从教科书上介绍的集中哈希函数构造方法中选出适用者并设计几个不同的哈希函数,比较他们的地址冲突率(可以用更大的名字集合作实验)。

  

(2)研究这30个人名的特点,努力找一个哈希函数,使得对于不同的拼音名一定不发生地址冲突。

  (3)在哈希函数确定的前提下尝试各种不同处理冲突的方法,考察平均查找长度的变化和造好的哈希表中关键字的聚集性。

13、校园导游程序

【问题描述】

  用无向网表示你所在学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。

要求能够回答有关景点介绍、游览路径等问题。

【基本要求】

  

(1)查询各景点的相关信息;

  

(2)查询图中任意两个景点间的最短路径。

  (3)查询图中任意两个景点间的所有路径。

  (4)增加、删除、更新有关景点和道路的信息。

【选作内容】

  

(1)求多个景点的最佳(最短)游览路径。

  

(2)区分机动车道和人行道。

  (3)实现导游图的仿真界面。

14、集合运算

【问题描述】

使用链表来表示集合,完成集合的合并,求交集等操作。

【基本要求】

(1)用链表表示两个集合

(2)对两个集合分别从小到大排序

(3)求出两个集合的交集建立一个新的集合。

15、模式匹配问题。

【问题描述】

在教材中给出了BF算法和KMP算法。

实际上还有很多其他的模式匹配算法。

如,1977年Boyer和Moore提出了一个算法——BM算法。

BM算法较KMP算法复杂很多,尽管两者在理论上的复杂度差不多,但实际应用中,BM算法进行模式匹配的效率要远高于KMP算法。

【设计任务】

请给出关于BM算法处理过程的详细介绍,并编写和测试算法代码。

16、魔术师发牌问题。

【问题描述】

魔术师利用一副牌中的13张黑桃,预先将它们排好后叠放在一起,牌面朝下。

对观众说:

“我不看牌,只数数就可以猜到每张牌是什么,我大声数数,你们听,不信?

你们就看。

”魔术师将最上面的那张牌数为1,把它翻过来正好是黑桃A,将黑桃A放在桌子上。

然后按顺序从上到下数手上余下的牌,第二次数1、2,将第一张牌放在这些牌的下面,将第二张牌翻过来,正好是黑桃2,也将它放在桌子上;第三次数1、2、3,将前面两张依次放在这些牌的下面,再翻第三张牌正好是黑桃3。

这样依次将13张牌全翻出来,准确无误。

【设计任务】

编写程序,计算出魔术师手中的牌原始顺序是怎么排列的。

17、骑士周游问题。

【问题描述】

众所周知,国际象棋棋盘横向8列,纵向8行,共64个格子。

假设有一匹马从棋盘上任意起点出发,要求其经过63步后,不重复地遍历整个棋盘上除初始点以外的每一个格子。

【设计任务】

给出问题求解的算法过程,并编写和测试算法代码。

附录2:

课程设计说明书规范

一、课程设计说明书规范

课程设计说明书是课程设计主要成果之一,对于设计类,应包括图纸、程序、实物成果等。

1、说明书基本格式

说明书可以手写或打印,书写要用黑或蓝黑墨水,书写工整;打印时正文采用5号宋体,A4纸,页边距均为20mm,行间距采用18磅。

文中标题采用宋体加粗。

2、说明书结构及要求

(1)封面(见附录3)

包括:

题目、系别、班级、完成日期、成绩、学生姓名等项。

(2)课程设计任务书(格式见附录4)

(3)目录

要求层次清晰,给出标题及页次。

最后一项为"参考资料"。

打印时各章题序及标题用小4号黑体,其余用小4号宋体。

(4)正文

正文应按照目录所确定的顺序依次撰写,要求计算准确,论述清楚、简练、通顺,插图清晰整洁。

文中图、标及公式应规范地绘制和书写。

(5)参考资料

参考资料按下述顺序和格式书写:

[1]毛昶熙,周名德等.闸坝工程水力学与设计管理.北京:

水利电力出版社,19

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 司法考试

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

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