新数据结构讲义9.docx
- 文档编号:23270205
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:26
- 大小:214.14KB
新数据结构讲义9.docx
《新数据结构讲义9.docx》由会员分享,可在线阅读,更多相关《新数据结构讲义9.docx(26页珍藏版)》请在冰豆网上搜索。
新数据结构讲义9
第九讲
总复习课
我们回顾一下学过的内容,数据结构是一门专业课。
本课程的目的和任务是使学生较全面地掌握各种常用的数据结构,为学习后续软件课程提供必要的基础,提高运用数据结构解决实际问题的能力。
第一章的目的是介绍数据结构中常用的基本概念和术语以及学习数据结构的意义,要求了解本章介绍的各种基本概念和术语,掌握算法描述和分析的方法。
第二章的目的是介绍线性表的逻辑结构和各种存储表示方法,以及定义在逻辑结构上的各种基本运算及其在存储结构上如何实现这些基本运算。
要求能够针对具体应用问题的要求和性质,选择合适的存储结构设计出相应的有效算法,解决与线性表相关的实际问题。
第三章的目的是介绍栈和队列的逻辑结构定义及在两种存储结构上如何实现栈和队列的基本运算,重点是掌握栈和队列在两种存储结构上实现的基本运算。
第四章的目的是介绍串的逻辑结构,存储结构及其串上的基本运算,重点是掌握串上实现的模式匹配算法。
第五章的目的是介绍多维数组的逻辑结构特征及其存储方式,特殊矩阵和稀疏矩阵的压缩存储方法及广义表的概念。
重点是熟悉多维数组的存储方式,矩阵的压缩存储方式,广义表的定义及其求表头和表尾的运算。
第六章的目的是介绍二叉树的定义,性质,存储结构,遍历,线索化,树的定义,存储结构,遍历,树和森林与二叉树的转换,哈夫曼树及哈夫曼编码等内容。
重点是掌握二叉树的遍历算法及其有关应用。
第七章的目的是介绍图的基本概念,两种常用的存储结构,两种遍历算法以及图的应用算法,要求重点掌握在图的两种存储结构上实现的遍历算法。
难点是图的应用算法:
求最小生成树,求最短路径以及拓扑排序。
第八章的目的是介绍五类内部排序方法的基本思想,排序过程,算法实现,时间和空间性能的分析以及各种排序方法的比较和选择。
重点掌握快速排序,堆排序,归并排序和基数排序的基本思想及排序过程,难点是这四个排序算法的实现。
第九章的目的是介绍线性表,树和散列表的查找方法,算法实现和各种查找方法的时间性能分析。
重点掌握顺序查找,二分查找,二叉查找树上查找以及散列表上查找的基本思想和算法实现。
第十章的目的是介绍存储在外存上的数据结构(即文件)的有关概念,各种文件的特点,组织方法及查询和更新操作,要求对这些内容做一般性的了解。
本课程内容多,难度大,要求具有较强的程序设计能力及离散数学,C语言基础,从数据结构的逻辑结构,存储结构和数据的运算三个方面去理解各种数据结构的异同之处及相互之间的关系,懂得从定义和实现两个层次去分析各种数据结构。
通过多练习多动手,培养自己的程序设计经验和素质,多做算法设计题来理解,消化和巩固所学的知识,提高分析问题,解决问题的能力以及编程能力。
设计较复杂算法的方法和步骤是:
首先明确算法要解决的问题目标,选择合适的数据结构,确定在所选的数据结构上必须有哪些操作,写出抽象的算法;然后确定存储结构,对抽象算法中每个操作逐步求精地写出最终的程序。
要求全面系统地学习各章节内容,弄懂和记住各种概念,方法,结论的内涵和外延,注意区分相仿的概念,方法,结论,掌握它们之间的联系。
一、单项选择题
1、线性表的链接实现有利于运算。
A、插入B、读表元C、查找D、定位
2、串的逻辑结构与的逻辑结构不同。
A、线性表B、栈C、队列D、树
3、设单链表中指针P指着结点A,若要删除A之后的结点(若存在),则需要修改指针的操作为。
A、P→next=P→next→nextB、P=P→next
C、P=P→next→nextD、P→next=P
4、设一数列的顺序为:
1,2,3,4,5,6,通过栈结构不可能排成的顺序数列为。
A、3,2,5,6,4,1B、1,5,4,6,2,3
C、2,4,3,5,1,6D、4,5,3,6,2,1
5、如果结点A有3个兄弟,而且B为A的双亲,则B的度为。
A、3B、4C、5D、1
6、线索化二叉树中某结点D,没有左孩子的主要条件是。
A、D→Lchild=NullB、D→ltag=1
C、D→Rchild=NullD、D→ltag=0
7、下面的序列中,是堆。
A、1,2,8,4,3,9,10,5B、1,5,10,6,7,8,9,2
C、9,8,7,6,4,8,2,1D、9,8,7,6,5,4,3,7
8、具有n个顶点的完全有向图的边数为。
A、n(n-1)/2B、n(n-1)C、2nD、(n+1)(n-1)
9、具有2000个节点的二叉树,其高度至少为。
A、9B、10C、11D、12
10、若给定的关键字集合为{20,15,14,18,21,36,40,10},一趟快速排列结束时,键值的排列为。
A、10,15,14,18,20,36,40,21
B、10,15,14,18,20,40,36,21
C、10,15,14,20,18,40,36,21
D、15,10,14,18,20,36,40,21
11、有一棵二叉树如下图,该树是。
A、二叉平衡树B、二叉排序树
C、堆的形状D、以上都不是
12、设有100个元素,用二分法查找时,最大比较次数是,最小比较次数是。
A、25B、7C、10D、1
13、在内部排序中,排序时不稳定的有。
A、插入排序B、冒泡排序
C、快速排序D、归并排序
14、对于下图V1的度为。
A、1B、2C、3D、4
15、中根遍历一棵二叉排序树所得到的结点访问序列是键值的
序列。
A、递增或递减B、递减
C、递增D、无序
16、下列哪种排序需要的附加存储开销最大。
A、快速排序B、堆排序
C、插入排序D、冒泡排序
17、在有n个叶子结点的哈夫曼树中,其结点总数为。
A、不确定B、2n
C、2n+1D、2n-1
18、若线性表最常用的操作是存取第i个元素及其前趋的值,则采用
存储方式节省时间。
A、单链表B、双链表
C、单循环链表D、顺序表
19、某二叉树的先序序列和后序序列正好相反,则该二叉树一定是
的二叉树。
A、空或只有一个结点B、高度等于其结点数
C、任一结点无左孩子D、任一结点无右孩子
20、已知数据表A中每个元素距其最终位置不远,则采用排序算法最省时间。
A、堆排序B、插入排序
C、直接选择排序D、快速排序
21、设连通图G的顶点数为n,则G的生成树的边数为。
A、nB、n-1
C、2nD、2n-1
22、有一个散列表,表长度m为100,采用除余法构造散列函数,即H(K)=K%P,(P小于等于m),为使散列函数有较好的性能,P的选择应是。
A、99B、97C、91D、93
23、对有14个元素的有序表A[1…14]作二分查找,查找元素A[4]时的被比较元素依次为。
A、A[1],A[2],A[3],A[4]B、A[1],A[14],A[7],A[4]
C、A[7],A[3],A[5],A[4]D、A[7],A[5],A[3],A[4]
24、具有65个结点的完全二叉树其深度为。
A、8B、7C、6D、5
25、若表R在排序前已按元素键值递增顺序排列,采用的比较次数少。
A、直接插入排序B、快速排序
C、归并排序D、选择排序
26、在一个具有n个结点的单链表中查找其值等于x的结点时,在查找成功的情况下,需平均比较个元素结点。
A、n/2B、n
C、(n+1)/2D、(n-1)/2
27、对一个具有n个元素的线性表,建立其有序单链表的时间复杂度为。
A、O(n)B、O
(1)
C、O(
)D、O(㏒2n)
28、在一棵度为3的树中,度为3的结点数为2个,度为2的结点数为1个,度为1的结点数为2个,那么度为0的结点数为个。
A、5B、5C、6D、7
29、已知8个元素(34,76,45,18,26,54,92,65),按照依次插入结点的方法生成一棵二叉排序树,该树的深度为。
A、4B、5C、6D、7
30、给定权的集合{15,3,14,2,6,9,16,17},所构造出的哈夫曼树的带权路径长度为。
A、129B、219C、189D、229
二、填空题
1、循环链表的主要优点是从任一结点出发可以遍历链表中的所有结点。
2、一个n×n的对称矩阵,如果以行或列为主序存入内存,则其容量为n(n+1)/2。
3、假设用向量V[0…m-1]来存储栈,m表示栈的最大容量,则入栈操作为top+=1;V[top]=x;出栈操作为x=V[top],top-=1。
4、给定表(55,63,44,38,75,80,31,56),用筛选法建立初始堆,则初始堆表为(31,38,44,56,75,80,55,63)或(80,75,55,56,63,44,31,38)。
5、具有64个结点的完全二叉树的深度为7。
6、设有一空栈,栈顶指针为1000H(十六进制),现有输入序列为1,2,3,4,5,经过push,push,pop,push,pop,push,push后,输出序列为2,3。
7、一个具有n个结点的有向完全图的弧度为n(n-1)。
8、在双向循环链表中,设指针P指向待删除的结点,则删除结点*P需执行的语句为
P→prior→next=P→next,P→next→prior=P→prior。
9、采用堆排序、快速排序、冒泡排序,对初态为有序的表,则最省时间的是冒泡排序。
10、取出广义表A=((x,y,z),(a,b,c,d))中的原子b的函数是head(tail(head(tail(A))))。
11、在有n个顶点的有向图中,每个顶点的度最大可达2(n-1)。
12、已知二叉树中叶子数为50,仅有一个孩子的结点数为30,则总结点数为129。
13、在二叉链表中判断某指针P所指结点为叶子结点的条件是(P→lchild==Null&&P→rchild==Null)。
14、直接选择排序算法在最好情况下所作的交换元素的次数为0。
15、设一棵二叉树共有50个叶结点(终端结点),则共有49个度为2的结点。
16、3个结点可构成2棵不同形状的树。
17、设有向图G的邻接矩阵为A,如果图中不存在弧〈Vi,Vj〉,则A[i][j]的值为0。
18、利用直接选择排序算法对n个记录进行排序,最坏情况下,记录交换的次数为n-1。
19、如果要将序列{50,16,23,68,94,70,73}建成堆,则需把16与50相互交换。
三、判断对错
1、对任意一个图,从它的某个顶点出发进行一次深度优先或广度优先搜索遍历可访问到该图的每个顶点。
(错)
2、已知一棵树的先序序列和后序序列,一定能构造出该树。
(对)
3、快速排序是排序算法中最快的一种。
(错)
4、具有线性序关系的集合中,若a,b是集合中的任意两个原子,则必定有a
(错)
5、二叉搜索树的左、右子树都是二叉搜索树。
(对)
6、表中的每一个元素都有一个前驱和后继元素。
(错)
7、在栈空的情况下,不能做退栈运算,否则产生下溢。
(对)
8、在索引顺序表查找方法中,对索引顺序表可以使用顺序表查找方法,也可以使用二分查找方法。
(对)
9、数据元素是数据的最小单位。
(错)
10、因为算法和程序没有区别,所以在数据结构中二者是通用的。
(错)
11、哈希表的查找效率主要取决于哈希建表时所选取的哈希函数和处理冲突方法。
(对)
12、进栈操作push(x,s)作用于链栈时,无须判满。
(对)
四、应用题.
1、假设用于通讯的电文仅有8个字母组成,字母在电文中出现的频率分别为:
7,19,2,6,32,3,21,10。
试为这8个字母设计哈夫曼编码。
解:
依题意可设这8个字母分别为:
A,B,C,D,E,F,G,H,则可得对应的哈夫曼树为:
A
B
C
D
E
F
G
H
7
19
2
6
32
3
21
10
则各字母对应的哈夫曼编码为:
A:
1010B:
00C:
10000D:
1001
E:
11F:
10001G:
01H:
1011
2、用冒泡排序法对以下数据序列进行排序,示出排序过程。
(49,38,65,98,76,13,27,49’)
解:
13,(49,38,65,98,76,27,49’)
13,27,(49,38,65,98,76,49’)
13,27,38,(49,49’,65,98,76)
13,27,38,49,(49’,65,76,98)
13,27,38,49,49’(65,76,98)
13,27,38,49,49’65(76,98)
13,27,38,49,49’65,76(98)。
3、已知一棵二叉树的中序序列和后序序列分别为BDCEAFHG和DECBHGFA,画出这棵二叉树。
解:
这棵二叉树为:
4、一项工程由P1,P2,…,P6六项子工程组成,这些工程之间有以下关系:
P1 符号“<”表示“先于”关系,例如P2 请给出工程P的三种可能的施工程序。 解: 可给出有向图表示各子工程间的关系如下图: 找出3个可能的施工顺序如下: P1,P2,P4,P3,P5,P6 或P1,P4,P2,P3,P5,P6 或P4,P5,P1,P2,P3,P6 5、应用直接插入排序算法,对键值序列49,38,69,98,76,13,27,49从小到大进行排序,试写出每趟排序的结果。 解: 初始关键值序列: 6、依次输入集合{20,13,22,5,16,3,48,24}中的键值,得到一棵二叉搜索树,请画出该二叉搜索树并求在等概率下成功查找的平均查找长度。 解: 该二叉搜索树为: 平均查找长度ASL=(1+2×2+3×3+4×2)/8=11/4。 7、设散列函数H(K)=K%11,给定键值序列为13,41,15,44,6,68,12,25,38,64。 试画出相应的散列表,并求在等概率下成功查找时的平均查找长度。 解: 13%11=215%11=46%11=612%11=1 41%11=844%11=068%11=225%11=3 38%11=564%11=9 散列表为: 在等概率情况下成功查找的平均查找长度为: ASL=1/10(1+1+1+1+1+1+1+1+1+2)=1.1 8、已知下面二叉排序树的各结点的值依次为1∽9,请标出各结点的值。 解: 9、给定有序表D={15,17,18,22,35,51,60,88,93},用二分法查找法在D中查找18,试用图示法表示查找过程。 解: 查找过程为: 10、求下列带权图的最小生成树,并给出Prim执行过程,假设u={3}。 解: 从V3顶点出发用Prim算法求该图最小生成树的过程为: 五、算法设计题 1、试写出求二叉树结点数目的算法。 解: 递归模型为: f(t)=0t=Null f(t)=1t→lchild=Null且t→rchild=Null f(t)=f(t→lchild)+(t→rchild)+1其他 函数为: intnodes(t) bitree*t { intnum1,num2; if(t==Null) return0; else if((t→lchild==Null)&&(t→rchild==Null)) return1; else{ num1=nodes(t→lchild); num2=nodes(t→rchild); return(num1+num2+1); } } 2、已知一个单链表中每个结点存放一个整数,并且其结点数不少于2,试设计算法以判断该链表中从第二项起的每个元素值是否等于其序号的平方减去其前驱的值,若满足,返回Ture,否则返回False。 解: 函数为: intjudge(head) linklist*head; { intflag,i; linklist*p,*q; q=head→next; flag=false; i=2; while(p! =Null) { if((p→data)==(i*i-q→data)) flag=ture; else returnfalse; q=p; p=p→next; i++; } if(flag==ture)returnture; } 3、设计一个算法,求出指定结点在给定的二叉排序树中所在的层次。 解: 算法为: voidlevel(t,p,h,k) bitree*t,*p; inth,k; { if(t==Null)h=0; elseif(p==t)h=k; else{ level(p,t→lchild,h,k+1); if(h==-1) level(p,t→rchild,h,k+1); } } 4、写出在中序线索二叉树中求指定结点的后继的算法。 解: 算法为: bitree*succ(p) bitree*p; { bitree*q; if(p→rtag==1) return(p→rchild); else{ q=p→rchild; while(q→ltag==0) q=q→lchild; return(q); } } 5、设计一个算法,求出指定结点在给定的二叉树中所在的层次。 解: 算法为: intlevel(t,p) bitree*t,*p; { intcount; count=0; if(t==Null) return(0); else{ count=count+1; while(t→data! =p→data) { if(t→data t=t→rchild; else t=t→lchild; count=count+1; } return(count); } 6、设一棵二叉树以二叉链表为存储结构,结点结构为 lchild data rchild 设计一个算法求此二叉树上度为1的结点个数。 解: 算法为: intcount(t,num) bitree*t; intnum; { if(t) if((t→lchild! ==Null)&&(t→rchild==Null) ‖(t→rchild! =Null)&&(t→lchild==Null)) num=num+1; count(t→lchild,num); count(t→rchild,num); return(num); } 7、n个顶点的有向图的邻接表定义如下: typedefstructnode{ intadjvex; strhctnode*next; }edgenode; typedefstruct{ vextypevextex; edgenode*link; }vexnode; vexnodeadjlist[n]; 写出计算图中出度为零的顶点个数的算法。 解: 算法为: intcount(G) adjlistG; { intk,i; k=0; for(i=1;i<=n;i++) if(G[i].next==Null) k++; return(k); } 8、有一个循环链表的长度大于1,且表中既无头结点也无指针,已知P为指向链表某结点的指针,试设计出在链表中删除P所指结点的前趋结点的算法。 解: 算法为: delete(p) linklist*p; { linklist*q; if(p→next==p) p=Null; else{ q=p; while(q→next→next! =p) q=q→next; q→next=p; free(q→next); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 讲义