数据结构实验手册资料.docx
《数据结构实验手册资料.docx》由会员分享,可在线阅读,更多相关《数据结构实验手册资料.docx(31页珍藏版)》请在冰豆网上搜索。
数据结构实验手册资料
《数据结构实验》指导书
DataStructuresandAlgorithms
LaboratoryProjects
王金荣
2014-09-11
目录
1《数据结构实验》课程实验教学大纲--------------------------------------1
2实验准备:
如何使用VC6.0?
----------------------------------------------3
3Projects---------------------------------------------------------------------------8
3.1Project1:
算法性能测量-------------------------------------------------8
3.2Project2:
有序表归并实验---------------------------------------------10
3.3Project3:
数据转换------------------------------------------------------11
3.4Project4:
二叉树遍历实验---------------------------------------------12
3.5Project5-1:
堆排序算法实现------------------------------------------13
3.6Project5-2:
归并排序算法实现---------------------------------------14
3.7Project5-3:
快速排序算法实现---------------------------------------15
3.8Project6-1:
图的深度优先搜索---------------------------------------16
3.9Project6-2:
图的广度优先搜索---------------------------------------17
3.10Project7:
散列实验---------------------------------------------------18
4.1ACM题目-------------------------------------------------------------------19
4.1ACM1:
ACboyneedsyourhelpagain!
-------------------------------19
4.2ACM2:
JumpingtheQueue--------------------------------------------21
4.3ACM3:
Median----------------------------------------------------------23
4.4ACM4:
IgnatiusandthePrincessI------------------------------------25
5实验报告格式-----------------------------------------------------------------28
6实验报告上交说明-----------------------------------------------------------29
1《数据结构实验》课程实验教学大纲
课程中文名称:
数据结构实验
课程英文名称:
DataStructurePractices
实验课程性质:
独立设课
课程编码:
044209101
一、学时、学分
课程总学时:
34实验学时:
34
课程总学分:
1实验学分:
1
二、适用专业及年级
计算机科学与技术专业,软件工程专业,第二学期
三、实验教学目的与基本要求
“数据结构实验”的总体目标是:
通过实验使学生对课堂讲授的内容有实际的体验,加深对概念、算法、技术的理解、掌握、应用,并激发学生进一步的思考和发挥,注重培养学生的学习兴趣和创新思维。
通过实验,使学生进一步掌握VC编程环境;理解和掌握数据结构的基本问题和基本算法;具备大型程序的编程能力,特别是多文件大型工程的编程;了解ACM竞赛的赛题,掌握参加ACM竞赛的基本技能。
四、主要仪器设备
通过局域网互联、安装WindowsXP/windows7操作系统和VisualC++环境的微机。
五、实验课程内容和学时分配
序
号
实验项目
名称
实验项目内容
项目
学时
实验
属性
项目
类型
每组人数
项目要求
1
PerformanceMeasurement
VC环境配置,递归和非递归顺序搜索算法,算法性能测量方法。
4
专业
基础
设计
1
必做
2
ListandApplications
List的的基本操作的实现,并将List用于解决实际问题。
6
专业
基础
综合
1
必做
3
Stack,QueueandApplications
堆栈和队列数据结构的表示和基本操作实现,堆栈和队列的应用方法。
6
专业
基础
综合
1
必做
4
BinaryTree
二叉树的表示方法和各遍历算法及其他基本操作,二叉树应用。
6
专业
基础
综合
1
必做
5
AnACMProblem
用数据结构相关知识解决ACM竞赛问题。
4
专业
基础
综合
1
选做
6
SortingAlgorithms
各种内部排序算法的实现,将排序算法用于解决实际问题。
4
专业
基础
验证
1
必做
7
GraphandApplications
图的表示及基本操作的实现,图的应用。
4
专业
基础
综合
1
必做
注:
1.实验项目名称,表达要简洁准确;
2.实验属性,分“基础”、“专业基础”、“专业”。
按课程代码的第3位进行识别,第3位≤3的为“基础”,第3位=4的为“专业基础”,第3位=5的为“专业”。
3.项目类型,分“演示”、“验证”、“综合”、“设计研究”、“其他”。
4.项目要求,分“必做”、“选做”。
六、成绩考核
(1)实验成绩的构成:
平时成绩占50%,实验考核占50%,其它占0%。
(2)评分标准(按构成分类说明):
平时成绩:
自编讲义《数据结构实验指导书》中已经明确规定每个实验的目的、任务、主要步骤和评分标准。
教师以此为依据,根据学生通过上交的实验报告和实验源代码确定其完成数量和质量、进行评分。
实验考核:
期末考试安排闭卷上机考试,考试题目从平时课堂试验中随机抽取。
七、实验教科书、参考书
(一)教科书
《数据结构实验指导书》袁贞明,王金荣编,自编讲义
(二)参考书
1.《数据结构与算法分析》MarkAllenWeiss,陈越改编,人民邮电出版社,2005.08
2.《数据结构(C语言)》EllisHorowitz,李建中等译,机械工业出版社,2006.07.
2实验准备:
如何使用visualstudio2010编写一个c++程序?
3Projects
3.1Project1:
算法性能测量
(1)问题描述
随机生成为N个随机整数,请分别用“选择排序法”和“希尔排序法”对其进行从小到大的排序,并测试不同规模N下两算法的运行时间。
(2)任务
实现选择排序法,算法见教材P11-Program1.4;
实现希尔排序法,算法附后;
分折选择排序法的时间和空间复杂度;
当规模N分别取1000、2000、4000、8000、16000、32000、64000时,测试四个函数的运行时间,将所测结果填入表1中。
*画出函数运行时间T随着规模N的变化趋势图(可以用PPT、Matlab画)。
(3)生成随机整数的方法
生成方法如下图所示,程序开头需要加上“stdlib.h”头文件。
(4)函数运行时间测试方法
为测试一个C函数的运行时间,需要使用头文件“time.h”,具体测试方法参见第1.6.1节,如下所示:
注:
当一个函数的运行时间小于一个tick(毫秒),则其所测时间为0.0,为了测试这种情况下函数的运行时间,我们可以将该函数重复运行K次,再测试其总运行时间(“TotalTime”),然后将该时间除以K即得该函数的一次运行时间(“Duration”)。
此处的K要求足够大,使得总运行时间不能少于100毫秒。
表1四个函数的运行时间统计(秒)
---
N
1000
2000
4000
8000
16000
32000
64000
SelectionSort
Iterations(K)
TotalTime(sec)
Duration(sec)
ShellSort
Iterations(K)
TotalTime(sec)
Duration(sec)
(5)希尔排序算法
3.2Project2:
有序表归并实验
(1)问题描述
对任意输入的两个按值非递减有序的整数序列,写一程序将它们归并成一个按值非递减有序序列。
(2)输入描述
文本文件“input.txt”中保存了n个测试用例,文件以-1结束。
每个用例的第一行m1表示第一个待归并有序序列的元素个数,第二行为该序列的m1个元素,第三行m2表示第二个待归并有序序列的元素个数,第四行为该序列的m2个元素。
(3)输出描述
输出结果保存在文本文件“output.txt”中。
对于每个测试用例均有二行输出,第一行输出“Case#:
##”,#表示用例的编号(1…n),##表示归并后有序序列的元素个数;第二行输出##个按值非递减有序元素。
(4)输入示例
5
1481030
7
242035506086
3
3845100
4
3850100120
-1
(5)输出示例
Case1:
12
1244810203035506086
Case2:
7
38384550100100120
3.3Project3:
数据转换
(1)问题描述
对任意输入的十进制正整数,写一程序将其转换成二进制表示。
要求首先实现StackADT,然后用栈的基本操作完成该程序。
(2)输入描述
文本文件“input.txt”中保存了n个小于32768的正整数,文件以-1结束。
(3)输出描述
输出结果保存在文本文件“output.txt”中,文件每一行输出“#--->##”,#表示十进制表示的正整数,##为其二进制表示结果。
(4)输入示例
20
16
34
45
100
-1
(5)输出示例
20--->10100
16--->10000
34--->100010
45--->101101
100--->1100100
3.4Project4:
二叉树遍历实验
(1)Problemdescription
Createbinarytreeasfollow(Figure-1)incomputer,writeoutthefunctionsofinOrder,preOrder,postOrderandlevelOrder,andusethemtotraversalthebinarytree.Andcomputetheleafnumberandheightofthebinarytree.
Hint:
Youmaychoosesuitablerepresentation,suchaslinkedrepresentationisoftenused.
Figure-1abinarytree
(2)Stepsandrestrictconditions
Step1. Writethefunctionofcreatetocreateatreebyinputdata.TheinputformatofthebinarytreeinFigure-1isas:
ABD#G##CE##FH###.
Step 2. WriterecursiveversionfunctionsofinOrder,preOrderandpostOrdertotraversalthetree.
Step 3. SelectasuitablerepresentationtoimplementstackADT,whichmustatleasthasfivebasicoperations:
IsFull,IsEmpty,PushandPop.Theelementtypeinthestackispointerofnode.
Step 4. ImplementQueueADTrepresentedbycircularqueue,whichhassevenbasicoperations:
IsEmpty,IsFull,AddQ,DeleteQ.Theelementtypeinthequeueispointerofnode.
Step 5. Writeaniterativeversionofinorder,thenameisiterInorder()toinordertraversaltree.
Step 6. Writeafunctionforlevelordertraversalofbinarytree,thenameislevelOrder.
Step7.Writeafunctiontocomputetheleafnumberofthebinarytree,thenameisleaf.
Step8.Writeafunctiontocomputetheheightofthebinarytree,thenameisheight.
3.5Project5-1:
堆排序算法实现
(1)问题描述
对于任一无序正整数序列,写一程序用堆排序算法将其排序成按值非递减有序序列。
(2)输入描述
文本文件“input.txt”中保存了n个测试用例,文件以-1结束。
每个用例的第一行m表示待排序正整数序列的元素个数,第二行为该序列的m个正整数。
(3)输出描述
输出结果保存在文本文件“output.txt”中。
对于每个测试用例均有二行输出,第一行输出“Case#:
##”,#表示用例的编号(1…n),##表示排序后有序序列的元素个数,第二输出##个按值非递减有序元素。
(4)输入示例
5
1018430
7
356050220486
3
3810045
-1
(5)输出示例
Case1:
5
1481030
Case2:
7
242035506086
Case3:
3
3845100
3.6Project5-2:
归并排序算法实现
(1)问题描述
对于任一无序正整数序列,写一程序用归并排序算法将其排序成按值非递减有序序列。
(2)输入描述
文本文件“input.txt”中保存了n个测试用例,文件以-1结束。
每个用例的第一行m表示待排序正整数序列的元素个数,第二行为该序列的m个正整数。
(3)输出描述
输出结果保存在文本文件“output.txt”中。
对于每个测试用例均有二行输出,第一行输出“Case#:
##”,#表示用例的编号(1…n),##表示排序后有序序列的元素个数,第二输出##个按值非递减有序元素。
(4)输入示例
5
1018430
7
356050220486
3
3810045
-1
(5)输出示例
Case1:
5
1481030
Case2:
7
242035506086
Case3:
3
3845100
3.7Project5-3:
快速排序算法实现
(1)问题描述
对于任意的无序正整数序列,写一程序用快速排序算法将其排序成按值非递减有序序列。
其中直接插入排序算法见附录。
(2)输入描述
文本文件“input.txt”中保存了n个测试用例,文件以-1结束。
每个用例的第一行m表示第一个待排序整数序列的元素个数,第二行为该序列的m个元素。
(3)输出描述
输出结果保存在文本文件“output.txt”中。
对于每个测试用例均有二行输出,第一行输出“Case#:
##”,#表示用例的编号(1…n),##表示排序后有序序列的元素个数,第二输出##个按值非递减有序元素。
(4)输入示例
5
1018430
7
356050220486
3
3810045
-1
(5)输出示例
Case1:
5
1481030
Case2:
7
242035506086
Case3:
3
3845100
3.8Project6-1:
图的深度优先搜索
(1)问题描述
写一程序实现图的深度优先搜索算法(DFS),并对输入的有向图输出遍历结果。
(2)输入描述
文本文件“input.txt”中保存了一个有向图的输入,文件以-1结束。
第一行表示该图的顶点数n(输入示例中为6)和弧数m(输入示例中为11);接下去m行是用(i,j,e)表示的弧,它表示从顶点i出发到顶点j的权值为e的弧。
最后几行分别表示从这些顶点出发进行DFS,输出它们的结果。
(3)输出描述
输出结果保存在文本文件“output.txt”中。
对每个开始搜索的顶点,都有一行,该行表示从该顶点出发进行DFS的结果。
(4)输入示例
611
0150
0210
0445
1215
1410
2020
2315
3120
3435
4330
533
1
3
-1
(5)输出示例
DFSFromV1:
V1V4V3V2V0
DFSFromV3:
V3V4V1V2V0
3.9Project6-2:
图的广度优先搜索
(1)问题描述
写一程序实现图的广度优先搜索算法(BFS),并对输入的有向图输出遍历结果。
(2)输入描述
文本文件“input.txt”中保存了一个有向图的输入,文件以-1结束。
第一行表示该图的顶点数n(输入示例中为6)和弧数m(输入示例中为11);接下去m行是用(i,j,e)表示的弧,它表示从顶点i出发到顶点j的权值为e的弧。
最后几行分别表示从这些顶点出发进行BFS,输出它们的结果。
(3)输出描述
输出结果保存在文本文件“output.txt”中。
对每个开始搜索的顶点,都有一行,该行表示从该顶点出发进行DFS的结果。
(4)输入示例
611
0150
0210
0445
1215
1410
2020
2315
3120
3435
4330
533
1
3
-1
(5)输出示例
3.10Project7:
Hashing
GivenahashtableofsizeN,wecandefineahashfunctionH(x)=x%N.Supposethatthelinearprobingisusedtosolvecollisions,wecaneasilyobtainthestatusofthehashtablewithagivensequenceofinputnumbers.
However,nowyouareaskedtosolvethereversedproblem:
reconstructtheinputsequencefromthegivenstatusofthehashtable.Whenevertherearemultiplechoices,thesmallestnumberisalwaystaken.
InputSpecification:
Yourprogrammustreadtestcasesfromthestandardinput.
Inputconsistsofseveraltestcases.Foreashtestcase,thefirstlinecontainsapositiveintegerN(N<=1000),whichisthesizeofthehashtable.ThenextlinecontainsNintegers,separatedbyaspace.Anegativeintegerrepresentsanemptycellinthehashtable.Itisguaranteedthatallthenon-negativeintegersaredistinctinthetable.
TheinputendswithNbeing0.ThatcasemustNOTbeprocessed.
OutputSpecification:
Foreachtestcase,outputtothestandardoutput.Printalinethatcontainstheinputsequence,withthenumbersseparatedbyaspace.Noticethattheremustbenonextraspaceattheendofeachline.
SampleInput:
11
33113123438272232-121
3
312
0
SampleOutput:
1131221