数据结构实验指导书1-10
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、实验目的:
1、熟练掌握二叉树的存储结构、基本操作与常用遍历方法;
2、了解二叉树的层序遍历;
3、掌握线索二叉树概念及其应用;
4、用树解决实际问题,如哈夫曼编码等。
二、实验内容:
1、二叉树问题。(参照教材P183例8-2)
要求:
(1)采用二叉链存储结构;
(2)根据输入的数据建立一个二叉树;
(3)判断该二叉树是否是一棵完全二叉树;
(1)创建一棵二叉排序树。
(2)编写一个判断给定的二叉树是否为二叉排序树的函数,设此二叉树以二叉链表作存储结构,且树中结点的关键字值均不相同。
(3)编写一个测试主函数进行测试。
提示:包含二叉排序树头文件BiSortTree.h
(2)将字符串string2的头n个字符添加到string1的尾部,输出结果。
(3)查找字符串string3在string1中的位置,若string3在string1中不存在,则插入string3在string1的m位置上,输出结果。
测试数据:
(1)string1:“typedefstructArcBox”
(3)[测试数据]用下表中给出的字符集和频度的实际统计数据建立哈夫曼树:
字符
A
B
C
D
E
F
G
H
I
J
K
L
M
N
频度
64
13
22
32
103
21
15
47
57
1
5
32
20
57
字符
O
P
Q
R
S
T
U
V
W
X
Y
Z
空格
频度
63
15
1
48
51
80
23
8
18
1
16
1
168
(4)并实现以下报文的译码和输出:“THIS PROGRAM IS MY FAVORITE”。
(4)以下面的数据为测试例子,编写一个主函数进行测试。
一、实验目的
1、掌握递归算法的执行过程、递归算法的设计;
2、掌握广义表的存储结构与操作实现。
二、实验内容
1、八皇后问题。八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。现要求编写一个函数,输出此问题的所有可能的布局。
(2)输出每个学生在本班的排名情况,具有相同成绩的名次相同。
(3)输出全体考生的排名情况。
测试数据:
假定有7个班,每个班学生人数为12人;学号为“班号”+“学生在本班名册中的序号”,班号依次为1,2,…,7;成绩是由计算机随机产生的50~100之间的整数。
一、实验目的
掌握几种典型的查找方法(折半查找、二叉排序树的查找、哈希查找),并对各种算法的特点、使用范围和效率有进一步的了解。
注意几个问题:
(1)关于线性表的顺序存储结构的本质是:在逻辑上相邻的两个数据元素ai-1,ai,在存储地址中也是相邻的,既地址连续。不同的教材有不同的表示,有的直接采用一维数组,这种方法有些过时。有的采用含‘动态分配’一维数组的结构体,这种方法比较灵活抽象。在此本书中采用的是含‘静态’一维数组和线性表长的结构体:
(2)设计邻接表存储结构的深度优先或广度优先遍历函数,并以教材P249图9-20为例,编写主函数进行测试。
2、单源点最短路径问题。
问题描述:求从有向图的某一结点出发到其余各结点的最短路径。
要求:
(1)有向图采用邻接矩阵表示;
(2)单源结点最短路径问题采用Dijkstra算法;
(3)输出有向图中从源结点到其余各结点的最短路径与最短路径值。
ngzqtcobmuhelkpdawxfyivrsj
则字符串“encrypt”被加密为”tkzwsdf”。
基本要求:
(1)编写一个算法将输入的文本串进行加密后输出。
(2)编写一个算法,将输入的已加密的文本串解密后输出。
(3)编写一个主函数进行测试。
测试数据
(1)需加密文本串为“encrypt”,加密后应为”tkzwsdf”。
*********************************************
1、建立顺序表
2、求当前数据元素个数
3、在i位置插入元素x
4、删除第i个元素,并返回其值
5、取i位置数据元素
6、结束程序运行
*********************************************
实验一、线性表基本操作
一、实验目的
1.了解线性表的逻辑结构特性,以及这种特性在计算机内的两种存储结构。
2.重点是线性表的基本操作在两种存储结构上的实现;其中以链表的操作为侧重点;并进一步学习结构化的程序设计方法。
二、实验内容
1.线性表的顺序存储表示(结构)及实现。
参照教材P23页例2-1,编程实现顺序表的存储与操作。
请输入您的选择(1,2,3,4,5,6):
2.线性表的链表存储表示(结构)及实现。
参照教材P35页例2-3,编程实现单链表(带头结点)的存储与操作。
注意几个问题:
(1)关于线性表的链表存储结构的本质是:在逻辑上相邻的两个数据元素ai-1,ai,在存储地址中可以不相邻,既地址不连续。不同的教材的表示基本是一致的。
typedefstruct
{DataTypelist[MaxSize]; /*一维数组子域*/
intsize; /*顺序表长度子域*/
}SeqList; /*顺序存储的结构体类型*/
(2)要求编写一个完整程序,实现顺序表的存储与基本操作。在主函数中采用简单“菜单设计”(do-while循环内嵌套一个switch结构)技术(参照P75页例3-5)。其中菜单形式为:
(3)设计一个主函数进行测试。
2、利用循环队列模拟舞伴配对问题:
(1)在舞会上,男、女各自排成一队。舞会开始时。依次从男队和女队的队头各出一人配成舞伴。如果两队初始人数不等,则较长的那一队中未配对者等待下一轮舞曲。
(2)假设初始男、女人数及性别已经固定,舞会的轮数从键盘输入。试模拟解决上述舞伴配对问题。
(4)测试数据:以教材P250图9-22所示的有向带权图为例,以结点v1作为源点,求从结点v1到其余各结点的最短路径和最短路径长度值。
一、实验目的
1、熟悉几种典型的排序算法的思想与特点;
2、熟悉各种排序算法的性能;
3、学会运用排序算法解决实际应用问题。
二、实验内容
1、排序算法性能比较。
要求:
(1)用随机数产生100,000个待排序数据元素的关键字值。
一、实验目的
1.掌握栈的存储结构,并能在现实生活中灵活运用。
2.掌握队列这种数据结构特性及其主要存储结构,并能在现实生活中灵活运用。
3.了解和掌握递归程序设计的基本原理和方法。
二、实验内容
1、中值表达式求值问题。
要求:(1)先设计一个函数把中缀算术表达式转换为后缀算述表达式。
(2)再设计一个函数实现后缀表达式的求值计算。
1.编程实现任意一元多项式加法(教材P47习题2-26)。
2.单链表合并(可适当参照P43页例2-7)。
(1)创建两个类型为字符型的带头结点的有序单链表L1和L2。
(2)将L1和L2合并到一新链表L3中,使得L3表中元素值也有序,统计L3中元素个数并显示出来。
(3)要求:屏幕上可以显示L1和L2元素列表,以及合并后单链表L3元素列表。
二、实验内容
1、哈希表设计。
问题描述:已知一个含有1000个数据元素的表,关键字为中国人姓氏的拼音,给出此表的一个哈希表设计方案。
基本要求:
(1)要求解决哈希冲突的方法采用链表法。
(2)编写一个测试主函数
(3)要求出所设计的哈希表在等概率情况下的平均查找长度。
2、二叉排序树问题。
问题描述与基本要求:
string2:“VertexTypedata”
string3:“data”
(2)string1:“structArcBox”
string2:“VertexType”
string3:“Box”
2、字符串加密。
问题描述:一个文本串可用事先给定的字母映射表进行加密。例如,设字母映射表为:
abcdefghijklmnopqrstuvwxyz
(3)要求:从屏幕输出每一轮舞伴配对名单,如果在该轮有未配对的,能够从屏幕显示下一轮第一个出场的未配对者的姓名。
一、实验目的
1.熟悉串类型的实现方法,了解简单文字处理的设计方法。
2.熟悉C语言的字符和把字符串处理的原理和方法。
3.掌握字符串匹配算法
二、实验内容
1、字符串的操作。
基本要求:
(1)字符串采用动态数组存储,建立两个字符串string1和string2,输出两个字符串。
一、实验目的
熟悉图的两种常用的存储结构,以及在这两种存储结构上的两种遍历图的方法,即深度优先遍历和广度优先遍历。进一步掌握递归算法的设计方法。
关于各种典型著名的复杂算法,在上机实习方面不做基本要求。更适合于安排大型课程设计。
二、实验内容
1、图的设计。
要求:
(1)以教材P249图9-20为例,设计一个测试9.3.2节中讨论的邻接表存储结构下图的操作函数的主函数,并给出程序运行结果。
(2)编写一主函数,测试下列各排序函数的机器执行实际时间:
(直接插入排序、希尔排序、直接选择排序、堆排序、冒泡排序、快速排序、二路归并排序、基于链式队列的基数排序)
2、学生成绩排序。
问题描述:有M个班的学生参加某门课程的考试,每个班最多有N个学生,输出每个学生在本班以及全班考中的排名表。
要求:
(1)每个班的学生记录按学号顺序排列,每个学生记录包含名次、学号、姓名、成绩。
(2)编写实现矩阵相加C=A+B的函数。
(3)编写实现矩阵乘C=A*B的函数。
(4)编写矩阵元素显示函数。
(5)以下面的数据为测试例子,编写一个主函数进行测试。
2、ቤተ መጻሕፍቲ ባይዱ疏矩阵设计。
基本要求:
(1)采用三元组十字链表结构存储稀疏矩阵。
(2)求两个具有相同行列数的稀疏矩阵A和B的相加矩阵C,并输出C。
(3)求A的转置矩阵D,并输出D。
(4)输出二叉树(输出的结果应为树型结构);
(5)输出其层序遍历的结果。
2、哈夫曼树问题。(参照教材P198例8-4)
要求:
(1)从终端读入字符集大小n,及n个字符和n个权值,建立哈夫曼树,进行编码并且输出。并将它存于文件Haffman.h中。
(2)利用已建好的哈夫曼编码,对键盘输入的正文进行译码。输出字符正文,再输出该文的二进制码。
请输入您的选择(1,2,3,4,5,6):
3.设计循环单链表。
要求:(1)循环单链表的操作包括初始化、求数据元素个数、插入、删除、取数据元素。
(2)设计一测试主函数,实际运行验证所设计的循环单链表的正确性。
一、实验目的
1.深入了解与掌握链表的逻辑结构特性
2.熟练掌握利用线性解决一些实际应用问题。
二、实验内容
2、广义表设计。(参照教材P164例7-3)
要求:
(1)采用原子和子表存储结构。
(2)分别编写广义表的创建、求广义表深度、求广义表原子数据元素个数、求广义表长度、查找原子元素和撤消广义表操作的函数。
(3)编写主函数进行测试,设E=(((a,b,c),(d)),e),创建初始值等于E的广义表。
(4)在主函数中分别求出广义表E的深度、长度、和原子元素个数。
(2)需解密文本串为”tkzwsdf”,解密后应为“encrypt”。
一、实验目的
1、熟悉对称矩阵的存储与压缩,运用它们进行矩阵简单运算处理。
2、熟悉稀疏矩阵的“三元组顺序表”和“三元组链表”存储结构,运用它们进行矩阵简单运算处理。
二、实验内容
1、压缩存储矩阵设计。
要求:
(1)设矩阵A、矩阵B和矩阵C均为压缩存储方式存储的n阶上三角矩阵,矩阵元素均为int型。
typedefstructNode
{DataTypedata;/*数据子域*/
structNode *next;/*指针子域*/
}SLNode;/*结点结构类型*/
(2)要求编写一个完整程序,实现顺序表的存储与基本操作。在主函数中采用简单“菜单设计”(do-while循环内嵌套一个switch结构)技术(参照P75页例3-5)。其中菜单形式为:
*********************************************
1、建立单链表
2、求当前数据元素个数
3、在i位置插入元素x
4、删除第i个元素,并返回其值
5、取i位置数据元素
6、结束程序运行
*********************************************