1、数据结构实验手册资料数据结构实验指导书Data Structures and AlgorithmsLaboratory Projects王金荣2014-09-11目录1数据结构实验课程实验教学大纲-12 实验准备: 如何使用VC 6.0? -33 Projects-83.1 Project 1: 算法性能测量-83.2 Project 2: 有序表归并实验-103.3 Project 3: 数据转换-113.4 Project 4: 二叉树遍历实验-123.5 Project 5-1: 堆排序算法实现-133.6 Project 5-2: 归并排序算法实现-143.7 Project 5-3:
2、 快速排序算法实现-153.8 Project 6-1: 图的深度优先搜索-163.9 Project 6-2: 图的广度优先搜索-173.10 Project 7: 散列实验-18 4.1 ACM题目-194.1 ACM 1: ACboy needs your help again!-194.2 ACM 2: Jumping the Queue-214.3 ACM 3: Median -234.4 ACM 4: Ignatius and the Princess I-255 实验报告格式-286实验报告上交说明-291数据结构实验课程实验教学大纲课程中文名称:数据结构实验 课程英文名称:Da
3、ta Structure Practices实验课程性质:独立设课课 程 编 码:044209101一、学时、学分课程总学时:34 实验学时:34课程总学分:1 实验学分:1二、适用专业及年级 计算机科学与技术专业,软件工程专业,第二学期三、实验教学目的与基本要求“数据结构实验”的总体目标是:通过实验使学生对课堂讲授的内容有实际的体验,加深对概念、算法、技术的理解、掌握、应用,并激发学生进一步的思考和发挥,注重培养学生的学习兴趣和创新思维。通过实验,使学生进一步掌握VC编程环境;理解和掌握数据结构的基本问题和基本算法;具备大型程序的编程能力,特别是多文件大型工程的编程;了解ACM竞赛的赛题,掌
4、握参加ACM竞赛的基本技能。四、主要仪器设备 通过局域网互联、安装Windows XP / windows 7操作系统和Visual C+环境的微机。五、实验课程内容和学时分配序号实验项目名 称实 验 项 目 内 容项目学时实验属性项目类型每组人数项目要求1Performance MeasurementVC环境配置,递归和非递归顺序搜索算法,算法性能测量方法。4专业基础设计1必做2List and ApplicationsList的的基本操作的实现,并将List用于解决实际问题。6专业基础综合1必做3Stack, Queue and Applications堆栈和队列数据结构的表示和基本操作实
5、现,堆栈和队列的应用方法。6专业基础综合1必做4Binary Tree二叉树的表示方法和各遍历算法及其他基本操作,二叉树应用。6专业基础综合1必做5An ACM Problem用数据结构相关知识解决ACM竞赛问题。4专业基础综合1选做6Sorting Algorithms各种内部排序算法的实现,将排序算法用于解决实际问题。4专业基础验证1必做7Graph and Applications图的表示及基本操作的实现,图的应用。4专业基础综合1必做注:1实验项目名称,表达要简洁准确;2实验属性,分“基础”、“专业基础”、“专业”。按课程代码的第3位进行识别,第3位3的为“基础”,第3位4的为“专业基
6、础”,第3位5的为“专业”。3项目类型,分“演示”、“验证”、“综合”、“设计研究”、“其他”。4项目要求,分“必做”、“选做”。六、成绩考核(1)实验成绩的构成:平时成绩占 50 %,实验考核占 50 %,其它占 0 %。(2)评分标准(按构成分类说明):平时成绩: 自编讲义数据结构实验指导书中已经明确规定每个实验的目的、任务、主要步骤和评分标准。教师以此为依据,根据学生通过上交的实验报告和实验源代码确定其完成数量和质量、进行评分。实验考核:期末考试安排闭卷上机考试,考试题目从平时课堂试验中随机抽取。七、实验教科书、参考书(一)教科书数据结构实验指导书袁贞明,王金荣编,自编讲义(二)参考书1
7、.数据结构与算法分析Mark Allen Weiss,陈越改编,人民邮电出版社,2005.082.数据结构(C语言) Ellis Horowitz,李建中等译, 机械工业出版社,2006.07.2 实验准备: 如何使用visual studio 2010编写一个c+程序? 3 Projects3.1 Project 1: 算法性能测量(1)问题描述随机生成为N个随机整数,请分别用“选择排序法”和“希尔排序法”对其进行从小到大的排序,并测试不同规模N下两算法的运行时间。(2)任务实现选择排序法,算法见教材P11-Program 1.4;实现希尔排序法,算法附后;分折选择排序法的时间和空间复杂度;
8、当规模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次,再测试其总运行时间 (“To
9、tal Time”),然后将该时间除以K即得该函数的一次运行时间(“Duration”)。此处的K要求足够大,使得总运行时间不能少于100毫秒。表1 四个函数的运行时间统计(秒)-N1000200040008000160003200064000SelectionSortIterations (K)Total Time (sec)Duration (sec)ShellSortIterations (K)Total Time (sec)Duration (sec)(5)希尔排序算法 3.2 Project 2: 有序表归并实验(1)问题描述 对任意输入的两个按值非递减有序的整数序列,写一程序将它们
10、归并成一个按值非递减有序序列。(2)输入描述 文本文件“input.txt”中保存了n个测试用例,文件以-1结束。每个用例的第一行m1表示第一个待归并有序序列的元素个数,第二行为该序列的m1个元素,第三行m2表示第二个待归并有序序列的元素个数,第四行为该序列的m2个元素。(3)输出描述 输出结果保存在文本文件“output.txt”中。对于每个测试用例均有二行输出,第一行输出“Case #:#”,#表示用例的编号(1n),#表示归并后有序序列的元素个数;第二行输出#个按值非递减有序元素。(4)输入示例 5 1 4 8 10 30 7 2 4 20 35 50 60 86 3 38 45 100
11、 4 38 50 100 120 -1(5)输出示例 Case 1:121 2 4 4 8 10 20 30 35 50 60 86Case 2:738 38 45 50 100 100 1203.3 Project 3: 数据转换(1)问题描述 对任意输入的十进制正整数,写一程序将其转换成二进制表示。要求首先实现Stack ADT,然后用栈的基本操作完成该程序。(2)输入描述 文本文件“input.txt”中保存了n个小于32768的正整数,文件以-1结束。(3)输出描述 输出结果保存在文本文件“output.txt”中,文件每一行输出“#-#”,#表示十进制表示的正整数,#为其二进制表示结
12、果。(4)输入示例 20163445100-1(5)输出示例 20-1010016-1000034-10001045-101101100-11001003.4 Project 4: 二叉树遍历实验(1)Problem description Create binary tree as follow (Figure-1) in computer, write out the functions of inOrder , preOrder , postOrder and levelOrder, and use them to traversal the binary tree. And compu
13、te the leaf number and height of the binary tree.Hint: You may choose suitable representation, such as linked representation is often used.Figure-1 a binary tree(2)Steps and restrict conditionsStep 1. Write the function of create to create a tree by input data. The input format of the binary tree in
14、 Figure-1 is as : ABD#G#CE#FH#. Step2.Write recursive version functions of inOrder, preOrder and postOrder to traversal the tree.Step3.Select a suitable representation to implement stack ADT, which must at least has five basic operations: IsFull, IsEmpty, Push and Pop. The element type in the stack
15、is pointer of node.Step4.Implement Queue ADT represented by circular queue, which has seven basic operations: IsEmpty, IsFull, AddQ, DeleteQ. The element type in the queue is pointer of node.Step5.Write an iterative version of inorder, the name is iterInorder() to inorder traversal tree.Step6.Write
16、a function for level order traversal of binary tree, the name is levelOrder.Step 7. Write a function to compute the leaf number of the binary tree, the name is leaf.Step 8. Write a function to compute the height of the binary tree, the name is height.3.5 Project 5-1: 堆排序算法实现(1)问题描述 对于任一无序正整数序列,写一程序用
17、堆排序算法将其排序成按值非递减有序序列。(2)输入描述 文本文件“input.txt”中保存了n个测试用例,文件以-1结束。每个用例的第一行m表示待排序正整数序列的元素个数,第二行为该序列的m个正整数。(3)输出描述 输出结果保存在文本文件“output.txt”中。对于每个测试用例均有二行输出,第一行输出“Case #:#”,#表示用例的编号(1n),#表示排序后有序序列的元素个数,第二输出#个按值非递减有序元素。(4)输入示例 5 10 1 8 4 30 7 35 60 50 2 20 4 86 3 38 100 45 -1(5)输出示例 Case 1:51 4 8 10 30Case 2
18、:72 4 20 35 50 60 86Case 3:338 45 1003.6 Project 5-2: 归并排序算法实现(1)问题描述 对于任一无序正整数序列,写一程序用归并排序算法将其排序成按值非递减有序序列。(2)输入描述 文本文件“input.txt”中保存了n个测试用例,文件以-1结束。每个用例的第一行m表示待排序正整数序列的元素个数,第二行为该序列的m个正整数。(3)输出描述 输出结果保存在文本文件“output.txt”中。对于每个测试用例均有二行输出,第一行输出“Case #:#”,#表示用例的编号(1n),#表示排序后有序序列的元素个数,第二输出#个按值非递减有序元素。(4
19、)输入示例 5 10 1 8 4 30 7 35 60 50 2 20 4 86 3 38 100 45 -1(5)输出示例 Case 1:51 4 8 10 30Case 2:72 4 20 35 50 60 86Case 3:338 45 1003.7 Project 5-3: 快速排序算法实现(1)问题描述 对于任意的无序正整数序列,写一程序用快速排序算法将其排序成按值非递减有序序列。其中直接插入排序算法见附录。(2)输入描述 文本文件“input.txt”中保存了n个测试用例,文件以-1结束。每个用例的第一行m表示第一个待排序整数序列的元素个数,第二行为该序列的m个元素。(3)输出描述
20、 输出结果保存在文本文件“output.txt”中。对于每个测试用例均有二行输出,第一行输出“Case #:#”,#表示用例的编号(1n),#表示排序后有序序列的元素个数,第二输出#个按值非递减有序元素。(4)输入示例 5 10 1 8 4 30 7 35 60 50 2 20 4 86 3 38 100 45 -1(5)输出示例 Case 1:51 4 8 10 30Case 2:72 4 20 35 50 60 86Case 3:338 45 1003.8 Project 6-1: 图的深度优先搜索(1)问题描述写一程序实现图的深度优先搜索算法(DFS),并对输入的有向图输出遍历结果。(2
21、)输入描述文本文件“input.txt”中保存了一个有向图的输入,文件以-1结束。第一行表示该图的顶点数n(输入示例中为6)和弧数m(输入示例中为11);接下去m行是用(i,j,e)表示的弧,它表示从顶点i出发到顶点j的权值为e的弧。最后几行分别表示从这些顶点出发进行DFS,输出它们的结果。(3)输出描述 输出结果保存在文本文件“output.txt”中。对每个开始搜索的顶点,都有一行,该行表示从该顶点出发进行DFS的结果。(4)输入示例6 11 0 1 500 2 100 4 451 2 151 4 102 0 202 3 153 1 203 4 354 3 305 3 313-1(5)输出
22、示例 DFS From V1: V1 V4 V3 V2 V0 DFS From V3: V3 V4 V1 V2 V03.9 Project 6-2: 图的广度优先搜索(1)问题描述写一程序实现图的广度优先搜索算法(BFS),并对输入的有向图输出遍历结果。(2)输入描述文本文件“input.txt”中保存了一个有向图的输入,文件以-1结束。第一行表示该图的顶点数n(输入示例中为6)和弧数m(输入示例中为11);接下去m行是用(i,j,e)表示的弧,它表示从顶点i出发到顶点j的权值为e的弧。最后几行分别表示从这些顶点出发进行BFS,输出它们的结果。(3)输出描述 输出结果保存在文本文件“outpu
23、t.txt”中。对每个开始搜索的顶点,都有一行,该行表示从该顶点出发进行DFS的结果。(4)输入示例6 11 0 1 500 2 100 4 451 2 151 4 102 0 202 3 153 1 203 4 354 3 305 3 313-1(5)输出示例 3.10 Project7: HashingGiven a hash table of size N, we can define a hash function H(x) = x % N. Suppose that the linear probing is used to solve collisions, we can easi
24、ly obtain the status of the hash table with a given sequence of input numbers.However, now you are asked to solve the reversed problem: reconstruct the input sequence from the given status of the hash table. Whenever there are multiple choices, the smallest number is always taken. Input Specificatio
25、n: Your program must read test cases from the standard input.Input consists of several test cases. For eash test case, the first line contains a positive integer N (N = 1000), which is the size of the hash table. The next line contains N integers, separated by a space. A negative integer represents
26、an empty cell in the hash table. It is guaranteed that all the non-negative integers are distinct in the table.The input ends with N being 0. That case must NOT be processed.Output Specification: For each test case, output to the standard output. Print a line that contains the input sequence, with the numbers separated by a space. Notice that there must be non extra space at the end of each line. Sample Input: 1133 1 13 12 34 38 27 22 32 -1 2133 1 20 Sample Output: 1 13 12 21
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1