2012版《数据结构A》课程实验指导书

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2012版《数据结构A》课程实验指导书
《数据结构A》课程实验指导书
Data Structure Course Design
课程编号:06311360 学时:15 学分:1
先修课程:程序设计基础、⾯向对象程序设计
适⽤专业:计算机科学与技术、⽹络⼯程、软件⼯程
⼀、实验⽬的
《数据结构A》课程是计算机科学与技术及其相关专业的⼀门重要的专业基础课。

在课堂教学中,⽐较全⾯、概括性地讲述数据结构学科中⼀些基础性知识、重要概念及各种算法,通过该实验教学和学⽣的上机实践,将这些基础性知识、重要概念及各种算法,在计算机上编程实现,使学⽣能够达到以下实验教学⽬标:
1.掌握计算机处理数据的基本⽅法;
2.了解算法的时间及空间分析⽅法;
3.能够为实际应⽤所涉及的数据选择适当的逻辑结构、存储结构及相应的算法;
4.通过在计算机上编程实现课程中介绍的各种算法,在程序设计能⼒⽅⾯得到提
升。

⼆、上机实验总体要求
1.每位同学准备⼀个实验本,上机前作好充分的准备⼯作,预习本次实验的内容,
事先熟悉与实验有关的软硬件环境,编写好程序代码,供上机时使⽤。

2.实验时遵守实验室的规章制度,爱护实验设备,原则上每⼈固定实验设备,对
于实验设备出现的问题,要及时向指导⽼师汇报。

3.编程序过程中要注意多存盘,避免由于死机等原因造成的不必要的重复录⼊。

4.内部⽂档要求:
每个源⽂件和头⽂件都必须在⽂件⾸部的注释中注明设计者姓名,项⽬名(即我们的上机题⽬名),创建⽇期和最近⼀次修改⽇期。

包含main()函数
的源⽂件必须在⾸部注释后另加⼀段注释,简要描述⼀下程序的⽬的和⽤到
的主要数据结构。

⽂件注释格式如下:
⽂件名称:
项⽬名称:
创建者:
创建时间:
最后修改时间:
功能:
⽂件中的函数名称和简单功能描述:
⽂件中定义的全局变量和简单功能描述:
⽂件中⽤到的他处定义的全局变量及其出处:
与其他⽂件的依赖关系:
◆每个类必须包含⾸部注释块,适度地描述这个类的⽬的。

类的⾸部注释应该
紧挨着放在类的声明(⼀般在头⽂件⾥)前⾯。

类的注释格式如下:类名称:
定义该类的⽬的:
类属性:
类中函数及功能:
与其他类的关系(调⽤/被调⽤哪类对象中的什么函数):
◆每个函数必须有⾸部注释块,描述该函数的简要功能,每个参数的逻辑含义
(包括它是输⼊还是输出或者输⼊/输出),函数调⽤之前的预备条件,返回后
的处理,返回值(如果有的话),该函数要调⽤到的函数列表(如果有)。


些函数头注释可能和函数原型或函数实现放在⼀起。

应该注意到:这项要求
不仅适合于单独的函数,同样适合于类的成员函数。

函数的注释格式如下:函数名称:函数功能描述:
函数调⽤之前的预备条件:
返回后的处理:
返回值(如果有的话):
函数的输⼊参数:
函数的输出参数:
函数的抽象算法(伪码):
函数与其他对象中函数的调⽤和被调⽤关系:
◆所有局部变量或常量的声明后应该简要说明⼀下他们的含义和⽤途。

◆主要的控制结构,例如循环或分⽀结构,应该在前⾯注明将要完成什么功能。

◆采⽤清晰⼀致的缩进格式和其他格式化风格(例如括号的定位)来提⾼代码
可读性。

5.过程代码要求
◆标识符名称(常量、变量、函数、类等等)应该具有描述性,便于理解。

◆要⽤到某个常数时,最好设置⼀个常量来代替这个数字。

◆采⽤枚举类型来表⽰内部标签和状态的分类。

◆任何情况下都不要⽤全局或⽂件范围变量。

但是允许采⽤全局范围内的类型
定义(包括类定义)。

◆采⽤适当的途径传递函数参数。

当被调⽤函数需要修改实参的值时⼀般只采
⽤引⽤传参。

当被调⽤函数只需改变形参(调⽤内部)⽽保持实参不变时采
⽤传值传参。

◆采⽤string对象来存储字符串数据(除了单个字符),⽽不⽤字符数组来表⽰。

◆采⽤I/O流代替C风格的I/O。

6.⾯向对象的代码要求
◆尽量采⽤类。

不要⽤成员函数来实现结构类型。

◆⼀般来讲,建议采⽤类模板来表⽰容器型结构,如列表、树等,以提⾼可重
⽤性。

◆设计类时,每个类都具有⽐较好的完整性(即该类的数据成员和函数成员具
有⽐较好的内聚性和⼀致性,不要把不相⼲的东西凑合在⼀起,也不要把相
关的东西⽣⽣拆散)。

◆类的所有数据成员都应该是私有的。

◆很多情况下,类的某些成员函数应该也是私有的。

视情况⽽定。

◆所有访问型指针都尽可能加const修饰(以区别于引⽤型指针)。

◆如果⼀个类数据成员是⼀个指向动态分配内存的指针,要求写出析构函数来
释放内存;并写出⼀个⽤于复制对象的构造函数(copy constructor),⽽且
写出赋值操作的重载运算(assignment operator overload)。

◆仅当有必要时才采⽤继承机制。

◆尽量少使⽤MFC库中的类,可以适当地使⽤STL的类(但是,如果同学们对
于最基本的数据结构,例如栈、队列等还不熟悉的情况下,还是尽量⾃⼰来
编写基本类)。

如果要编图形界⾯,请尽量把与编译环境(如VC、C++ Builder)
有关的类限制在少数⼏个⽂件中。

也就是说,尽量把算法部分和界⾯部分的
源程序分割开来。

当然,string类例外,⼤多数情况下同学们可以⽤它来替
代chat *类型。

三、上机实验报告提交要求
按时完成各个实验,实验结束后应完成实验报告,并以打印或电⼦⽂档的形式提交。

实习报告内容参见各实验。

实验报告提交时打⼀个zip(或rar)压缩包,zip(或rar)压缩包⽂件名统⼀采⽤以下格式命名:
班级-学号-姓名-实验题号-版本号.zip
(或为:班级-学号-姓名-实验题号-版本号.rar)
例:计算机科学与技术专业2002级1班学号为03的姓名是王三的学⽣的第4个实验的第1个版本的⽂件名为:jsj021-03-王三-4-1.zip(或为j021-03-王三-4-1.rar)。

各专业对应的缩写如下:
(1)计算机科学与技术—jsj
(2)信息安全—xa
(3)⽹络⼯程—wl
(4)软件⼯程—rj
zip(或rar)压缩包中应含有:
(1)readme.txt⽂件,把你的程序运⾏环境、编译运⾏步骤、程序功能等等简
单说明⼀下。

(2)附加了⾜够注释的源程序以及相关的项⽬和资源⽂件。

四、实验安排
实验⼀单链表操作
(⼀)实验内容
单链表的创建、合并和输出。

(⼆)实验⽬的
1.熟悉⽤Visual C++进⾏程序设计的⽅法。

2.掌握单链表的创建、查找、插⼊和合并等运算。

(三)实验题⽬
本实验要求实现以下功能:
1.从键盘输⼊顺序任意的5个整数,按有序插⼊的要求⽣成第⼀个有序单链表,将该链表输出显⽰。

2.再从键盘输⼊顺序任意的5个整数,按有序插⼊的要求⽣成第⼆个有序单链表,将该链表输出显⽰。

3.将这两个有序单链表合并成⼀个有序单链表,要求使⽤两个单链表的原有空间进⾏合并,将⽣成的有序单链表输出显⽰。

【测试数据】
输⼊第⼀组整数:23 45 11 78 34
输出的有序单链表应为:11,23,34,45,78
输⼊第⼆组整数:90 13 45 66 10
输出的有序单链表应为:10,13,45,66,90
合并两个单链表,输出合并后的结果应为:
10,11,13,23,34,45,45,66,78,90
(四)实验报告
1.实验题⽬。

2.程序中使⽤的数据结构及符号说明。

3.程序的主要流程图。

4.程序主要模块的功能说明。

5.程序运⾏时的初值和运⾏结果。

6.源程序并附上注释。

7.收获及体会。

实验⼆⼆叉树操作
(⼀)实验内容
⼆叉树的建⽴和遍历。

(⼆)实验⽬的
1.进⼀步掌握指针变量的使⽤。

2.掌握⼆叉树的结构特征以及各种存储结构的特点及使⽤范围。

3.掌握⽤指针类型描述、访问和处理⼆叉树的运算。

4.掌握栈或队列的使⽤。

(三)实验题⽬
本实验要求实现以下功能:
1.按前序次序建⽴⼀棵⼆叉树,以‘#’表⽰空。

2.中序、后序遍历该⼆叉树,输出遍历序列。

3.求出该⼆叉树的深度并输出,或求出该⼆叉树的叶⼦数⽬并输出。

4.试以栈为辅助存储结构实现⼆叉树的前序⾮递归算法或以队列为辅助存储结构实现⼆叉树的层次遍历算法。

【测试数据】
输⼊以下字符串,建⽴⼆叉树:ABC##DE#G##F###
输出中序遍历序列应为:CBEGDFA
输出后序遍历序列应为:CGEFDBA
输出⼆叉树的深度应为:5
输出⼆叉树的叶⼦数⽬应为:3
(四)实验报告
1.实验题⽬。

2.程序中使⽤的数据结构及符号说明。

3.程序的主要流程图。

4.程序主要模块的功能说明。

5.程序运⾏时的初值和运⾏结果,画出该⼆叉树的形态。

6.源程序并附上注释。

7.收获及体会。

实验三图的操作
(⼀)实验内容
图的⽣成和图的遍历。

(⼆)实验⽬的
1.掌握图的基本存储⽅法——邻接表和邻接矩阵。

2.熟练掌握图的两种遍历⽅法。

(三)实验题⽬
本实验要求实现以下功能:
1.以邻接矩阵或邻接表作为存储结构建⽴⼀个⽆向图。

2.按深度优先遍历该⽆向图,输出遍历序列。

3.按⼴度优先遍历该⽆向图,输出遍历序列。

【测试数据】⽆向图如下所⽰。

1.实验题⽬。

2.程序中使⽤的数据结构及符号说明。

3.程序的主要流程图。

4.程序主要模块的功能说明。

5.程序运⾏时的初值和运⾏结果,画出该⽆向图的形态,写出其邻接矩阵或邻接表。

6.源程序并附上注释。

7.收获及体会。

实验四查找操作
(⼀)实验内容
⼆叉排序树的建⽴、⼆叉排序树中结点的查找
(⼆)实验⽬的
1.熟悉⼆叉排序树的定义。

2.理解⼆叉排序树的建⽴过程。

3.掌握⼆叉排序树中查找结点的算法。

(三)实验题⽬
本实验要求实现以下功能:
1.对从键盘输⼊的顺序任意的若⼲个正整数建⽴⼀颗⼆叉排序树,以-1作为结束。

2.按先序、中序和后序遍历该⼆叉排序树,输出每种遍历的结果。

3.从键盘输⼊⼀个整数,在⼆叉排序树中查找,给出是否查找成功的结果。

【测试数据】
输⼊序列:67 13 11 88 45 9 60 20 -1
输出先序遍历序列应为:67 13 11 9 45 20 60 88
输出中序遍历序列应为:9 11 13 20 45 60 67 88
输出后序遍历序列应为:9 11 20 60 45 13 88 67
输⼊要查找的整数:45
输出查找结果:查找成功
输⼊要查找的整数:55
输出查找结果:查找失败
1.实验题⽬。

2.程序中使⽤的数据结构及符号说明。

3.程序的主要流程图。

4.程序主要模块的功能说明。

5.程序运⾏时的初值和运⾏结果,画出该⼆叉排序树的形态。

6.源程序并附上注释。

7.收获及体会。

实验五内部排序操作
(⼀)实验内容
快速排序。

(⼆)实验⽬的
1.熟悉各种内部排序算法的思想。

2.理解快速排序算法。

(三)实验题⽬
本实验要求实现以下功能:对从键盘输⼊的顺序任意的8个正整数,通过快速排序使之成为有序的序列。

输出每⼀趟排序的结果。

【测试数据】
输⼊序列:49 38 65 97 76 13 50 27
输出的每⼀趟排序的结果应为:
初始序列: 49 38 65 97 76 13 50 27
第1趟结果: 27 38 13 49 76 97 50 65
第2趟结果: 13 27 38 49 76 97 50 65
第3趟结果: 13 27 38 49 65 50 76 97
第4趟结果:13 27 38 49 50 65 76 97
(四)实验报告
1.实验题⽬。

2.程序中使⽤的数据结构及符号说明。

3.程序的主要流程图。

4.程序主要模块的功能说明。

5.写出程序运⾏时的初值和每⼀趟排序结果。

6.源程序并附上注释。

7.收获及体会。

制定⼈:施化吉审定⼈:批准⼈:
2012年12⽉8⽇。

相关文档
最新文档