实验指导书110.docx

上传人:b****3 文档编号:1801841 上传时间:2022-10-24 格式:DOCX 页数:10 大小:35.54KB
下载 相关 举报
实验指导书110.docx_第1页
第1页 / 共10页
实验指导书110.docx_第2页
第2页 / 共10页
实验指导书110.docx_第3页
第3页 / 共10页
实验指导书110.docx_第4页
第4页 / 共10页
实验指导书110.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

实验指导书110.docx

《实验指导书110.docx》由会员分享,可在线阅读,更多相关《实验指导书110.docx(10页珍藏版)》请在冰豆网上搜索。

实验指导书110.docx

实验指导书110

实验一、线性表基本操作

一、实验目的

1.了解线性表的逻辑结构特性,以及这种特性在计算机内的两种存储结构。

2.重点是线性表的基本操作在两种存储结构上的实现;其中以链表的操作为侧重点;并进一步学习结构化的程序设计方法。

二、实验内容

1.线性表的顺序存储表示(结构)及实现。

参照教材P23页例2-1,编程实现顺序表的存储与操作。

注意几个问题:

(1)关于线性表的顺序存储结构的本质是:

在逻辑上相邻的两个数据元素ai-1,ai,在存储地址中也是相邻的,既地址连续。

不同的教材有不同的表示,有的直接采用一维数组,这种方法有些过时。

有的采用含‘动态分配’一维数组的结构体,这种方法比较灵活抽象。

在此本书中采用的是含‘静态’一维数组和线性表长的结构体:

typedefstruct

{DataTypelist[MaxSize];/*一维数组子域*/

intsize;/*顺序表长度子域*/

}SeqList;/*顺序存储的结构体类型*/

(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;/*结点结构类型*/

(2)要求编写一完整程序,实现顺序表的存储与基本操作。

在主函数中采用简单“菜单设计”(do-while循环内嵌套一个switch结构)技术。

其中菜单形式为:

*********************************************

1、建立单链表

2、求当前数据元素个数

3、在i位置插入元素x

4、删除第i个元素,并返回其值

5、取i位置数据元素

6、结束程序运行

*********************************************

请输入您的选择(1,2,3,4,5,6):

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”

string2:

“VertexType”

string3:

“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

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)并实现以下报文的译码和输出:

“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)每个班的学生记录按学

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1