判断题
数据对象的逻辑结构:反映的数据元素之间的关系
- 线性结构
- 树形结构
- 图形结构
数据对象的物理存储结构(两种):
- 关系的顺序映像与顺序存储结构
- 关系的链式影响与链式存储结构
-
若用链表来表示一个线性表,则表中元素的地址一定是连续的。(线性表包括链表和顺序表) F
-
数据的逻辑结构是指数据的各数据项之间的逻辑关系。 F
数据的逻辑结构是指数据的数据元素之间的逻辑关系;
数据元素是数据的基本单位;
数据项是组成数据元素、有独立含义的、不可分割的最小单位;
数据对象是性质相同的数据元素的集合,是数据的一个子集 -
抽象数据类型中基本操作的定义与具体实现有关. F (不涉及具体操作和存储细节)
-
结构体类型本身不占用内存空间,结构体变量占用内存空间。 T
-
单链表不是一种随机存取的存储结构。 T 他是一种顺序存储结构
-
在任何情况下,时间复杂度为O(n2) 的算法比时间复杂度为O(n*logn)的算法所花费的时间都长 F(考虑最好的与最坏的比不一定)
-
对于某些算法,随着问题规模的扩大,所花的时间不一定单调增加 T
-
所谓“循环队列”是指用单向循环链表或者循环数组表示的队列。(F) (1分)
循环队列是一个抽象的数据结构,而单向循环链表和循环数组都是具体的实现方法并不是数据结构的本身。
-
稀疏矩阵采用三元组存储和满存(存储所有元素)比较,访问某个矩阵元素所需要的时间会增加。 T
三元组存储只存储有值的元素
-
稀疏矩阵压缩存储后,必会失去随机存取功能。
要查找某个元素的时候,必须查找到其行下标和列下标才能查到元素的值 T
-
存在一棵总共有2016个结点的二叉树,其中有16个结点只有一个孩子。
设有两个孩子的为m, 没有孩子为n
m+n+16 = 2016
又叶节点的个数=度为2的结点数+1
n = m + 1 无解
选择题
-
数据的()包括集合、线性结构、树形结构和图形结构四种基本类型。 (逻辑结构)
-
数据在计算机内存中的表示是指 (数据的存储结构)
-
数据结构是一门研究非数值计算的程序设计问题中计算机的()以及它们之间的关系和运算等的学科。 (操作对象)
-
在数据结构中,与所使用的计算机无关的数据结构是()。 逻辑结构
-
在决定选取何种存储结构时,一般不考虑()。 各结点的值如何
-
从物理存储上可以把数据结构分为 顺序结构和链式结构
-
从逻辑上可以把数据结构分成( ) 线性结构和非线性结构
-
通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着( )。
A.数据在同一范围内取值
B.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致
C.每个数据元素都一样
D.数据元素所包含的数据项的个数要相等 (B)
-
在存储数据时,通常不仅要存储各数据元素的值,而且还要存储()。
A.数据的处理方法
B.数据元素的类型 对
C.数据元素之间的关系
D.数据的存储方法
-
若定义
pf
为指向float
类型变量f
的指针,下列语句中__是正确的。A.float f, *pf = f;
B.float f, *pf = &f;
C.float *pf = &f, f;
D.float f, *pf =0.0
-
-
-
带头结点的单链表
h
为空的判定条件是: h->next == NULL -
在单链表中,增加一个头结点的最终目的是为了( )。
A.使单链表至少有一个结点
B.方便运算的实现
C.标识表结点中首结点的位置
D.说明单链表是线性表的链式存储 b对
-
考虑最坏情况,x==n时, n >=y 2,所以时间复杂度为 1 2 \frac{1}{2} 21
-
-
计算机算法指的是()。
A.计算方法
B.排序方法
C.解决问题的有限运算序列
D.调度方法 c对
-
计算机算法必须具备输入、输出和()等五个特性。
A.可行性、可移植性和可扩充性
B.可行性、确定性和有穷性
C.确定性、有穷性和稳定性
D.易读性、稳定性和安全性 b对
-
-
将两个结点数都为N且都从小到大有序的单向链表合并成一个从小到大有序的单向链表,那么可能的最少比较次数是:
A.1
B.N
C.2N
D.Nlog**N* b
-
将长度为n的单链表连接在长度为m的单链表之后的算法的时间复杂度为( )。
A.O(1)
B.O(m)
C.O(n)
D.O(n+m) b
-
可以用带表头附加结点的链表表示线性表,也可以用不带头结点的链表表示线性表,前者最主要的好处是()。
A.可以加快对表的遍历
B.使空表和非空表的处理统一
C.节省存储空间
D.可以提高存取表元素的速度 b
-
若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。则采用哪种存储方式最节省运算时间?
A.单链表
B.双链表
C.单循环链表
D.带头结点的双循环链表 d
-
某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用什么存储方式最节省运算时间?
A.单链表
B.仅有尾指针的单循环链表
C.有头指针的单循环链表
D.双链表 b
-
如果对线性表的运算只有4种,即删除第一个元素,删除最后一个元素,在第一个元素前面插入新元素,在最后一个元素的后面插入新元素,则最好使用()。
A.只有表尾指针没有表头指针的循环单链表
B.只有表尾指针没有表头指针的非循环双链表
C.只有表头指针没有表尾指针的循环双链表
D.既有表头指针也有表尾指针的循环单链表 c
-
如果对线性表的运算只有2种,即删除第一个元素,在最后一个元素的后面插入新元素,则最好使用()。
A.只有表头指针没有表尾指针的循环单链表
B.只有表尾指针没有表头指针的循环单链表
C.非循环双链表
D.循环双链表 b
-
带表头附加结点的双向循环链表为空的判断条件是头指针L满足条件()。
A.L= =NULL
B.L->right= =NULL
C.L->left = =NULL
D.L->right= =L d
-
循环链表的主要优点是()。
A.不再需要头指针了
B.已知某个结点的位置后,能够很容易找到它的直接前驱
C.在进行插入、删除运算时,能更好的保证链表不断开
D.从表中的任意结点出发都能扫描到整个链表 不选b!!选d
-
采用多项式的非零项链式存储表示法,如果两个多项式的非零项分别为N1和N2个,最高项指数分别为M1和M2,则实现两个多项式相乘的时间复杂度是:
A.O(N1×N2)
B.O*(M1×M2)
C.O*(N1+N2)
D.O*(M1+M2) a
-
若一个栈的输入序列为1,2,3,…,N,输出序列的第一个元素是 i,则第 j 个输出元素是 j−i−1。
不确定,所以这句话是错的
-
若一个栈的入栈序列为1、2、3、…、N,其输出序列为p1、p2、p3、…、p**N。若p1=N,则 p i p_i pi为:
A.i
B.n−i
C.n−i+1
D.不确定
只有在确定第一个出栈的是最后一个入栈的,才能确定后面的输出顺序
栈是一种先进后出的数据结构,也就是说如果入栈顺序为 123,那么出栈顺序则为 321。题目中栈的输入序列为 1,2,3,…,n,该序列是等差为 1 的递增序列,那么出栈顺序应该为 n,n-1…,3,2,1,也就是等差为 1 的递减序列。那么当输出序列的第一个元素为i时,利用等差数列公式 an = a1+(n-1)d 可知,第 j 个元素应为 aj = i+(j-1)(-1) = i-j+1。
-
给定一个堆栈的入栈序列为{ 1, 2, ⋯, n },出栈序列为{ p1, p2, ⋯, p**n }。如果p2=n,则存在多少种不同的出栈序列?
A.1
B.2
C.n−1
D.n
第二个出栈的是n(最后一个入栈的),说明后面的都确定了,唯一不确定就是第一个了,可能是1~n-1中任一个
-
链式存储的栈顶指针是指向最后一个有值的,还是最后一个有值的下一个
-
将5个字母
ooops
按此顺序入栈,则有多少种不同的出栈顺序可以仍然得到ooops
?A.1
B.3
C.5
D.6 枚举下试试c
-
已知程序如下:
int s(int n) { return (n<=0) ? 0 : s(n-1) +n; }
void main() { cout<< s(1); }
程序运行时使用栈来保存调用过程的信息,自栈底到栈顶保存的信息一次对应的是() 。A.main()->S(1)->S(0)
B.S(0)->S(1)->main()
C.main()->S(0)->S(1)
D.S(1)->S(0)->main() a
-
递归过程或函数调用时,处理参数及返回地址,要用一种称为( )的数据结构。
A.队列
B.多维数组
C.栈
D.线性表 c
-
下列关于栈的叙述中,错误的是:
- 采用非递归方式重写递归程序时必须使用栈
- 函数调用时,系统要用栈保存必要的信息
- 只要确定了入栈次序,即可确定出栈次序
- 栈是一种受限的线性表,允许在其两端进行操作
A.仅 1
B.仅 1、2、3
C.仅 1、3、4
D.仅 2、3、4
第一个反例:比如斐波那契数列 可以用循环搞定,约瑟夫也可以用循环
-
分治法的设计思想是将一个难以直接解决的大问题分割成规模较小的子问题,分别解决问题,最后将子问题的解组合起来形成原问题的解,这要求原问题和子问题____。
A.问题规模相同,问题性质相同
B.问题规模相同,问题性质不同
C.问题规模不同,问题性质相同
D.问题规模不同,问题性质不同 c
-
若用大小为6的数组来实现循环队列,且当前
front
和rear
的值分别为0和4。当从队列中删除两个元素,再加入两个元素后,front
和rear
的值分别为多少?A.2和0
B.2和2
C.2和4
D.2和6
这个画个图,大小为6的数组默认了第0个到第六个的值为0 1 2 3 4 5 自己画画图就明白了 a对
-
如果循环队列用大小为
m
的数组表示,且用队头指针front
和队列元素个数size
代替一般循环队列中的front
和rear
指针来表示队列的范围,那么这样的循环队列可以容纳的元素个数最多为:A.m-1
B.m
C.m+1
D.不能确定
可以转圈 b
-
如果循环队列用大小为
m
的数组表示,队头位置为front
、队列元素个数为size
,那么队尾元素位置rear
为:A.front+size
B.front+size-1
C.(front+size)%m
D.(front+size-1)%m
队列的rear指向当前元素 -
存的是上三角,但由于是对称的,上三角和下三角一样,aij = aji, 又是从下标1开始存储的,所以不用-1
-
求5,8的起始地址,就是求4, 8的终止地址
-
时间片轮转调度算法是为了()。
A.多个终端能够得到系统及时响应
B.需要CPU时间最少的进程最先做
C.使系统变得高效
D.优先级较高的进程得到及时响应 a
-
采用时间片轮转调度算法分配CPU时,当处于运行状态的进程用完一个时间片后,他的状态是( )状态。
A.消亡
B.就绪
C.运行
D.阻塞 b
-
下列进程调度算法中,综合考虑进程等待时间和执行时间的是__________。(2009全国试题)
A.时间片轮转调度算法
B.短进程优先调度算法
C.先来先服务调度算法
D.高响应比优先调度算法
时间片轮转调度算法将CPU时间划分成固定大小的时间片,轮流为就绪队列中的进程服务;
短进程优先调度算法优先选择执行时间短的进程;
先来先服务调度算法按照进程到达就绪队列的顺序进行调度;
高响应比优先调度算法综合考虑进程等待时间和执行时间,优先选择响应比高的进程。
-
叶结点个数等于度为2的结点个数加1(二叉树的性质)
叶子节点数=非叶子结点数+1 完全二叉树度为1的节点只能有0个或1个
画图
若是最大,那就是满k叉树
若是最小
一共h层, 则前h-1有k(h-1)再加1
-
如果一棵非空k(k≥2)叉树T中每个非叶子结点都有k个孩子,则称T为正则k叉树。若T有m个非叶子结点,则T中的叶子结点个数为:
A.mk
B.m*(*k−1)
C.m*(*k−1)+1
D.m(k−1)−1
所有节点 = 非叶子结点+叶子结点
树的边数=总度数 = 全部节点数-1= 全部节点度数之和(以上两条是k叉树满足的)
有m个非叶子,且每个非叶子结点都有k个孩子,树的边数为mk
全部节点 = mk + 1
则叶子结点个数 mk + 1 - m
-
有一个四叉树,度2的结点数为2,度3的结点数为3,度4的结点数为4。问该树的叶结点个数是多少?
A.10
B.12
C.20
D.21
设度为1的节点有x, 度为0(即叶子)的节点有y个
根据度数=节点数-1可得
4+9+16+x=9+x+y-1 y = 21
-
若森林F有15条边、25个结点,则F包含树的个数是:
A.8
B.9
C.10
D.11
节点数-边数就是树的个数
同47题
关于图的相关概念
转载https://www.cnblogs.com/qianchanglai/p/15486692.html
完全图:不同节点之间都有一条边
第七条第八条不用计,直接推就行
强连通分量:有向非强连通图的极大强连通子图,强连通有双向路径只得是不一定直接相连,但两两可达
51. 无向连通图至少有一个顶点的度为1。n F
都是联通的,肯定至少度为2
- 用邻接矩阵法存储图,占用的存储空间数只与图中结点个数有关,而与边数无关。 T
- 在一个有向图中,所有顶点的入度与出度之和等于所有边之和的2倍,入度之和等于所有顶点的出度之和。
一个边相当于有两个端点,一个入度,一个出度t
- 无向连通图所有顶点的度之和为偶数 t
- 无向连通图边数一定大于顶点个数减1。f
大于等于!
- 若无向图G =(V,E)中含10个顶点,要保证图G在任何情况下都是连通的,则需要的边数最少是:
根据上面的结论,(n-1)(n-2)/2+1就可求,注意是任何情况!!
主要看两两是否可达,把图画出来,
注意一个数也算是连通分量!!
- 如果G是一个有36条边的非连通无向图,那么该图顶点个数最少为多少?
无向完全图的边数为:N*(N-1)/2,考虑最极端的情况
当N为9时:9×8/2=36,即若有9个顶点,36条边,组成无向完全图,必是连通图。
此时再加一个不联通的顶点,N为10,即为非连通图
根据上面图表可知,无向图边数的取值是0~n(n-1)/2
- 若无向图G =(V,E)中含7个顶点,要保证图G在任何情况下都是连通的,则需要的边数最少是:
注意是任何情况!!
可以看到,同样是给出 7 点 6 边,第二种情况并不能连通,也就不符合题目中“任何情况”的要求。
由此我们可以分析到,要让 7 个点都连通,那么先让 6 个点完全连通,所谓完全就是每个点能够支出的边是满的,这样 6 个点的情况下,边和点的关系是满的。其边的数量由公式 n*(n-1)/2 得出(无向完全连通图),也就是 6*5/2=15;
那么此时,我多了一个点,7 号点,只需要在那 6 个点的图中连一根边过来,7 号点就可以访问任意 6 点图中的点了。
- 在N个顶点的无向图中,所有顶点的度之和不会超过顶点数的多少倍?
这个题绕了个弯,完全无向图的边为N*(N−1)/2,度数为N*(N−1),所以为N-1倍。可以举例子如3个顶点6个度,4个顶点最多12个度,因此不会超过顶点的n-1倍,顶点有n个,所以是n-1倍
- 对于一个具有N个顶点的无向图,要连通所有顶点至少需要多少条边 n-1
- 具有N(N>0)个顶点的无向图至多有多少个连通分量? n,每一个都是连通分量
- 一个有N个顶点
- 的强连通图至少有多少条边? n
- 对于有向图,其邻接矩阵表示比邻接表表示更易于:
A.求一个顶点的入度
B.求一个顶点的出边邻接点
C.进行图的深度优先遍历
D.进行图的广度优先遍历 a - 对于一个具有N个顶点的无向图,若采用邻接矩阵表示,则该矩阵的大小是:n方
- 图的广度优先搜索遍历类似于二叉树的 层序遍历
- 图的广度优先遍历需要借助的数据结构是 队列
- 如果从无向图的任一顶点出发进行一次深度优先搜索可访问所有顶点,则该图一定是:连通图
a为啥
怎么做- 图的深度优先遍历类似于二叉树的:先序遍历
这种直接根据krustkal,把边的权值由小到大排序,然后依次把节点放进去- 拓扑序一定是唯一的。 有多个入度为1的点那可以随便放(拓扑序就是按照度数从小到大排的)
每个顶点只出现一次。
对于图中的任何一条边,起点必须在终点之前。
78. 在一个有权无向图中,若b到a的最短路径距离是12,且c到b之间存在一条权为2的边,则c到a的最短路径距离一定不小于10。t
c在ab中间
- 在用Floyd 算法求解各顶点的最短路径时,每个表示两点间路径的path(k-1)[I,J]一定是path(k )[I,J]的子集(k=1,2,3,…,n)。f
- P 是顶点 S 到 T 的最短路径,如果该图中的所有路径的权值都加 1,P 仍然是 S 到 T 的最短路径。 f
举一个例子,a到b为1,b到c为1,a直接到c为3,目前最短是经过b,如果每条路径都加4,a到b为5,b到c为5,a直接到c为8,那现在最短是直接到c
- 对于带权无向图 G = (V, E),M 是 G 的最小生成树,则 M 中任意两点 V1 到 V2 的路径一定是它们之间的最短路径。f
最小生成树指的相邻两点间的最小,最短路径指的图中任意两点,概念都不一样,自然不一样,不要搞混!!
- 若要求在找到从S到其他顶点最短路的同时,还给出不同的最短路的条数,我们可以将Dijkstra算法略作修改,增加一个count[]数组:count[V]记录S到顶点V的最短路径有多少条。则count[V]应该被初始化为:
该被初始化为:count[S]=1; 对于其他顶点V则令count[V]=0,因为count[s]指的从s到s肯定有一条,所以要置为1
- 折半查找与二分查找树的时间性能在最坏的情况下是相同的。 f
- 用向量和单链表表示的有序表均可使用折半查找方法来提高查找速度。 f
必须得是随机存储的结构,因为折半查找是用下标访问的
- 二叉排序树是用来进行排序的。
二叉排序树又叫做二叉搜索树,不要望名生义
- 在二叉排序树中,每个结点的关键字都比左孩子关键字大,比右孩子关键字小。 t
- 任何二叉搜索树中同一层的结点从左到右是有序的(从大到小) f
从小到大组
- 已知一个长度为16的顺序表L,其元素按关键字有序排列。若采用二分查找法查找一个L中不存在的元素,则关键字的比较次数最多是
找不到了还得再比较依次,16 8 4 2 1 五次
88.用二分查找从100个有序整数中查找某数,最坏情况下需要比较的次数是:
2的7次方为128>7
越往后+3重复的越多,所以在接近开头处比较次数越好
在建树的时候,一定是从左孩子节点开始的,得有左节点才能有右节点,故a
整理到作业18 2-4选择,电脑没电了,明天继续!
由89题可知,一定有左孩子,不一定有右孩子,所以最大值可能在n-1层,看89题图- 对二叉搜索树进行什么遍历可以得到从小到大的排序序列? 中序遍历
- 二叉搜索树平均查找效率 logN
- 将M个元素存入用长度为S的数组表示的散列表,则该表的装填因子为M/S。 t
- 在散列中,函数“插入”和“查找”具有同样的时间复杂度。 t
- Hash表的平均查找长度与处理冲突的方法无关。 负载因子 (装填因子)是散列表的一个重要参数,它反映散列表的装满程度。
hash的平均查找长度与
- 若装填因子α为1,则向散列表中散列元素时一定会产生冲突。t
装填因子指的当前散列表中元素的数量与散列表的大小,如果装填因子为1说明散列表已经满了,再进行散列一定会产生冲突
- B-树中所有结点的平衡因子都为零。 t
- 在9阶B-树中,除叶子以外的任意结点的分支数介于5和9之间。
计算ceil(9/2)~9 因为他说的是分支数量!!关键字能存储的数量是ceil(9/2) ~ 9-1
- 有 12 个叶结点的 2-3 树最多可以有 10 个非叶结点。 f
进行分组打包,2-3树每个节点最多存储2个data,但是最多会有三个孩子,把叶子节点进行3个3个打包,一共有四个包,这一层再进行打包成两个
- A 2-3 tree with 3 nonleaf nodes must have 18 keys at most. t
2-3树指的是每个节点的指针个数是2~3之间
一个叶子节点最多放2个值,然后是两个节点指向3个叶子,然后是一个根指向两个节点。那么一共有2*3个叶子,一个叶子存放3个key,一共18个.注意key只算叶子上的
b树没变高,在4后面插入了9,所以3也错了
102.
103. m阶B-树是一棵m叉平衡排序树 t
104. 下列关于m阶B-树的说法错误的是( )。
A.根结点至多有m棵子树
B.所有叶子都在同一层次上
C.非叶结点至少有m/2 (m为偶数)或m/2+1(m为奇数)棵子树
D.根结点中的数据是有序的
c错, c应该再加上根节点除外,根节点关键字数量最少为1,最多为m-1
画个图, 注意是四个关键字而不是四个节点!!!,3阶每个节点关键字(1,2),所以最多有3个分叉,第二层分为1 1 2三个节点,则第三层有 2+2+3个节点,故一共有1+3+7 = 11
3阶B树指的是每个节点最多有三个孩子
106对于d选项,如果是90, 110,他聊之间只有100,而五阶树最少有2个节点,不符合定义
105.
106. 平均查找长度与结点个数无关的查找方法是:哈希表, 装填因子为(m个元素/数组的长度),哈希表的平均查找长度是哈希表的装填因子
107.
108.
111.
112.
同义词即他们具有相同的地址,1+2+3+…+n
探测是无论有没有冲突都要试试,类似于进行比较
关于平方探测,比如我当前是0,0-1=-1%10=9 这种,可以把他看成一个循环
补充关于满二叉树,完全二叉树,二叉排序树,平衡二叉树(又叫做avl树)的区别
https://blog.youkuaiyun.com/hong10086/article/details/88430294平衡二叉树又叫avl树
- 对一棵平衡二叉树,所有非叶结点的平衡因子都是0,当且仅当该树是完全二叉树
完全二叉树他的平衡因子可能是1,满二叉树他的平衡因子一定是0
- 任何AVL树的中序遍历结果是有序的(从小到大)。 t
- 如果由结点{ 1, 2, 3, 4 }组成的AVL树的深度是3(根结点的深度是1),则结点2或者结点3一定有两个子结点。
这个由于插入顺序不固定,因为根节点深度是1,可以直接先插入2,3把他俩当根节点看待
- 比较次数
最坏情况是递增的,要排成递减,直接插入排序是找哨兵元素,从做到右,第一个元素不用移动,从第二个开始,第二个与第一个比较失败,1,第三个与前两个比较两次以此类推1+2+3…第十个比较九次+9 = 45,问的是可能情况,如果中间有两个数相等,考虑到排序的稳定性,他是不会移动的
- 二分
这个是看比较次数,而不是时间复杂度**,比较次数即为二分查找的次数**
- 快速排序
- 归并趟数与归并时间复杂度
归并趟数数量级是O(logN),时间复杂度是O(nlogn)
- 外排序中,给定 1000 个段和 8 条磁带。如果使用简单的 k 路归并,则最少要执行 5 趟(段的生成不算在内)。 t
log8 1000 以8为底,得出4,最后再进行归并+1为5
- 基数排序
如果数一样,排在原来次序的前面的排序后也在前面
- 基数排序
- 归并排序的k
- 在堆排序中,若要进行升序排序,则需要建立大根堆。 t
升序排序–>大根堆,因为每次都是取的叶子, 堆是完全二叉树
- 在初始数据表已经有序时,快速排序算法的时间复杂度为O(nlogn ) f
快速排序在数据有序(无论递增还是递减)复杂度都是最坏的情况O(N2)
- 快速排序的趟数
快速排序如第一趟确定的值是首尾元素,则第二趟只能确定一个数;如第一趟确定的是中间元素,则第二趟会确定两个元素,在递归实现中表示为,左右分别要递归一次,得出两个值
先找出有序的顺序,每次排序至少确定一个元素的位置,第一次如果确定的那个元素在中间,则左侧右侧会分别再
-
堆遍历出来的是按层序的
-
构建大顶堆
先写出原始的普通完全二叉树,再采用上移或下移操作
-
递归
-
记住
c快速排序找的是哨兵元素大于等于的,如果都相等的话相当于l指针移动一步,r指针移动一步(一人移动一步,就相当于在中间划分了),就相当于折半排序了,选c
-
记住
-
替换选择法是外排序中用于生成更长有序段的方法。 t
-
字节的换算
1mb等于1024*1024 -
4asas类似于哈夫曼树
-
替换选择排序
-
败者树
胜者是关键字小的归并段
-
最佳归并树(即用哈夫曼树的原理)
b
-
置换选择排序的复杂度
-
c
-
败者树
-
败者树的更新
就是向上过滤的操作a -
c -
KMP算法的特点是在模式匹配时指示主串的指针不会变小回溯。 t
-
kmp算法,ij下标都是从1开始的,next也要从1开始,可以先把前缀表求出来,然后后移一位,最后一个的前缀表不要了,所有的再加一
这个next下标是从0开始的,如果想从1开始,加一即可
-
某二叉树的后序和中序遍历序列正好一样,则该二叉树中的任何结点一定都无右孩子。 t
-
若A和B都是一棵二叉树的叶子结点,则存在这样的二叉树,其前序遍历序列为…A…B…,而中序遍历序列为…B…A…
f,前序遍历,a比b更左 -
若一个结点是某二叉树的中序遍历序列的最后一个结点,则它必是该树的前序遍历序列中的最后一个结点。f
中序左中右,前序左右中 -
某二叉树的前序和中序遍历序列正好一样,则该二叉树中的任何结点一定都无左孩子。 t
-
已知一棵二叉树的先序遍历结果是ABC, 则CAB不可能是中序遍历结果。
这三个点在一条直线上,就不是二叉树了 -
堆是满二叉树。 f
-
堆的定义:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树
-
有一大根堆,堆中任意结点的关键字均大于它的左右孩子关键字,则其具有最小值的结点一定是一个叶子结点并可能在堆的最后两层中。 t
和二叉排序树不一样!
-
与二叉搜索树结合
-
前中后序
都是左边的叶子先发生改变
-
带入选项做
- 中序遍历mn的条件
- 线索树
有孩子就指向孩子,没有孩子就指向遍历顺序(前中后序)的上一个 选b
- 顺序存储的优点
- 判断节点的度数
对于二叉树节点的度,只看下面连接的孩子有几个,不看父亲指向的他
- 二叉树的节点数
- 该复习期中题了
答案是4,画画图,后跟序是树的中序
3,4是对的
稳定性和特点总结:
稳定排序:冒泡、插入、归并、桶/基数排序。
适合小规模数据:冒泡、选择、插入。
高效排序(大规模):快速、归并、堆排序。
应该是cdfea
kruskal算法是找最短的边,一个一个找,不论与现在的顶点是否相连
prim算法是一个顶点一个顶点排着找
举个例子找规律,叶子结点为n,则非叶子结点为n-1,总共2n-1 = 115
且哈夫曼树中只存在度为2和度为1的节点个数
在AOE网络中,从源点到汇点具有最大长度的路径称为关键路径。完成AOE所表示的整个工程所需要的时间取决于关键路径的路径长度 t
f
==作业17整理了没保存,考试的时候重新看吧呜呜=