实验指导书110Word文件下载.docx
《实验指导书110Word文件下载.docx》由会员分享,可在线阅读,更多相关《实验指导书110Word文件下载.docx(10页珍藏版)》请在冰豆网上搜索。
(2)要求编写一完整程序,实现顺序表的存储与基本操作。
在主函数中采用简单“菜单设计”(do-while循环内嵌套一个switch结构)技术。
其中菜单形式为:
*********************************************
1、建立顺序表
2、求当前数据元素个数
3、在i位置插入元素x
4、删除第i个元素,并返回其值
5、取i位置数据元素
6、结束程序运行
请输入您的选择(1,2,3,4,5,6):
2.线性表的链表存储表示(结构)及实现。
参照教材P35页例2-3,编程实现单链表(带头结点)的存储与操作。
(1)关于线性表的链表存储结构的本质是:
在逻辑上相邻的两个数据元素ai-1,ai,在存储地址中可以不相邻,既地址不连续。
不同的教材的表示基本是一致的。
typedefstructNode
{DataTypedata;
/*数据子域*/
structNode*next;
/*指针子域*/
}SLNode;
/*结点结构类型*/
1、建立单链表
3.设计循环单链表。
要求:
(1)循环单链表的操作包括初始化、求数据元素个数、插入、删除、取数据元素。
(2)设计一测试主函数实际运行验证所设计的循环单链表的正确性。
实验二、线性表的应用
1.深入了解与掌握链表的逻辑结构特性
2.熟练掌握利用线性解决一些实际应用问题。
1.编程实现任意一元多项式加法(教材P47习题2-26)。
2.超长正整数的加法,设计一个程序实现两个任意长的整数求和运算。
[提示]可采用一个带有头结点的循环链表来表示一个非负的超大整数。
从低位开始每四位组成的数字,依次放在链表的第一个、第二个、……结点中,不足四位的最高位存放在链表的最后一个结点中,表头结点值规定为-1。
例如:
大整数“567890987654321”可用如下的头结点的链表表示:
按照此数据结构,可以从两个表的头结点开始,顺序依次对应相加,求出所需要的进位后,将其代入下一个结点进行运算。
实验三、栈和队列的应用
1.掌握栈的存储结构,并能在现实生活中灵活运用。
2.掌握队列这种数据结构特性及其主要存储结构,并能在现实生活中灵活运用。
3.了解和掌握递归程序设计的基本原理和方法。
1、中值表达式求值问题。
要求:
(1)先设计一个函数把中缀算术表达式转换为后缀算述表达式。
(2)再设计一个函数实现后缀表达式的求值计算。
(3)设计一个主函数进行测试。
2、二项式(a+b)n展开后,其系数构成杨辉三角形,利用队列写出打印杨辉三角形的前n行的程序。
实验四、串操作
1.熟悉串类型的实现方法,了解简单文字处理的设计方法。
2.熟悉C语言的字符和把字符串处理的原理和方法。
3.掌握字符串匹配算法
1、字符串的操作。
基本要求:
(1)字符串采用动态数组存储,建立两个字符串string1和string2,输出两个字符串。
(2)将字符串string2的头n个字符添加到string1的尾部,输出结果。
(3)查找字符串string3在string1中的位置,若string3在string1中不存在,则插入string3在string1的m位置上,输出结果。
测试数据:
(1)string1:
“typedefstructArcBox”
string2:
“VertexTypedata”
string3:
“data”
(2)string1:
“structArcBox”
“VertexType”
“Box”
2、字符串加密。
问题描述:
一个文本串可用事先给定的字母映射表进行加密。
例如,设字母映射表为:
abcdefghijklmnopqrstuvwxyz
ngzqtcobmuhelkpdawxfyivrsj
则字符串“encrypt”被加密为”tkzwsdf”。
(1)编写一个算法将输入的文本串进行加密后输出。
(2)编写一个算法,将输入的已加密的文本串解密后输出。
(3)编写一个主函数进行测试。
测试数据
(1)需加密文本串为“encrypt”,加密后应为”tkzwsdf”。
(2)需解密文本串为”tkzwsdf”,解密后应为“encrypt”。
实验五、稀疏矩阵
1、熟悉对称矩阵的存储与压缩,运用它们进行矩阵简单运算处理。
2、熟悉稀疏矩阵的“三元组顺序表”和“三元组链表”存储结构,运用它们进行矩阵简单运算处理。
1、压缩存储矩阵设计。
(1)设矩阵A、矩阵B和矩阵C均为压缩存储方式存储的n阶上三角矩阵,矩阵元素均为int型。
(2)编写实现矩阵相加C=A+B的函数。
(3)编写实现矩阵乘C=A*B的函数。
(4)编写矩阵元素显示函数。
(5)以下面的数据为测试例子,编写一个主函数进行测试。
2、稀疏矩阵设计。
(1)采用三元组十字链表结构存储稀疏矩阵。
(2)求两个具有相同行列数的稀疏矩阵A和B的相加矩阵C,并输出C。
(3)求A的转置矩阵D,并输出D。
(4)以下面的数据为测试例子,编写一个主函数进行测试。
实验六、递归与广义表
1、掌握递归算法的执行过程、递归算法的设计;
2、掌握广义表的存储结构与操作实现。
1、八皇后问题。
八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。
该问题是十九世纪著名的数学家高斯1850年提出:
在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
现要求编写一个函数,输出此问题的所有可能的布局。
2、广义表设计。
(参照教材P164例7-3)
(1)采用原子和子表存储结构。
(2)分别编写广义表的创建、求广义表深度、求广义表原子数据元素个数、求广义表长度、查找原子元素和撤消广义表操作的函数。
(3)编写主函数进行测试,设E=(((a,b,c),(d)),e),创建初始值等于E的广义表。
(4)在主函数中分别求出广义表E的深度、长度、和原子元素个数。
实验七、二叉树基本操作
一、实验目的:
1、熟练掌握二叉树的存储结构、基本操作与常用遍历方法;
2、了解二叉树的层序遍历;
3、掌握线索二叉树概念及其应用;
4、用树解决实际问题,如哈夫曼编码等。
二、实验内容:
1、二叉树问题。
(参照教材P183例8-2)
(1)采用二叉链存储结构;
(2)根据输入的数据建立一个二叉树;
(3)判断该二叉树是否是一棵完全二叉树;
(4)输出二叉树(输出的结果应为树型结构);
(5)输出其层序遍历的结果。
2、哈夫曼树问题。
(参照教材P198例8-4)
(1)从终端读入字符集大小n,及n个字符和n个权值,建立哈夫曼树,进行编码并且输出。
并将它存于文件Haffman.h中。
(2)利用已建好的哈夫曼编码,对键盘输入的正文进行译码。
输出字符正文,再输出该文的二进制码。
(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
20
O
P
Q
R
S
T
U
V
W
X
Y
Z
空格
63
48
51
80
23
8
18
16
168
(4)并实现以下报文的译码和输出:
“THISPROGRAMISMYFAVORITE”。
实验八、图的基本操作
熟悉图的两种常用的存储结构,以及在这两种存储结构上的两种遍历图的方法,即深度优先遍历和广度优先遍历。
进一步掌握递归算法的设计方法。
关于各种典型著名的复杂算法,在上机实习方面不做基本要求。
更适合于安排大型课程设计。
1、图的设计。
(1)以教材P249图9-20为例,设计一个测试9.3.2节中讨论的邻接表存储结构下图的操作函数的主函数,并给出程序运行结果。
(2)设计邻接表存储结构的深度优先或广度优先遍历函数,并编写主函数进行测试。
2、单源点最短路径问题。
求从有向图的某一结点出发到其余各结点的最短路径。
(1)有向图采用邻接矩阵表示;
(2)单源结点最短路径问题采用Dijkstra算法;
(3)输出有向图中从源结点到其余各结点的最短路径与最短路径值。
(4)测试数据:
以教材P250图9-22所示的有向带权图为例,以结点v1作为源点,求从结点v1到其余各结点的最短路径和最短路径长度值。
实验九、排序
一、实验目的
1、熟悉几种典型的排序算法的思想与特点;
2、熟悉各种排序算法的性能;
3、学会运用排序算法解决实际应用问题。
1、排序算法性能比较。
(1)用随机数产生100,000个待排序数据元素的关键字值。
(2)编写一主函数,测试下列各排序函数的机器执行实际时间:
(直接插入排序、希尔排序、直接选择排序、堆排序、冒泡排序、快速排序、二路归并排序、基于链式队列的基数排序)
2、学生成绩排序。
有M个班的学生参加某门课程的考试,每个班最多有N个学生,输出每个学生在本班以及全班考中的排名表。
(1)每个班的学生记录按学