级数据结构实验指导书.docx

上传人:b****0 文档编号:12714323 上传时间:2023-04-21 格式:DOCX 页数:14 大小:24.61KB
下载 相关 举报
级数据结构实验指导书.docx_第1页
第1页 / 共14页
级数据结构实验指导书.docx_第2页
第2页 / 共14页
级数据结构实验指导书.docx_第3页
第3页 / 共14页
级数据结构实验指导书.docx_第4页
第4页 / 共14页
级数据结构实验指导书.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

级数据结构实验指导书.docx

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

级数据结构实验指导书.docx

级数据结构实验指导书

《数据结构》

 

计算机学院数据结构课程组

2007-9

前言

  

  计算机编程中加工处理的对象是数据,而数据具有一定的组织结构,所以学习计算机编程仅仅了解计算机语言是不够的,还必须掌握数据的组织、存储和运算的一般方法,这便是数据结构课程中所研究的内容,也是我们编写计算机程序的重要基础,由于它对计算机学科起到承前启后的作用,因此本课程被列为计算机等相关专业最重要的专业基础课;同时数据结构是计算机专业教学的一门核心课程。

计算机各领域都要用到各种数据结构,而且要从事计算机科学与技术工作,尤其是计算机领域的软件开发工作,必须具备较强的数据结构基础。

  数据结构课程内容丰富、学习量大,实践性强;隐含在各部分内容中的方法和技术多;算法设计具有动态性和抽象性等特点,看懂听明白与掌握会应用之间有相当大的一段距离。

所以学生必须多实践才能进一步加深对课程的理解,理解和掌握算法设计所需的方法和技术,为整个专业学习打下良好的基础。

实验一线性表的基本操作及其应用

一、实验目的

1、帮助读者复习C++语言程序设计中的知识。

2、熟悉线性表的逻辑结构。

3、熟悉线性表的基本运算在两种存储结构上的实现,其中以熟悉链表的操作为侧重点。

二、实验内容

本次实验提供3个题目,每个题目都标有难度系数,*越多难度越大,学生可以根据自己的情况任选一个!

题目一:

单链表的基本操作(*)

[问题描述]

实现带头结点的单链表的建立、求长度,取元素、修改元素、插入、删除等单链表的基本操作。

[基本要求]

(1)依次从键盘读入数据,建立带头结点的单链表;

(2)输出单链表中的数据元素

(3)求单链表的长度;

(4)根据指定条件能够取元素和修改元素;

(5)实现在指定位置插入和删除元素的功能。

[测试数据]

由学生任意指定。

题目二:

约瑟夫环(**)

[问题描述]

  约瑟夫(Joseph)问题的一种描述是:

编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。

一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。

报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。

试设计一个程序求出出列顺序。

[基本要求]

  利用单向循环链表存储结构模拟此过程,按照出列的顺序印出各人的编号。

[测试数据]

由学生任意指定。

  如:

m的初值为20;n的值为7;密码:

3,1,7,2,4,8,4;

(正确的输出结果应为6,1,4,7,2,3,5)。

(报告上要求写出多批数据测试结果)

[实现提示]

  程序运行后首先要求用户输入初始报数上限值m,人数n,(设n≤30)。

然后输入各人的密码。

[选作内容]

  向上述程序中添加在顺序结构上实现的部分。

题目三:

多项式的表示及相加(***)

[问题描述]

设计一个算法,以实现一元稀疏多项式的加法运算。

[基本要求]

(1)输入并建立多项式;

(2)输出多项式,输出形式为整数序列:

n,c1,e1,c2,e2,……,cn,en,其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列;

(3)多项式a和b相加,建立多项式a+b。

[测试数据]

由学生任意指定。

[实现提示]

  用带表头结点的单链表存储多项式。

[选作内容]

  多项式a和b相减,建立多项式a-b。

三、实验前的准备工作

1、掌握线性表的逻辑结构。

2、掌握线性表的链式存储结构。

3、熟练掌握线性表的插入、删除等操作。

四、实验报告要求

1、实验报告要按照实验报告格式规范书写。

2、实验上要写出多批测试数据的运行结果。

3、结合运行结果,对程序进行分析。

 

实验二栈和队列的基本操作及其应用

一、实验目的

1、掌握栈和队列的顺序存储结构和链式存储结构,以便在实际中灵活应用。

2、掌握栈和队列的特点,即后进先出和先进先出的原则。

3、掌握栈和队列的基本运算,如:

入栈与出栈,入队与出队等运算在顺序存储结构和链式存储结构上的实现。

二、实验内容

本次实验提供2个题目,每个题目都标有难度系数,*越多难度越大,学生可以根据自己的情况任选一个!

题目一:

回文判断(*)

[问题描述]

对于一个从键盘输入的字符串,判断其是否为回文。

回文即正反序相同。

如“abba”是回文,而“abab”不是回文。

[基本要求]

(1)数据从键盘读入;

(2)输出要判断的字符串;

(3)利用栈的基本操作对给定的字符串判断其是否是回文,若是则输出“Yes”,否则输出“No”。

[测试数据]

由学生任意指定。

题目二:

商品货架管理(**)

[问题描述]

商店货架以栈的方式摆放商品。

生产日期越近的越靠近栈底,出货时从栈顶取货。

一天营业结束,如果货架不满,则需上货。

入货直接将商品摆放到货架上,则会使生产日期越近的商品越靠近栈顶。

这样就需要倒货架,使生产日期越近的越靠近栈底。

[基本要求]

设计一个算法,保证每一次上货后始终保持生产日期越近的商品越靠近栈底。

[实现提示]

可以用一个队列和一个临时栈作为周转。

[测试数据]

由学生任意指定。

题目三:

舞伴问题(**)

假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。

跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。

若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。

现要求写一算法模拟上述舞伴配对问题。

【实验提示】

先入队的男士或女士亦先出队配成舞伴。

因此该问题具体有典型的先进先出特性,可用队列作为算法的数据结构。

在算法中,假设男士和女士的记录存放在一个数组中作为输入,然后依次扫描该数组的各元素,并根据性别来决定是进入男队还是女队。

当这两个队列构造完成之后,依次将两队当前的队头元素出队来配成舞伴,直至某队列变空为止。

此时,若某队仍有等待配对者,算法输出此队列中等待者的人数及排在队头的等待者的名字,他(或她)将是下一轮舞曲开始时第一个可获得舞伴的人。

【实验要求】

利用队列实现,存储结构采用顺序或链式均可

 

题目四:

Rails

Description

ThereisafamousrailwaystationinPopPushCity.Countrythereisincrediblyhilly.Thestationwasbuiltinlastcentury.Unfortunately,fundswereextremelylimitedthattime.Itwaspossibletoestablishonlyasurfacetrack.Moreover,itturnedoutthatthestationcouldbeonlyadead-endone(seepicture)andduetolackofavailablespaceitcouldhaveonlyonetrack.

ThelocaltraditionisthateverytrainarrivingfromthedirectionAcontinuesinthedirectionBwithcoachesreorganizedinsomeway.AssumethatthetrainarrivingfromthedirectionAhasN<=1000coachesnumberedinincreasingorder1,2,...,N.ThechieffortrainreorganizationsmustknowwhetheritispossibletomarshalcoachescontinuinginthedirectionBsothattheirorderwillbea1,a2,...,aN.Helphimandwriteaprogramthatdecideswhetheritispossibletogettherequiredorderofcoaches.YoucanassumethatsinglecoachescanbedisconnectedfromthetrainbeforetheyenterthestationandthattheycanmovethemselvesuntiltheyareonthetrackinthedirectionB.Youcanalsosupposethatatanytimetherecanbelocatedasmanycoachesasnecessaryinthestation.ButonceacoachhasenteredthestationitcannotreturntothetrackinthedirectionAandalsoonceithasleftthestationinthedirectionBitcannotreturnbacktothestation.

Input

Theinputconsistsofblocksoflines.Eachblockexceptthelastdescribesonetrainandpossiblymorerequirementsforitsreorganization.InthefirstlineoftheblockthereistheintegerNdescribedabove.Ineachofthenextlinesoftheblockthereisapermutationof1,2,...,N.Thelastlineoftheblockcontainsjust0.

Thelastblockconsistsofjustonelinecontaining0.

Output

Theoutputcontainsthelinescorrespondingtothelineswithpermutationsintheinput.AlineoftheoutputcontainsYesifitispossibletomarshalthecoachesintheorderrequiredonthecorrespondinglineoftheinput.OtherwiseitcontainsNo.Inaddition,thereisoneemptylineafterthelinescorrespondingtooneblockoftheinput.Thereisnolineintheoutputcorrespondingtothelast``null''blockoftheinput.

SampleInput

5

12345

54123

0

6

654321

0

0

SampleOutput

Yes

No

Yes

三、实验前的准备工作

1、掌握栈的逻辑结构和存储结构。

2、熟练掌握栈的出栈、入栈等操作。

3、掌握队列的逻辑结构和存储结构。

4、熟练掌握队列的出队、入队等操作

四、实验报告要求

1、实验报告要按照实验报告格式规范书写。

2、实验上要写出多批测试数据的运行结果。

3、结合运行结果,对程序进行分析。

 

实验三二叉树的基本运算

一、实验目的

1、使学生熟练掌握二叉树的逻辑结构和存储结构。

2、熟练掌握二叉树的各种遍历算法。

二、实验内容

[问题描述]

建立一棵二叉树,试编程实现二叉树的如下基本操作:

1.按先序序列构造一棵二叉链表表示的二叉树T;

2.对这棵二叉树进行遍历:

先序、中序、后序以及层次遍历,分别输出结点的遍历序列;

3.求二叉树的深度/结点数目/叶结点数目;(选做)

4.将二叉树每个结点的左右子树交换位置。

(选做)

[基本要求]

从键盘接受输入(先序),以二叉链表作为存储结构,建立二叉树(以先序来建立),

[测试数据]

如输入:

ABCффDEфGффFффф(其中ф表示空格字符)

  则输出结果为

先序:

ABCDEGF

  中序:

CBEGDFA

  后序:

CGEFDBA

层序:

ABCDEFG

[选作内容]

采用非递归算法实现二叉树遍历。

三、实验前的准备工作

1、掌握树的逻辑结构。

2、掌握二叉树的逻辑结构和存储结构。

3、掌握二叉树的各种遍历算法的实现。

四、实验报告要求

1、实验报告要按照实验报告格式规范书写。

2、实验上要写出多批测试数据的运行结果。

3、结合运行结果,对程序进行分析。

实验四哈夫曼树与哈夫曼编码

一、实验目的

1、使学生熟练掌握哈夫曼树的生成算法。

2、熟练掌握哈夫曼编码的方法。

二、实验内容

[问题描述]

  已知n个字符在原文中出现的频率,求它们的哈夫曼编码。

[基本要求]

  1.初始化:

从键盘读入n个字符,以及它们的权值,建立Huffman

树。

(具体算法可参见教材P147的算法6.12)

  2.编码:

根据建立的Huffman树,求每个字符的Huffman编码。

对给定的待编码字符序列进行编码。

[选作内容]

  1.译码:

利用已经建立好的Huffman树,对上面的编码结果译码。

译码的过程是分解电文中的字符串,从根结点出发,按字符’0’和’1’确定找左孩子或右孩子,直至叶结点,便求得该子串相应的字符。

 4.打印 Huffman树。

[测试数据]

利用教材P.148例6-2中的数据调试程序。

可设8种符号分别为A,B,C,D,E,F,G,H。

编/译码序列为“CFBABBFHGH”(也可自己设定数据进行测试)。

三、实验前的准备工作

1、掌握树的逻辑结构。

2、掌握哈夫曼树的定义及生成算法。

3、掌握哈夫曼编码的方法。

四、实验报告要求

1、实验报告要按照实验报告格式规范书写。

2、实验上要写出多批测试数据的运行结果。

3、结合运行结果,对程序进行分析。

 

实验五图的基本操作

一、实验目的

1、使学生可以巩固所学的有关图的基本知识。

2、熟练掌握图的存储结构。

3、熟练掌握图的两种遍历算法。

二、实验内容

[问题描述]

  对给定图,实现图的深度优先遍历和广度优先遍历。

[基本要求]

   以邻接表为存储结构,实现连通无向图的深度优先和广度优先遍历。

以用户指定的结点为起点,分别输出每种遍历下的结点访问序列。

【测试数据】

  由学生依据软件工程的测试技术自己确定。

三、实验前的准备工作

1、掌握图的相关概念。

2、掌握图的逻辑结构和存储结构。

3、掌握图的两种遍历算法的实现。

四、实验报告要求

1、实验报告要按照实验报告格式规范书写。

2、实验上要写出多批测试数据的运行结果。

3、结合运行结果,对程序进行分析。

实验六图的应用

一、实验目的

1、使学生可以巩固所学的有关图的基本知识。

2、熟练掌握图的存储结构。

3、掌握如何应用图解决各种实际问题。

二、实验内容

本次实验提供2个题目,学生可以任选一个!

题目一:

最小生成树问题

[问题描述]

若要在n个城市之间建设通信网络,只需要假设n-1条线路即可。

如何以最低的经济代价建设这个通信网,是一个网的最小生成树问题。

[基本要求]

1.利用克鲁斯卡尔算法求网的最小生成树。

2.要求输出各条边及它们的权值。

[实现提示]

通信线路一旦建成,必然是双向的。

因此,构造最小生成树的网一定是无向网。

设图的顶点数不超过30个,并为简单起见,网中边的权值设成小于100的整数。

图的存储结构的选取应和所作操作相适应。

为了便于选择权值最小的边,此题的存储结构既不选用邻接矩阵的数组表示法,也不选用邻接表,而是以存储边(带权)的数组表示图。

[测试数据]

由学生依据软件工程的测试技术自己确定。

题目二:

拓扑排序的应用

已知一个有向图,试编程判断该图是否

题目二:

最短路径问题

[问题描述]

  给定一个无向网,可以求得任意一对顶点之间的最短路径。

[基本要求]

 以邻接矩阵为存储结构,实现弗洛伊德算法求解每一对顶点之间的最短路径及最短路径长度。

[测试数据]

  由学生依据软件工程的测试技术自己确定。

三、实验前的准备工作

1、掌握图的相关概念。

2、掌握图的逻辑结构和存储结构。

3、掌握图的各种应用的实现。

四、实验报告要求

1、实验报告要按照实验报告格式规范书写。

2、实验上要写出多批测试数据的运行结果。

3、结合运行结果,对程序进行分析。

实验七查找、排序的应用

一、实验目的

1、本实验可以使学生更进一步巩固各种查找和排序的基本知识。

2、学会比较各种排序与查找算法的优劣。

3、学会针对所给问题选用最适合的算法。

4、掌握利用常用的排序与选择算法的思想来解决一般问题的方法和技巧。

二、实验内容

[问题描述]

 对学生的基本信息进行管理。

[基本要求]

设计一个学生信息管理系统,学生对象至少要包含:

学号、姓名、性别、成绩1、成绩2、总成绩等信息。

要求实现以下功能:

1.总成绩要求自动计算;

2.查询:

分别给定学生学号、姓名、性别,能够查找到学生的基本信息(要求至少用两种查找算法实现);

排序:

分别按学生的学号、成绩1、成绩2、总成绩进行排序(要求至少用两种排序算法实现)。

[测试数据]

  由学生依据软件工程的测试技术自己确定。

三、实验前的准备工作

1、掌握哈希表的定义,哈希函数的构造方法。

2、掌握一些常用的查找方法。

1、掌握几种常用的排序方法。

2、掌握直接排序方法。

四、实验报告要求

1、实验报告要按照实验报告格式规范书写。

2、实验上要写出多批测试数据的运行结果。

3、结合运行结果,对程序进行分析。

 

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

当前位置:首页 > 成人教育 > 自考

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

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