数据结构实验指导书new高艳霞Word下载.docx
- 文档编号:20438016
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:19
- 大小:31.34KB
数据结构实验指导书new高艳霞Word下载.docx
《数据结构实验指导书new高艳霞Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构实验指导书new高艳霞Word下载.docx(19页珍藏版)》请在冰豆网上搜索。
3、熟悉线性表的基本运算在两种存储结构上的实现,其中以熟悉链表的操作为侧重点。
二、实验内容
本次实验提供4个题目,每个题目都标有难度系数,*越多难度越大,学生可以根据自己的情况选做!
题目一:
单链表的基本操作(*)
[问题描述]
实现带头结点的单链表的建立、求长度,取元素、修改元素、插入、删除等单链表的基本操作。
[基本要求]
(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。
题目四:
Dr.Kong设计了一件艺术品(****)
Dr.Kong设计了一件艺术品,该艺术品由N个构件堆叠而成,N个构件从高到低按层编号依次为1,2,……,N。
艺术品展出后,引起了强烈的反映。
Dr.Kong观察到,人们尤其对作品的高端部分评价甚多。
狂热的Dr.Kong一激动,对组成该艺术品的N个构件重新组合,比如:
把第6层到第12层的构件搬下来,想一想,然后整体放到剩下构件的第7层下面;
过一会儿,又把第2层到第9层的构件搬下来,整体放到剩下构件的第1层下面等等。
于是,Dr.Kong在进行了连续若干次“搬来搬去”后,还是这N个构件,又诞生了一件新的艺术品。
编程:
请输出新的艺术品最高十层构件的编号。
【标准输入】
第一行:
NK表示构件的总数和“搬来搬去”的总次数
第2~K+1行:
ABC表示要搬动的构件(即从第A层到第B层)整个放在第C层下面;
如果C等于0,则要搬动的构件将放到最高层。
【标准输出】
由十行组成,分别为组成新艺术品的第一层到第十层构件的编号。
【约束条件】
(1)10≤N≤200001≤k≤1000
(2)1≤A≤B≤N,0≤C≤N-(B-A+1)
【样例】
提示:
样例中仅是常规的测试数据输入及对应结果,特殊情况需要全面考虑,自己设计测试数据验证算法的健壮性。
标准输入(测试数据):
133
6121
290
10138
标准输出结果:
6
7
8
9
10
11
12
2
3
4
适宜于用带表头结点的单链表实现,涉及单个结点或连续多个结点的插入与删除。
分别用不带头结点的单链表和顺序表实现,领会三种方法的算法设计的优缺点和时间复杂度。
三、实验前的准备工作
1、掌握线性表的逻辑结构。
2、掌握线性表的链式存储结构。
3、熟练掌握线性表的插入、删除等操作。
四、实验报告要求
1、实验报告要按照实验报告格式规范书写。
2、实验上要写出多批测试数据的运行结果。
3、结合运行结果,对程序进行分析。
实验二栈和队列的基本操作及其应用
1、掌握栈和队列的顺序存储结构和链式存储结构,以便在实际中灵活应用。
2、掌握栈和队列的特点,即后进先出和先进先出的原则。
3、掌握栈和队列的基本运算,如:
入栈与出栈,入队与出队等运算在顺序存储结构和链式存储结构上的实现。
回文判断(*)
对于一个从键盘输入的字符串,判断其是否为回文。
回文即正反序相同。
如“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
654321
[SampleOutput]
Yes
No
1、掌握栈的逻辑结构和存储结构。
2、熟练掌握栈的出栈、入栈等操作。
3、掌握队列的逻辑结构和存储结构。
4、熟练掌握队列的出队、入队等操作
实验三二叉树的基本运算
1、使学生熟练掌握二叉树的逻辑结构和存储结构。
2、熟练掌握二叉树的各种遍历算法。
二叉树的基本操作实现(必做题)
建立一棵二叉树,试编程实现二叉树的如下基本操作:
1.按先序序列构造一棵二叉链表表示的二叉树T;
2.对这棵二叉树进行遍历:
先序、中序、后序以及层次遍历,分别输出结点的遍历序列;
3.求二叉树的深度/结点数目/叶结点数目;
(选做)
4.将二叉树每个结点的左右子树交换位置。
[基本要求]
从键盘接受输入(先序),以二叉链表作为存储结构,建立二叉树(以先序来建立),
如输入:
ABCффDEфGффFффф(其中ф表示空格字符)
则输出结果为
先序:
ABCDEGF
中序:
CBEGDFA
后序:
CGEFDBA
层序:
ABCDEFG
采用非递归算法实现二叉树遍历。
题目二、TheNumberoftheSameBST(选作)
【Description】
Manypeopleknowsbinarysearchtree.ThekeysinabinarysearchtreearealwaysstoredinsuchawayastosatisfytheBSTproperty:
LetXbeanodeinabinarysearchtree.IfYisanodeintheleftsubtreeofX,thenY<
=X.IfYisanodeintherightsubtreeofX,thenY>
X.
Forexample,
Itisabinarysearchtree.AnditcanbebuiltbyinsertingtheelementsofvectorA=(12,6,3,18,20,10,4,17,20)sequentially.ButitcanalsobebuiltbythevectorB=(12,18,17,6,20,3,10,4,20).
NowgivenavectorX,thenyoumaygetabinarysearchtreefromX.Yourjobistocalculatehowmanydifferentvectorscanbuildthesamebinarysearchtree.Tomakeiteasy,youshouldjustoutputthenumberofdifferentvectorsmod9901.
【Input】
Inputconsistsofseveralcases.Eachcasestartswithalinecontainingonepositiveintegern,whichisthelengthoftestvector.Theintegernislessthan20.Followingthistherewillbenpositiveintegers,whicharelessthen1000,onthenextline.Theinputwillendwithacasestartingwithn=0.Thiscaseshouldnotbeprocessed.
【Output】
Foreachtestcase,printalinewithasingleinteger,whichisthenumberofdifferentvectorsmod9901.
【SampleInput】
213
56318201041720
【Sampleoutput】
168
1、掌握树的逻辑结构。
2、掌握二叉树的逻辑结构和存储结构。
3、掌握二叉树的各种遍历算法的实现。
实验四哈夫曼树与哈夫曼编码
1、使学生熟练掌握哈夫曼树的生成算法。
2、熟练掌握哈夫曼编码的方法。
本次实验提供4个题目,难度相当,学生可以根据自己的情况选做,其中题目一是必做题,其它选作!
题目一、哈夫曼树和哈夫曼编码
一电文,有若干个不同字符,要求从终端输入这些不同字符及其出现的频率,然后对这些字符进行哈夫曼编码,并输出。
[测试数据]
利用教材P.148例6-2中的数据调试程序(可自己设定测试数据)。
[选作内容]
1、打印出该哈夫曼树
2、若从终端输入任意一段电文(假设仅为26个大小写英文字母),试编程高效地求出该段电文的哈夫曼编码。
如何快速统计不同字符的出现频率
3、译码:
将上述1的编码结果还原成电文。
题目二、寻求最佳判断(ACM/ICPC训练题)
试设计一个算法,用最少的比较,尽快地将N个随机的百分制成绩转换成五级分制.
0~59————————————————————bad
60~69————————————————————pass
70~79————————————————————general
80~89————————————————————good
90~100————————————————————excellent
[设计要求]
输入n个任意的百分制分数,要求输出对应的等级
自己定义
题目三果子合并
n堆果子,每堆果子数量任意,试设计一种最佳方案,将这n堆果子合并为一堆,使得合并工作量最小。
注:
规定合并两堆果子的工作量是这两堆果子的数量之和。
[标准输入]
M,NM表示M组测试数据,N表示每组测试数据数量不超过N个,每堆果子数量不超过10000。
随后的M行是测试数据。
[标准输出]
M行数据表示对应果子的合并工作量
[输入样例]:
26
7,5,2,4
5,6,2,9,7
【输出样例】:
35
65
题目四文本文件加密器(本题有一定难度,可协作完成)
【问题描述】
对任意文本文件,为安全保密,试为该文件内容加密,并输出加密后的文字,或对加密后的文件解密。
一个完整的加解密其应具有以下功能:
(1)初始化:
从终端读入一文本文件,统计每个字符出现的频率(考虑效率),建立哈夫曼树,并将该树存入某文件(考虑方式);
(2)编码:
利用建好的哈夫曼树对输入的文本文件中各字符进行编码,用列表的形式显示在屏幕上,并将编码结果存入另一文件中;
(3)解码:
对输入的加密文件能正确进行解码,获得原文件
自行设计
2、掌握哈夫曼树的定义及生成算法。
3、掌握哈夫曼编码的方法。
实验五图的基本操作
1、使学生可以巩固所学的有关图的基本知识。
2、熟练掌握图的存储结构。
3、熟练掌握图的两种遍历算法。
图的遍历(必做)
对给定图,实现图的深度优先遍历和广度优先遍历。
以邻接表为存储结构,实现连通无向图的深度优先和广度优先遍历。
以用户指定的结点为起点,分别输出每种遍历下的结点访问序列。
【测试数据】
由学生依据软件工程的测试技术自己确定。
在图G中求一条从顶点i到顶点s的简单路径
[题目三]:
在图G中求一条从顶点i到顶点s且长度为K的简单路径
1、掌握图的相关概念。
2、掌握图的逻辑结构和存储结构。
3、掌握图的两种遍历算法的实现。
实验六图的应用
3、掌握如何应用图解决各种实际问题。
本次实验提供若干个题目,难易程度不等,学生可以根据自己的情况选做至少一题。
最小生成树问题
若要在n个城市之间建设通信网络,只需要假设
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 指导书 new 高艳霞
![提示](https://static.bdocx.com/images/bang_tan.gif)