我写的所有程序(数据结构试验)以下是试验报告
(2012-05-29 18:23:06)
标签:
宋体顺序表算法与数据结构数据元素离散数学it |
《算法与数据结构》实验指导书
Competency Training of Algorithm and Data Structure
课程序号:17
适用专业:计算机科学与技术专业
前修课程:高级语言程序设计、离散数学
一、实验技能训练的目的与要求
通过本课程的实践,学生应能够分析实际问题,选择合适的数据结构设计相关算法,熟练使用C/C++等高级语言编写应用程序解决问题。
二、相关课程
本课程为“算法与数据结构”配套实验课程。
三、实验技能训练的主要内容和学时安排
本技能训练是《算法与数据结构》课程的配套实践课程,内容为各种数据结构及相关算法,包括顺序表、单链表、堆栈和队列、串、二叉树、图、排序、查找等内容。
序号 |
实验 |
内 |
实验 时数 |
其他 环节 |
1 |
一 |
顺序表 |
2 |
|
2 |
二 |
单链表 |
2 |
|
3 |
三 |
堆栈和队列 |
2 |
|
4 |
四 |
串 |
2 |
|
5 |
五 |
二叉树 |
2 |
|
6 |
六 |
图 |
2 |
|
7 |
七 |
排序 |
2 |
|
8 |
八 |
查找 |
2 |
|
合 |
|
16 |
|
|
总 |
学 |
16学时 |
四、各项技能训练的目的、内容
1、顺序表
实验目的:
掌握顺序表的定位、插入、删除等操作。
实验内容:
(1) 编写一个逐个输出顺序表中所有数据元素的成员函数。并编写主函数测试结果。
(2) 编写顺序表定位操作的成员函数顺序表中查找是否存在数据元素x,如果存在,返回顺序表中和x值相等的第1个数据元素的序号(序号从0开始编号);如果不存在,返回-1。并编写主函数测试结果。
(3) 在递增有序的顺序表中插入一个新结点x,保持顺序表的有序性。
解题思路:首先查找插入的位置,再移位,最后进行插入操作;从第一个元素开始找到第一个大于该新结点值x的元素位置i即为插入位置;然后将从表尾开始依次将元素后移一个位置直至元素i;最后将新结点x插入到i位置。
(4) 删除顺序表中所有等于X的数据元素。
选做题:
(5) 已知两个顺序表A和B按元素值递增有序排列,要求写一算法实现将A和B归并成一个按元素值递减有序排列的顺序表(允许表中含有值相同的元素)。
2、单链表
实验目的:
掌握单链表的定位、插入、删除等操作。
实验内容:
(1) 编写一个逐个输出单链表中所有数据元素的成员函数。并编写主函数测试结果。
(2) 在递增有序的单链表中插入一个新结点x,保持单链表的有序性。
解题思路:首先查找插入的位置然后进行插入操作;从第一个结点开始找到第一个大于该新结点值的结点即为插入位置;然后在找到的此结点之前插入新结点;注意保留插入位置之前结点的指针才能完成插入操作。
(3) 编写实现带头结点单链表就地逆置的成员函数,并编写主函数测试结果。
选做题:
已知指针LA和LB分别指向两个无头结点单链表的首元结点。要求编一算法实现,从表LA中删除自第i个元素起共len个元素后,将它们插入到表LB中第j个元素之前。
实验注意事项:
(1)注意链表的空间是动态分配的,某结点不用之后要及时进行物理删除,以便释放其内存空间。
(2)链表不能实现直接定位,一定注意指针的保存,防止丢失。
3、堆栈和队列
实验目的:
a) 掌握应用栈解决问题的方法。
b) 掌握利用栈进行表达式求和的算法。
c) 掌握队列的存储结构及基本操作实现,并能在相应的应用问题中正确选用它们。
实验内容:
(1)
(2)
(3)
选做题:
在顺序存储结构上实现输出受限的双端循环队列的入列和出列算法。设每个元素表示一个待处理的作业,元素值表示作业的预计时间。入队列采取简化的短作业优先原则,若一个新提交的作业的预计执行时间小于队头和队尾作业的平均时间,则插入在队头,否则插入在队尾。
4、串
实验目的:
a) 掌握串的存储及应用。
实验内容:
(1)
(2)
解题思路:可以将第一道程序改进成一个子函数,在本题中循环调用。
(3)
选做题:
假设以链结构表示串,编写算法实现将串S插入到串T中某个字符之后,若串T中不存在这个字符,则将串S联接在串T的末尾。
提示:为提高程序的通用性,插入位置字符应设计为从键盘输入。
5、二叉树
实验目的:
a) 掌握二叉树的生成,以及前、中、后序遍历算法。
b) 掌握应用二叉树递归遍历思想解决问题的方法。
实验内容:
(1)
(2)
(3)
(4)
选做题:
已知一棵完全二叉树存于顺序表sa中,sa.elem[1…sa.last]存储结点的值。试编写算法由此顺序存储结构建立该二叉树的二叉链表。
解题思路:根据完全二叉树顺序存储的性质来确定二叉树的父子关系即“还原”了二叉树,之后再按照二叉树二叉链表的构造方法进行建立。完全二叉树顺序存储的一个重要性质为,第i个结点的左孩子是编号为2i的结点,第i个结点的右孩子是编号为2i+1的结点。
6、图
实验目的:
a) 熟练掌握图的基本概念、构造及其存储结构。
b) 熟练掌握对图的深度优先搜索遍历和广度优先搜索遍历的算法。
实验内容:
(1)构造一个无向图(用邻接矩阵表示存储结构)
(2)对上面所构造的无向图,进行深度优先遍历和广度优先遍历,输出遍历序列。
注意事项:
图中结点与结点之间无上下或层次关系,构造和遍历可自由选取一个起始结点。一般默认选取编号最小的结点为起始操作结点。
选做题:
采用邻接表存储结构,编写一个判别无向图中任意给定的两个顶点之间是否存在一条长度为k的简单路径的算法。简单路径是指其顶点序列中不含有重复顶点的路径。
提示:两个顶点及k值均作为参数给出。
7、排序
实验目的:
a) 熟练掌握希尔排序、堆排序、直接插入排序、起泡排序、快速排序、直接选择排序、归并排序和基数排序的基本概念。
b) 掌握以上各种排序的算法。
c) 区分以上不同排序的优、缺点。
实验内容:
用随机数产生100000个待排序数据元素的关键字值。测试下列各排序函数的机器实际执行时间(至少测试两个):直接插入排序、希尔排序(增量为4,2,1)、冒泡排序、快速排序、直接选择排序、二路归并排序、堆排序和基于链式队列的基数排序。
选做题:
假设含n个记录的序列中,其所有关键字为值介于v和w之间的整数,且其中很多关键字的值是相同的。则可按如下方法排序:另设数组number[v…w],令number[i]统计关键字为整数i的纪录个数,然后按number重排序列以达到有序。试编写算法实现上述排序方法,并讨论此种方法的优缺点。
8、查找
实验目的:
a) 掌握顺序表查找、有序表查找、索引顺序表查找的各种算法。
b) 掌握哈希表设计。
实验内容:
(1)
选做题:
构造一个哈希表,哈希函数采用除留余数法,哈希冲突解决方法采用链地址法。设计一个测试程序进行测试。
提示:构造哈希表只是完成查找的第一步,大家应该掌握在哈希表上进行查找的过程,可以试着编程序实现。
五、实验要求及方法
1.
2.
3.
六、技能考核
根据要求完成每一个实验内容,根据程序修改和调试的情况决定成绩等次。在规定时间内完成顺利调试通过结果正确为优秀。最后,根据每一个实验的成绩,综合评分。
制订人:
沈