电院数据结构与算法大平台试验指导书.docx

上传人:b****1 文档编号:19117082 上传时间:2023-04-24 格式:DOCX 页数:14 大小:40.94KB
下载 相关 举报
电院数据结构与算法大平台试验指导书.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

电院数据结构与算法大平台试验指导书

 

数据结构与算法实习指导书

 

上海交通大学电院数据结构大平台课程组

 

目录

 

1.关于实习步骤的要求和建议

2.上机实习

实习一链表

实习二栈和队列

实习三树和二叉树

实习四查找

实习五图

实习六排序

3.注意事项

 

1.关于实习步骤的要求和建议

从以往的教学事先实习的经验来看,在初学阶段执行严格的实习步骤规范(包括上机操作规范),机时利用率会大大提高,有助于养成良好的程序编制风格,培养严谨、科学、高效的工作方式。

在以往的教学实践中,经常发现很多学生抱怨说,化了两个小时才找出一个错误,甚至一无所获。

他们不明白造成这种情况的原因,正是他们自己。

有的学生不屑于按实习步骤规范去做,甚至对于实习步骤的要求和建议看都不看一遍,认为那是浪费时间,这是及其害的。

实习步骤规范不但可以培养科学化的工作作风,而且还能有效地避免错误。

具体的步骤机规范如下:

1.问题分析与系统的结构设计:

充分地分析和理解问题本身,弄清要求作什么,限制条件是什么。

按照以数据结构为中心的原则划分模块,即定义数据结构及其在这些结构之上的操作,使得对数据结构的存取通过这些操作加以实现。

在这个过程中,要综合考虑系统功能。

要考虑系统结构清晰、合理、简单并且易于调试。

最后写出每个子程序(过程或函数)的规格说明,列出它们之间的调用关系,可以使用调用关系图表示则更加清晰,这样便完成了系统结构设计。

2.详细设计和编码

详细设计的目的是对子程序(过程或函数)的进一步求精。

用IF、WHILE和赋值语句等,以及自然语言写出算法的框架。

利用自然语言的目的是避免陷入细节。

在编码是,可以对详细设计的结果进一步求精,用高级语言表示出来。

程序的每一行最好不超过60个字符。

每个子程序(或过程、函数)通常不要太长,以40行为宜。

子程序(或过程、函数)包含的程序行数太多,易于造成理解的困难。

控制IF、WHILE等语句的连续嵌套的深度。

程序的目的性必须明确。

对每一段程序完成的作用,除非常明显的除外(如:

x=x+1;注释为x加1,没有什么意义),都应加以注释。

这会对程序的调试提供很多方便。

另外,根据情况可以设立若干调试点,即输出若干信息,用于验证和你的设想是否一致。

另外,对于输入输出语句,必须对它们的作用加以说明。

否则,在调试程序时,无法了解系统需要输入说明,系统输出的又是什么。

程序的书写,必须按照一定的规范,如保留字小写时涂黑,或者大写等等。

3.上机准备和静态检查

上机准备:

●高级语言文本

●熟悉机器的用户手册,熟悉常用的命令。

●准备调试的工具,考虑调试方案。

如果机器上没有现成的调试工具可供利用,可以自己先设计一些以供使用。

●静态检查

自己用一组数据手动执行程序;或同同学一起阅读自己的程序,以全面地了解该程序的逻辑。

4.上机调试程序

自底向上,先调试底层模块,再调试上层模块。

最后,整个程序进行联调。

调试正确后将源程序和运行结果加以列印输出。

5.实习报告的整理

●需求及规格说明

问题描述,求解的问题是什么。

●设计:

设计思想:

存储结构、主要的算法思想。

设计表示:

子程序(过程或函数)的规格说明,通过调用关系图表示它们之间的调用关系。

实现注释:

详细设计表示:

主要算法的框架。

●用户手册:

使用说明。

●调试报告:

问题是如何解决的,讨论与分析、改进设想、经验与体会、时空复杂度等。

●附录

源程序清单和结果:

源程序必须有注释,以及必要的测试数据和运行结果数据。

提倡用英文描述。

●实验报告要求:

在程序开发过程中,逐步形成各种必要的文档及资料。

可以写在实验报告纸上,或以电子文档的形式进行书写。

2.上机实习

以下的实习题目配合课程的进度,请同学们自己务必完成。

为了锻炼自己的应用各种不同的数据结构的能力,尽可能的多作一些题目是非常必要的。

在完成各种不同题目的过程中,对各种算法的时、空复杂性的分析,将帮助您在更高的角度解决各种应用问题。

 

3、注意事项:

●同学的实习报告可一人一组。

每个实习中的题目,不打星号者必须完成。

打星号的题目,鼓励同学选作。

●提倡同学用英文书写实习报告,但一旦采用英文,将全部采用英文,不许中英各半,不洋不中。

可以先将实习报告以电子文档提交,具体如何提交,届时会通知大家。

以下为各次实习作业:

 

实习一链表

 

1、设有一个双链表,每个结点中除有PRIOR,NEXT及DATA(可设为

正整数)三个域之外,还有一个专门记录访问该结点次数的数据域FREQ

,其值在初始化时为零。

每当在链表中进行一次SEACH〔L,KEY〕

时,则数据域DATA之值等于KEY的结点,其FREQ域之值将加一。

并使该双链表中结点按FREQ之值的递减顺序排列,FREQ值越大的结点

越靠近散双链表的头结点。

请编写符合上述要求的SEACH(L,KEY)程

序。

2、请写出计算两个以单链接表表示的多项式相乘的程序。

3、在计算机上先输入一串正整数的序列。

请编写一个程序,首先用链接表

存储该序列。

然后执行删除操作,即先从链表中找出最小的结点,删除它

然后再在剩余的链表中,找出最小的结点,再删除之。

直至表空为止。

4、已知两个单链表A和B分别表示两个集合,其元素递增排列。

请编写程

序求集合A和B的交集C=AB,要求单链表C按其元素递增排列,并

利用原表(即表A和表B)的结点空间存放表C。

*5、将具有头结点的单链表的所有指针全部进行导向。

要求使用的额外空间

只能为O

(1),时间代价只能为O(n),其中n为结点个数。

*6、假设有两个按元素值非递减有序排列的线性表A和B,均以单链表作存储

结构,请编写程序将表A和表B归并成一个按元素非递减有序(允许值相

同)排列的线性表C,并要求利用原表(即表A和表B)的结点空间存放表

C。

 

实习二栈和队列

1.假设以带头结点的循环链接表表示队列,并且只设一个指向队尾结点的指

针,请给出进出队的完整的程序。

2、假设有N个栈共同使用一块顺序存储的空间,为简单起见可设为共同使用

数组inta〔200〕。

初始状态为各栈等分所有的空间。

每当有某栈上溢

时,将其余各栈的剩余空间均匀分配给各栈,这样就必然使得堆栈发生移

动。

请给出这种情况下的出、入栈实现程序。

*3、参见附图所示的火车车箱的调度情况。

请问:

a.如进栈的车厢的序列为1、2、3、4,则出栈的序列有那些种?

b.给出当进栈的车厢的序列为1、2、3、4、……、N时,所有出栈的序列

的程序。

 

 

 

4、假设有二个栈共同使用一块顺序存储的空间,为简单起见可设为共同使

用数组inta〔200〕。

它们的栈底分别设在数组的两端,而栈顶指针在进

行插入操作时,向中间方向移动。

请给出进出栈的程序。

5、在一次舞会上,来了许多男士和女士。

这些男士和女士分别排队进入舞

厅。

第一个舞曲开始后,男士和女士按照队列顺序配对并走入舞池。

当男

士多于女士时,配对剩余的男士仍然在队列中。

一曲终了,跳完舞的男士排

在队尾,女士排成新的队列。

下一舞曲开始时,男女重新按照队列顺序配对

跳舞。

当女士多于男士时,配对剩余的女士仍然在队列中,等待下一曲配

对。

现在要求按照队列中的先后顺序打印出第一轮配好对的人员名单和剩余

人员的名单。

实习三树和二叉树

1、在计算机上首先输入前序及中序周游一棵二叉树的结果,为简单起见可以

假定该二叉树的结点的数据场之值仅为一大写英文字母。

请给出该二叉树的

后序周游结果,并以二叉链接形式存储该二叉树。

2、两棵二叉树称作相似的,它们要么全为空。

要么不是空树但它们的左子树

相似且右子树相似。

请设计一个程序判断两棵二叉树是否相似。

3、请编写一个程序,确定二叉树的特征。

如:

每个节点的层次,从根到该节

点的枝长(路径长度),子孙的个数及祖先的个数。

每个节点在前序、中

序、后序中的访问的序号。

*4、用标准形式给出了一棵度为三的树(每个结点包含数据场、指向儿子节

点的指针场),设该三次树的数据场的值为一个字符,请编写一个程序,

以树的两维形式表示打印节点的值。

5、如果在二叉树的定义中允许出现具有相同关键字的结点。

试编写以动态

存储结构存储的排序二叉树的插入及删除程序。

*6、从键盘上输入若干个数对,如:

(I1,W1),(I2,W2),……,(Im,

Wm);其中I1,I2,……,Im是本结点的层号。

注意:

根结点的层号为1,

其他各层上的结点的层号依次比上一层的结点的层号大1。

另外:

W1,

W2,……,Wm是结点的前序(即先根次序)序列。

这是用层号+前序表示树

的一种方法。

请编写一段程序,存储这棵树。

为了简单起见,设这棵树上

的结点的度数最大为3,结点的存储形式为:

dataparentson1son2son3

其中:

data域为结点的数据场,parent域为结点的双亲结点的地址,son1,son2,son3分别给出结点的三个儿子的地址。

实习四查找

1、已知整数数组inta[n+1]。

其中,a[1],a[2],……a[n-2],a[n-1]已被整理为最小化堆,a[0]不用。

在将a[1],a[2],……a[n-1],a[n]整理成最小堆时,可分两步进行:

1、先找出a[n]之值的插入位置;2、再进行适当的位置移动即可。

现仅仅考虑第一步,找出a[n]之值的插入位置。

请设计一个程序加以完成。

注意该程序的时间复杂性必须为O(log2log2n),并加以证明。

2、知一以数组形式存储的有序表。

请用差值查找法,编制查找具有给定关键字KEY的结点的程序。

3、从键盘上输入一串正整数,最后输入-1作为输入结束的标志。

如输入的序列为:

2,5,7,23,48,96,……,-1。

请以这些正整数的值作为二叉排序树中的结点的数据场之值,建立一棵二叉排序树。

然后,给定一个正整数值,设其为key,在该二叉排序树中查找关键字为key的结点。

若存在,将将该关键字更新为x,并仍应保持该二叉排序树的性质不变。

注意:

不能采用数组保存这棵二叉排序树,因为事先并未已知二叉排序树中的结点的个数。

4、已知一棵排序二叉树,树中结点的形式为:

datainfoleftright

其中,data给出结点的数据场,info给出本结点的左子树中的结点总数,left和right分别给出本结点的左儿子和右儿子的地址。

数据场data和info的类型皆为int。

又已知该二叉排序树的根结点的地址为root。

请设计二个函数,分别实现下述功能:

1.按递增序找出该二叉排序树中的第i个结点。

2.插入数据场之值为x的结点,并仍应保持该二叉排序树的性质不变。

5、已知一棵二叉排序树,其根结点的地址为root。

请编写一个程序,构造出一棵具有相同结点的满二叉树,且它同样是二叉排序树。

提示:

可利用中序遍历,分别找出各个结点序列的中点元素,然后重新构造一棵二叉排序树。

*6、给定一个正整数的序列A={a1,a2a3,……,an},首先构造一个单链接表。

然后,输入一个待查正整数的序列B={b1,b2,b3,……,b3n},而且bk∈A,1≤k≤n。

由于B的个数多于A,所以在查找时必定有重复的正整数出现。

请设计一个程序,在找到一个正整数之后,将相应的结点向单链表的表首结点移动一个。

*7、在平衡的排序二叉树的中,试编写删除具有给定关键字的结点的程序。

实习五图

1.以数偶的形式输入一串数据。

如:

(A,B)为从起始结点,其

数据场之值为一大写的英文字母A,到终止结点,其数据场之值为一大写的英文字母B的无向边。

请用无向图的邻接多重表存储该无向图,并注意一定要使用动态存储结构。

如果该数偶代表有向边的话,请用有向图的十字链表存储该有向图,并注意也要使用动态存储结构。

*2、已知一以动态存储结构形式存储的,以邻接表表示的有向图。

请求出它的强连通分量。

3、已知一以动态存储结构形式存储的,以邻接多重表表示的无向图。

请用KRUSKAL算法求出它的最小代价生成树。

4、已知一以邻接矩阵形式存储的AOV图。

请求出它的所有的合理的拓扑排序的序列。

*5、已知一以动态存储结构形式存储的,以邻接多重表表示的无向图。

请编写一个统一的程序,用以求解最小代价生成树问题及源点至其它顶点间的最短距离问题。

可由使用者指明究竟求解哪个问题。

6、已知一以动态存储结构形式存储的,以邻接表表示的有向图。

请使用非递归的方法编写该有向图的深度及广度优先的遍历程序。

实习六排序

1、编写一个程序,查找未排序序列中第K个最小的元素,要求使用类似快速分类的算法。

并简单讨论一下在最坏情况下,所耗费的时间。

2、如果有17000个不同的正整数组成的序列,每个正整数都在0至19999之间。

请使用适当的散列函数,使得将该序列进行分类的时间复杂性为O(N)级。

注意此处并不限制辅助内存的多少。

*3、写一个利用合并分类法进行排序的非递归程序。

4、奇偶分类。

将被分类的序列进行如下操作。

反复进行直至不再进行交换为止。

第一遍:

比较x[i]同x[i+1](对所有奇数i);

第二遍:

比较x[i]同x[i+1](对所有偶数i);

每次比较,如果x[i]>x[i+1]则交换之,继续这样作,直至不交换为止。

1.该方法的结束条件如何?

2.写一个C++程序加以实现。

*5、作为输入给定的是四个俱乐部C1,C2,C3,C4的未排好次序的成员名单。

假定各个俱乐部的成员名单不超过250,请编写一个程序,给出至少属于三个俱乐部的一切人的名单,设成员名单中写的不是名字而是正整数编号。

*6、写一个“完美”的非递归的快速分类的程序。

 

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

当前位置:首页 > 小学教育 > 语文

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

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