数据结构教学内容和要求

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数据结构》教学内容和要求
一、课程简介
1.课程性质、任务与目的
《数据结构》是计算机应用专业的一门专业基础课,主要任务是讨论各种数据结构的逻辑结构,存储结构及有关操作的算法。

目的是使学生学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适当的逻辑结构、存储结构及相应的算法,并初步了解对算法的时间分析和空间分析技术。

另一方面,通过对本课程算法设计和上机实践的训练,还应培养学生的数据抽象能力和程序设计的能力。

2.与其他课程的关系
《数据结构》的先修课主要是《C语言程序设计》,本课程将以C作为算法描述和上机实践的工具。

同时,本课程又是软件开发与设计等方面课程的基础。

3.课程特点
《数据结构》是实践性很强的课程,不仅要学习基本理论知识,更要注重上机实践,通过上机实践验证算法的正确性,掌握和巩固所学理论知识。

4.教学要求
教学要求在每章教学内容之后给出,大体分为三个层次:理解、掌握和熟练掌握。

它们的含义大致为:了解就是正确理解概念,掌握就是能够理解和分析现有知识,熟练掌握就是会运用所学知识解决实际问题。

二、教学基本要求
第1章 有关数据结构和算法分析的基本知识
[教学目的]:
向学生讲授有关数据、数据结构、抽象数据类型、面向对象思想的基本概念、算法及简单的算法分析
[教学的知识点]:
什么是数据结构
抽象数据类型及面向对象概念:数据类型;数据抽象与抽象数据类型;面向对象的概念;用于描述数据结构的语言
算法定义
性能分析与度量:算法的性能标准;算法的后期测试;算法的事前估计;空间复杂度度量;时间复杂度度量;时间复杂度的渐进表示法;渐进的空间复杂度
[教学要求]:
理解:数据结构基本概念
理解:抽象数据类型及面向对象概念
理解:算法的定义及算法的特性
掌握:算法的性能分析与度量方法
第2章 数组
[教学目的]:
向学生讲授数组抽象数据类型及利用数组实现的顺序表、字符串等数据结构的基本知识
[教学的知识点]:
作为抽象数据类型的数组:数组的定义和初始化;作为抽象数据类型的数组的相关操作的实现
顺序表:顺序表的定义和特点;顺序表的类定义;顺序表的查找、插入和删除;使用顺序表的事例
字符串:字符串的抽象数据类型;字符串操作的实现;字符串的简单模式匹配
[教学要求]:
理解:作为抽象数据类型的数组的定义
理解:顺序表的定义方式及实现
理解:字符串的定义及实现
第3章 链接表
[教学目的]:
向学生讲授链接表抽象数据类型(包括单链表、循环链表、双向链表)的、培养用链表实现并求解应用问题(如多项式操作)的应用能力。

[教学的知识点]:
单链表:单链表的结构;单链表的类定义;单链表中的插入与删除;带表头结点的单链表;用模板定义的单链表类;静态链表循环链表:循环链表的类定义;用循环链表解约瑟夫问题
多项式及其相加:多项式的类定义;多项式的加法
双向链表
[教学要求]:
掌握:单链表、循环链表及双向链表的定义及实现
理解:多项式类的定义及其加法运算
第4章 栈与队列
[教学目的]:
向学生讲授栈、队列、优先级队列等限制存取点的表的相关知识和提高学生应用它们解决应用问题的能力。

[教学的知识点]:
栈:栈的抽象数据类型;栈的顺序存储表示;栈的链接存储表示;栈的应用
队列 :队列的抽象数据类型;队列的顺序存储表示;队列的链接存储表示;队列的应用举例
优先级队列:优先级队列的定义;优先级队列的存储表示
[教学要求]:
理解:栈的定义及实现
掌握:表达式求值
理解:队列的定义及实现
理解:优先级队列的定义及链表实现算法
第5章 递归与广义表
[教学目的]:向学生讲授递归问题求解方法以及广义表的递归解法,培养应用递归方法求解应用问题的能力。

[教学的知识点]:
递归概念:递归的定义、递归的数据结构、递归问题的解法
递归过程与递归工作栈:递归过程实现的机制及递归工作栈的引用广义表:广义表的概念;广义表的表示及操作;广义表存储结构的实现;广义表的建立、访问、求深度、删除等算法
[教学要求]:
理解:递归的概念、递归问题的递归求解方法
理解:递归过程的机制与利用递归工作栈实现递归的方法
理解:广义表的定义及其实现方法
掌握:广义表的递归算法
第6章 树与森林
[教学目的]:
向学生讲授对树、二叉树等重要数据结构和特定的应用(如堆、霍夫曼树等)
[教学的知识点]:
树和森林的概念:树的定义;树的术语;树的抽象数据类型
二叉树:二叉树的定义;二叉树的性质;二叉树的抽象数据类型二叉树的表示:数组表示;链表存储表示
二叉树遍历:中序遍历;前序遍历;后序遍历;应用二叉树遍历的事例
线索化二叉树:线索;中序线索化二叉树;前序与后序的线索化堆:堆的定义;堆的建立;堆的插入与删除
树与森林:树的存储表示;森林与二叉树的转换;树的遍历;森林的遍历
二叉树的计数
霍夫曼树:路径长度;霍夫曼树;霍夫曼编码
[教学要求]:
理解:树和森林的概念
理解:二叉树的概念、性质及二叉树的表示
掌握:二叉树的遍历算法及其它应用算法
理解:线索化二叉树的特性及寻找某结点的前驱和后继的方法
掌握:堆的定义及其实现的方法,以及用来实现优先级队列的算法掌握:树与森林的实现和树的遍历算法
理解:二叉树的计数方法及从二叉树的前序和中序遍历结果得到二叉树的方法
掌握:霍夫曼树的实现方法及霍夫曼编码的概念
第7章 集合与搜索
[教学目的]:
向学生讲授集合结构、集合的应用、与集合相关的搜索方法和简单的性能分析方法
[教学的知识点]:
集合及其表示:集合基本概念;以集合为基础的抽象数据类型;用向量实现集合抽象数据类型;用有序链表实现集合的抽象数据类型并查集
简单的搜索结构:搜索的概念;静态搜索结构;顺序搜索;基于有序顺序表的折半搜索
二叉搜索树:定义;二叉搜索树上的搜索;二叉搜索树的插入;二叉搜索树的删除
AVL树:AVL树的定义;平衡化旋转;AVL树的插入和删除;AVL树的结点个数与高度的关系
[教学要求]:
掌握:集合及其表示方法,包括数组及有序链表的表示及其相关操作的实现算法
掌握:并查集的实现方法
掌握:静态搜索表的顺序搜索和折半搜索算法及其性能分析方法掌握:二叉搜索树的表示、搜索、插入、删除算法及其性能分析方法
掌握:AVL树的构造、插入、删除时的调整方法及其性能分析
第8章 图
[教学目的]:
向学生讲授图和网络结构的存储表示、图的遍历、最小生成树、活动网络等重要应用
[教学的知识点]:
图的基本概念:图的基本概念;图的抽象数据类型
图的存储表示:邻接矩阵;邻接表;邻接多重表,典型操作,如构造、求根、找第一个邻接顶点、找下一个邻接顶点等操作的实现算

图的遍历与连通性:深度优先搜索和广度优先搜索算法;连通分量;重连通分量
最小生成树:Kruskal算法;Prim算法
单源最短路径:Dijkstra算法
活动网络:用顶点表示活动的网络;用边表示活动的网络
[教学要求]:
理解:图的基本概念
掌握:图的存储表示
掌握:图的两种遍历算法与求解连通性问题的方法
理解:求解关节点及构造重连通图的方法
掌握:构造最小生成树的Prim算法和Kruskal方法
掌握:求解单源最短路径的dijkstra算法
掌握:活动网络的拓扑排序算法
掌握:求解关键路径的方法
第9章 排序
[教学目的]:
向学生讲授各种典型排序方法及其性能分析
[教学的知识点]:
概念:排序的定义、排序的时间代价、排序方法的稳定性
插入排序:直接插入排序;折半插入排序;链表插入排序;希尔排序
交换排序:起泡排序;快速排序
选择排序:直接选择排序;链表选择排序;锦标赛排序;堆排序归并排序:归并;迭代的归并排序算法;递归的链表归并排序
基数排序:多关键码排序;链式基数排序
外排序:外排序的基本过程;k路平衡归并;初始归并段的生成;最佳归并树
[教学要求]:
理解:排序的基本概念和性能分析方法
掌握:插入排序(直接插入排序;折半插入排序;链表插入排序)、交换排序(起泡排序;快速排序)、选择排序(直接选择排序;链表选择排序;锦标赛排序;堆排序)、归并排序等内排序的方法、算法及其性能分析方法
理解:基数排序方法及其性能分析方法
理解:多路平衡归并等外排序方法及败者树构造方法
理解:最佳归并树的建立方法
第10章 索引与散列结构
[教学目的]:
向学生讲授索引与散列结构(即用于外部搜索的文件结构)
[教学的知识点]:
静态索引结构:线性索引;倒排表;m路静态搜索树
动态索引结构:动态的m路搜索树;B树;B树的插入;B树的删
除;B+树的插入与删除
散列:散列表与散列方法;散列函数;处理冲突的闭散列方法;处理冲突的开散列方法;散列表分析
[教学要求]:
掌握:静态索引结构,包括线性索引、倒排索引、静态索引树的搜索和构造方法
掌握:动态索引结构,包括B树、B+树的搜索和构造方法掌握:散列法,包括散列函数的构造、解决冲突的方法
三、教科书、参考书
(一) 教科书
严蔚敏、吴伟民编《数据结构》(C语言版),清华大学出版社。

(二) 参考书
1、许卓群等编《数据结构》,高等教育出版社。

2、陈本林、陈佩佩 等编《数据结构》,南京大学出版。

3、E.HOrowitz & S.Sahni 《Fundamentals of Data Structures》。

数据结构模拟试题
一、单选题
1. 以下数据结构中哪一个是线性结构?( )
A. 有向图
B. 栈
C. 线索二叉树
D. B树
2. 在一个单链表HL中,若要向表头插入一个由指针p指向的结
点,则执行( )。

A. HL=p; p->next=HL;
B. p->next=HL; HL=p;
C. p->next=HL; p=HL;
D. p->next=HL->next; HL->next=p;
3. 在一个带有头结点的单链表HL中,若要向表头插入一个由指
针p指向的结点,则执行( )。

A. HL=p; p->next=HL;
B. p->next=HL; HL=p;
C. p->next=HL; p=HL;
D. p->next=HL->next; HL->next=p;
4. 单链表的每个结点中包括一个指针next,它指向该结点的后继
结点。

现要将指针q指向的新结点插入到指针p指向的单链表结
点之后,下面的操作序列中哪一个是正确的?( ) A.q=p->next; p->next=q->next; B.p->next=q-
>next;q=p->next
C. q->next=p->next; p->next=q;
D. P->next=q; q-
>next=p->next;
5. 在一个循环顺序存储的队列中,队首指针指向队首元素的(
)位置。

A. 前一个 B. 后一个 C. 当前
6. 以下哪一个不是队列的基本运算?( )
A.从队尾插入一个新元素
B.从队列中删除第i个元素
C.判断一个队列是否为空
D.读取队头元素的值
7. 用链接方式存储的队列,在进行删除运算时( ).
A.仅修改头指针
B.仅修改尾指针
C.头、尾指针都要修改
D.头、尾指针可能都要修改
8. 对线性表,在下列哪种情况下应当采用链表表示?( )
A.经常需要随机地存取元素
B.经常需要进行插入和删除操作
C.表中元素需要占据一片连续的存储空间
D.表中元素的个数不变
9. 字符A、B、C依次进入一个栈,按出栈的先后顺序组成不同的
字符串,至多可以组成( )个不同的字符串?
A.5
B.4
C.6
D.1
10. 下述哪一条是顺序存储方式的优点?( )
A.存储密度大 B.插入运算方便
C. 删除运算方便
D.可方便地用于各种逻辑结构的存储表示
11. 从二叉搜索树中查找一个元素时,其时间复杂度大致为(
)。

A. O(n)
B. O(1)
C. O(log2n)
D. O(n2)
12. 由权值分别为3,8,6,2,5的叶子结点生成一棵哈夫曼树,它的
带权路径长度为________。

A 24
B 48
C 72
D 53
13. 下列关于二叉树遍历的叙述中,正确的是( ) 。

A.若一个结点是某二叉树的中序遍历的最后一个结点,则它必是该
二叉树的前序最后一个结点
B.若一个点是某二叉树的前序遍历最后一个结点,则它必是该二叉树的中序遍历的最后一个结点
C.若一个树叶是某二叉树的中序遍历的最后一个结点,则它必是该二叉树的前序遍历最后一个结点
D.若一个树叶是某二叉树的前序最后一个结点,则它必是该二叉树的中序遍历最后一个结点
14. 高度k的二叉树的最大结点数为( ).
A.2k-1 B.2K+1 C.2K-1 D. 2k-1
15. 下面关于图的存储的叙述中正确的是( ).
A.用邻接表法存储图,占用的存储空间大小只与图中结点个数有关,而与边数无关
B.用邻接表法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关
C. 用邻接矩阵法存储图,占用的存储空间大小只与图中结点个数
有关,而与边数无关
D.用邻接矩阵法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关
16. 在顺序表(2,5,7,10,14,15,18,23,35,41,52)中,用二分法查找
关键码值10,所需的关键码比较次数为
A.2
B.3
C.4
D.5
17. 对线性表进行二分法查找,其前提条件是( ).
A. 线性表以顺序方式存储,并且按关键码值排好序
B. 线性表以顺序方式存储,并且按关键码值的检索频率排好序
C. 线性表以链接方式存储,并且按关键码值排好序
D. 线性表以链接方式存储,并且按关键码值的检索频率排好序
18. 下列哪一个关键码序列不符合堆的定义?( )
A. a、c、d、g、h、m、p、q、r、x
B. a、c、m、d、
h、p、x、g、o、r
C. a、d、p、r、c、q、x、m、h、g
D. a、d、c、m、p、g、h、x、r、q
19. 对n个记录的文件进行快速排序,所需要的辅助存储空间为
A. O(1)
B. O(1og2n)
C. O(n)
D. O(n2)
20. 在待排序文件已基本有序的前提下,下述排序方法中效率最高
的是
A.直接插入排序
B.直接选择排序
C.快速排序
D.归并排序
21. 设有关键码序列(q,g,m,z,a,n,p,x,h),下面哪一个
序列是从上述序列出发建堆的结果?
A. a,g,h,m,n,p,q,x,z
B. a,g,m,h,q,n,p,x,z
C. g,m,q,a,n,p,x,h,z
D. h,g,m,p,a,n,q,x,z
22. 下列关于数据结构的叙述中,正确的是( ).
A. 数组是同类型值的集合
B. 递归算法的程序结构比迭代算法的程序结构更为精炼
C. 树是一种线性结构
D. 用一维数组存储二叉树,总是以先序遍历的顺序存储各结

二、填空题
1. 数据的逻辑结构被分为_________、________、__________和
___________四种。

2. 数据的物理结构被分为_________、________、__________和
___________四种。

3. 一个算法的时间复杂度为(3n2+2nlog2n+4n-7)/(5n),其数量级
表示为________。

4. 对于一个长度为n的单链存储的线性表,在表头插入元素的时间
复杂度为_________,在表尾插入元素的时间复杂度为
____________。

5. 对于一个长度为n的顺序存储的线性表,在表头插入元素的时间
复杂度为_________,在表尾插入元素的时间复杂度为
____________。

6. 在以HL为表头指针的带表头附加结点的单链表和循环单链表
中,链表为空的条件分别为________和________。

7. 一个广义表中的元素分为________元素和________元素两类。

8. 从一个链栈中删除一个结点时,需要把栈顶结点的_________域
的值赋给________。

9. 进行函数调用时,需要把每个实参的值和调用后的________传
送给被调用的函数中。

10. 设W为一个二维数组,其每个数据元素占用6个字节,行下标i从
0到8 ,列下标j从0到3 ,则二维数组W的数据元素共占用__个字节。

W中第6 行的元素和第4 列的元素共占用__个字节。

若按行顺序存放二维数组W,其起始地址为100,则二维数组W的最后一个数据元素的起始地址为__。

11. 在线性表的单链存储中,若一个元素所在的结点地址为p,则其
后继结点的地址为_________,若假定p为一个数组a中的下标,则其后继结点的下标为_____________。

12. 在稀疏矩阵所对应的三元组线性表中,每个三元组元素按
_________为主序、_________为辅序的次序排列。

13. 栈又称为_______________表,队列又称为___________表。

14. 中缀算式(3+4)*2/(8-5)所对应的后缀算式为
_______________________________。

15. 后缀算式4 2 3 * + 10 5 / -的值为__________。

16. 对于一棵具有n个结点的二叉树,一个结点的编号为
i(1≤i≤n),若它有左孩子则左孩子结点的编号为________,
若它有右孩子,则右孩子结点的编号为________,若它有双
亲,则双亲结点的编号为________。

17. 在一棵高度为5的理想平衡树中,最少含有________个结点,最
多含有________个结点。

18. 假定一棵树的广义表表示为A(B(C,D(E,F,G),H(I,
J))),则树中所含的结点数为____个,树的深度为______,
树的度为_________。

19. 若一棵二叉树中只有叶子结点和左、右子树皆非空的结点,设
叶结点的个数为K,则左、右子树皆非空的结点个数是
________。

20. 在树中,一个结点的直接后继结点的个数称为该结点的
________。

21. 在n个带权叶子结点构造出的所有二叉树中,带权路径长度最小
的二叉树称为________。

WPL称为_____________________。

22. 对一棵二叉搜索树进行中序遍历时,得到的结点序列是一个
__________。

23. 当向一个小根堆插入一个具有最小值的元素时,需要逐层
_________调整,直到被调整到____________位置为止。

24. 在一个堆的顺序存储中,若一个元素的下标为i(0≤i≤n-1),
则它的左孩子元素的下标为______,右孩子元素的下标为
________。

25. 在一个具有n个顶点的无向完全图中,包含有________条边,在
一个具有n个顶点的有向完全图中,包含有________条边。

26. 对于一个具有n个顶点和e条边的有向图和无向图,若采用边集
数组表示,则存于数组中的边数分别为________和________
条。

27. 以二分查找方法从长度为12的有序表中查找一个元素时,平均
查找长度为________。

28. 假定一个线性表为(12,23,74,55,63,40,82,36),若按Key % 3
条件进行划分,使得同一余数的元素成为一个子表,则得到的
三个子表分别为_____________、_____________和
_____________。

29. 在线性表的散列存储中,装填因子又称为装填系数,若用m表示
散列表的长度,n表示待散列存储的元素的个数,则等于
________。

30. 在一棵m阶B_树上,每个非树根结点的关键字数目最少为
________个,最多为________个,其子树数目最少为
________,最多为________。

31. 表示图的三种常用的存储结构为__________、_______和
________。

32. 对于一个具有n个顶点和e条边的有向图和无向图,在其对应的
邻接表中,所含边结点分别有_______个和________个。

33. 对用邻接矩阵表示的有向图进行任一种遍历时,其时间复杂度
为_________。

对用邻接表表示的有向图进行任一种遍历时,其
时间复杂度为________。

34. 对于线性表(70,34,55,23,65,41,20,100)进行散列存
储时,若选用H(K)=K %9作为散列函数,则散列地址为1的元
素有________个,散列地址为7的有_______个。

35. 在索引表中,若一个索引项对应主表的一个记录,则此索引为
__________索引 ,若对应主表的若干条记录,则称此索引为
________索引。

36. 向一棵B_树插入元素的过程中,若最终引起树根结点的分裂,
则新树比原树的高度___________。

37. 在堆排序的过程中,对任一分支结点进行筛运算的时间复杂度
为________,整个堆排序过程的时间复杂度为________。

38. 快速排序在平均情况下的时间复杂度为________,在最坏情况
下的时间复杂度为________。

39. 在归并排序中,进行每趟归并的时间复杂度为______,整个排
序过程的时间复杂度为____________,空间复杂度为
___________。

40. 在快速排序、堆排序、归并排序中,_________排序是稳定的。

三、运算题
1. 在如下数组A中链接存储了一个线性表,表头指针为A
[0].next,试写出该线性表。

a 0 1 2 3 4 5 6 7
data605078903440
next4302571
2. 假定一棵二叉树广义表表示为a(b(c),d(e,f)),分别写出对
它进行先序、中序、后序、按层遍历的结果。

先序:
中序:
后序:
按层:
3. 已知一棵二叉树的先序遍历的结果是ABECDFGHIJ, 中序遍历
的结果是EBCDAFHIGJ, 试画出这棵二叉树。

4. 铁路进行列车调度时, 常把站台设计成栈式结构的站台,如
下图1所示。

试问:
(1) 设有编号为1,2,3,4的四辆列车, 顺序开入栈式结构的站台,
则可能的出栈序列有多少种?
(2) 若进站的四辆列车顺序如上所述, 那么是否能够得到4123这
样的出栈序列? 如果不能, 说明为什么不能。

如果能, 说明
如何得到该序列的(即写出“进栈”或“出栈”的序列)。

(3) 若进站的四辆列车顺序如上所述, 那么是否能够得到3421这
样的出栈序列? 如果不能, 说明为什么不能。

如果能, 说明
如何得到该序列的(即写出“进栈”或“出栈”的序列)。

图1
5. 写出下列中缀表达式的后缀形式:
(1) A * B * C
(2) A + B – C + D
(3) A* B + C
(4) (A + B) * D + E / (F + A * D) + C
6. 画出下列广义表的带有附加表头结点的链接存储结构图,并
给出它们的长度和深度。

(1) D=((a,b),(c,d))
(2) A=((a,(b,c),((d),e)))
7. 将一组元素37,56,23,65,22,10,29依次插入一棵空二叉搜索
树中,请画出该二叉搜索树。

8. 设有序顺序表中的元素依次为017, 094, 154, 170,
275,503, 509, 512, 553, 612, 677, 765, 897, 908。

试画
出对其进行折半搜索时的判定树, 并计算搜索成功的平均搜
索长度和搜索不成功的平均搜索长度。

9. 已知一个图的顶点集V和边集E分别为:
V={0,1,2,3,4,5,6,7};
E={(0,1)8,(0,2)5,(0,3)2,(1,5)6,(2,3)25,(2,4)13,(3,5)9, (3,6)10,
(4,6)4,(5,7)20};
(1) 按照普里姆算法从顶点0出发得到最小生成树,试写出在最小生成树中依次得到的各条边。

(2) 用克鲁斯卡尔算法得到最小生成树,试写出在最小生成树中依次得到的各条边。

10. 已知一个图的顶点集V和边集E分别为:
V={1,2,3,4,5,6,7,8};
E={(1,2),(1,3),(2,4),(2,5),(3,6),(3,7),(4,8),(5,8),
(6,8),(7,8)};
若存储它采用邻接表,并且每个顶点邻接表中的边结点都是按照终点序号从小到大的次序链接的,则:
(1) 给出从1号顶点出发按主教材中介绍的按深度优先搜索遍历的顶点序列
(2) 给出从1号顶点出发按主教材中介绍的按广度优先搜索遍历的顶点序列
(提示:先画出对应的图形,然后再运算)。

11. 已知一个图的顶点集V和边集E分别为:
V={0,1,2,3,4,5,6,7};
E={(0,2),(1,3),(1,4),(2,4),(2,5),(3,6),(3,7),(4,7), (4,8),
(5,7),(6,7),(7,8)};
若存储它采用邻接表,并且每个顶点邻接表中的边结点都是按照终点序号从小到大的次序链接的,按主教材中介绍的拓朴排序算法进行排序,试给出得到的拓朴排序的序列。

(提示:先画出对应的图形,然后再运算)。

12. 散列表的地址区间为0-16,散列函数为H(K)=K % 17,采用
线性探查法处理冲突,并已将关键字序列26、25、72、38、
8、18、59依次存储到了散列表中:
(1) 元素59存放在散列表中的地址是多少?
(2) 搜索元素59需要比较的次数是多少?
13. 已知待散列的线性表为(36,15,40,63,22),散列用的
一维地址空间为[0..6],假定选用的散列函数是H(K)=K %
7,若发生冲突采用线性探查法处理,试:
(1) 计算出每一个元素的散列地址并在下图中填写出散列表;
(2) 求出在查找每一个元素概率相等情况下的平均查找长度。

0123456
14. 假定一组记录的排序码为(46,79,56,38,40,80,25,34),试写
出对其进行快速排序的第一次划分的结果。

四、阅读算法,回答问题
1. void AE(Stack& S)
{
InitStack(S);
Push(S,30);
Push(S,40);
Push(S,50);
int x=Pop(S)+2*Pop(S);
Push(S,x);
int i,a[4]={5,8,12,15}; for(i=0;i<4;i++) Push(S,a[i]);
while(!StackEmpty(S)) cout<<Pop(S)<<’ ‘; }
该算法被调用后得到的输出结果为:
2. void AJ(adjlist GL, int i, int n)
{
Queue Q;
InitQueue(Q);
cout<<i<<’ ‘;
visited[i]=true;
Qinsert(Q,i);
while(!QueueEmpty(Q)) {
int k=Qdelete(Q);
edgenode* p=GL[k];
while(p!=NULL)
{
int j=p->adjvex;
if(!visited[j]) {
cout<<j<<’ ‘;
visited[j]=true;
Qinsert(Q,j);
}
p=p->next;
}
}
}
该算法的功能为:
3. 指出下列算法的功能,并求出时间复杂度:
(1) int sum1(int n)
{
int p=1,s=0;
for (int i=1;i<=n;i++){
p*=i;s+=p;
}
return s;
}
(2) int sum2(int n)
{
int s=0;
for (int i=1;i<=n;i++){
int p=1;
for (int j=1;j<=i;j++)
p*=j;
s+=p;
}
return s;
}
4. 在下面的每个程序段中,假定线性表La的类型为List,元素
类型ElemType为int,并假定每个程序段是连续执行的。

试写
出每个程序段执行后所得到的线性表La。

(1) InitList(La);
Int a[]={48,26,57,34,62,79};
For (i=0;i<6;i++)
Insert(La,a[i]);
TraverseList(La);
(2) Insert(La,56);
DeleteFront(La);
InsertRear(La, DeleteFront(La));
TraverseList(La);
(3) For (i=1;i<=3;i++){
Int x=GetElem(La,i);
If (x%2==0) Delete(La,x);
}
TraverseList(La);
(4) ClearList(La);
For (i=0;i<6;i++)
InsertRear(La,a[i]);
Delete(La,a[5]);
Sort(La);
Insert(La,a[5]/2);
TraverseList(La);
五、算法填空,在画有横线的地方填写合适的内容。

1. 向单链表的末尾添加一个元素的算法。

Void InsertRear(Lnode*& HL,const ElemType& item)
{
Lnode* newptr;
newptr=new Lnode;
If (______________________)
{
cerr<<”Memory allocation failare!”<<endl;
exit(1);
}
newptr->data=item;
_________________=NULL;
if (HL==NULL)
HL=newptr;
else{
Lnode* P=HL;
While (P->next!=NULL)
____________________;
p->next=newptr;
}
}
2. 向以BST为树根指针的二叉搜索树上插入值为item的结点的递
归算法。

void Insert(BtreeNode*& BST, const ElemType& item) {
if(BST==NULL)
{ BtreeNode* p=new BtreeNode;
p->data=item;
_______________________;
BST=p;
}
else if(item<BST->data) ___________________;。

相关文档
最新文档