数据结构 错题集

线性表/链表

  • 将两个结点数都为N且都从小到大有序的单向链表合并成一个从小到大有序的单向链表,那么可能的最少比较次数是:N
  • 将线性表La和Lb头尾连接,要求时间复杂度为O(1),且占用辅助空间尽量小。应该使用哪种结构?(带尾指针的单循环链表)
  • 若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。则采用哪种存储方式最节省运算时间?(带头结点的双循环链表)
  • 某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用什么存储方式最节省运算时间?(仅有尾指针的单循环链表)
  • 将长度分别为m, n的两个单链表合并为一个单链表的时间复杂度为O(m+n)。【错误】

如果循环队列用大小为m的数组表示,且用队头指针front和队列元素个数size代替一般循环队列中的front和rear指针来表示队列的范围,那么这样的循环队
列可以容纳的元素个数最多为:(D)
A.m+1
B.m-1
C.不能确定
D.m

【解析】
Front+size 可以容纳m个元素

前缀中缀后缀

中缀–》前缀
右边开始,优先级大于等于
中缀–》后缀
左边开始,优先级大于
后缀表达式:35,15,+80,70,- ,x,20,/
中缀表达式:(((35+15)(80-70))/20)=25
前缀表达式:/,
,+,35,15,-,80,70,20

image

image
image
两个栈共享一个空间的好处:
节省储存时间,降低上溢发生的几率(上溢:两个栈的栈顶在栈空间的某一位相遇)

栈顶指针指向栈顶元素:
栈空:top=-1
栈满:top=maxsize-1

所谓“循环队列”是指用单向循环链表或者循环数组表示的队列。【错误】

循环队列是一个抽象的数据结构,而单向循环链表或循环数组是具体的实现方式,不是数据结构本身。

在用数组表示的循环队列中, front值一定小于等于rear值。【错误】
函数调用时,系统要用栈保存必要的信息【正确】

image
image
image
循环队列中:

队尾指针队首指针判满条件判空条件
队尾元素的后一个位置队首元素(Rear+1)%n=frontFront=rear
队尾元素队首元素的前一个位置(Rear+1)%n=frontFront=rear

image

弹出队首:HS=HS->next

image

二叉树

image

叶子结点的个数=两个节点的结点个数+1
N0=N2+1
分支数=节点数+1
分支数=N*Ni

image
image
image
image
image
image
image

由若干个二又树组成的森林F中.叶结点总个数为N,度为2的结点总个数为M,则该集合中二段树的个数为
A.M-N
B.N-M
C.N-M-1
D.无法确定

【解析】
设二叉树的数目为TreeNum
一棵树 n0=n2+1
森林N=M+TreeNum

若森林F有15条边、25个结点,则F包含树的个数是(C)
A.8 B.9 C.10 D.11

含n个结点的3次树的最小高度是( D),最大高度是( D)。
A. $ \log _ {3} $ (2n-1),n-2
B. $ \log _ {3} $ (2n+1),n-1
C $ \log _ {3} $ (2n-1),n-1
D. $ \log _ {3} $ (2n+1),n-2

image
image
image
image
image
image
image
如果二叉树的前序遍历结果是12345,后序遍历结果是24531,那么该二叉树的中序遍历结果是什么?(C)
A.23145
B.3215
C.21435
D.无法确定
image

哈夫曼树

对N( $ \geqslant $ 2) 个权值均不相同的字符构造哈夫曼树, 则树中任一非叶结点的权值一定不小于下一层任一结点的权值。
哈夫品编码是一种品优的前纲码,对一个给定的字符集及其字符频率 其哈夫品编码不一定是唯一的 但是每个字符的哈夫码的长度一定是唯一的
【错误】

平衡二叉树

对一棵平衡二叉树, 所有非叶结点的平衡因子都是0,当且仅当该树是完全二叉树。
【错】 完美二叉树

Av树的节点与高度关系:
f(n)为高度为n的平衡二叉树最少含有的节点数,则:
f(1) = 1;f(2) = 2; f(3) = 4;f(4) = 7;……f(n) = f(n-1) + f(n-2) +1,(n>=3)。

Kruskal 算法是维护一个森林,每一步把两棵树合并成一棵。
Prim 算法是通过每步添加一条边及其相连的顶点到一棵树,从而逐步生成最小生成树。
对于带权无向图 G = (V, E),M 是 G 的最小生成树,则 M 中任意两点 V1 到 V2 的路径一定是它们之间的最短路径。
错:是总路径最短

任何一个带权无向连通图的最小生成树有可能不唯一
任何一个无向连通图的最小生成树有一棵或多棵

若一个无向连通图没有权值相同的边,则该无向图的最小生成树唯一。
若一个无向图的最小生成树唯一,则该无向图中没有权值相同的边。错。

对某个带权连通图构造最小生成树, 以下说法中正确的是(A) 。
A.该图的所有最小生成树的总代价一定是唯一的
B.该图的最小生成树是唯一的
C.用Prim算法从不同顶点开始构造的所有最小生成树一定相同
D.使用Prim和Kruskal算法得到的最小生成树总不相同

在一个有权无向图中,若b到a的最短路径距离是12,且c到b之间存在一条权为2的边,则c到a的最短路径距离一定不小于10。

P 是顶点 S 到 T 的最短路径,如果该图中的所有路径的权值都加 1,P 仍然是 S 到 T 的最短路径。
错误。
假如说最短路径上一共有10条边,而另一条路径虽然比最短路径长,但它只有一条边,如果全加1,就会导致边少的路径成为新的最短路径。

若要求在找到从S到其他顶点最短路的同时,还给出不同的最短路的条数,我们可以将Dijkstra算法略作修改,增加一个count[]数组:count[V]记录S到顶点V的最短路径有多少条。则count[V]应该被初始化为:count[S]=1; 对于其他顶点V则令count[V]=0

对含有n个顶点、e条边的带权图求最短路径的Dijkstra算法的时间复杂度为O(n^2)

Dilkstra算法是(B)方法求出图中从某顶点到其余顶点的最短路径的。
A.按长度递减的顺序求出图中某顶点到其余顶点的最短路径
B.按长度递增的顺序求出图中某顶点到其余顶点的最短路径
C.通过深度优先遍历求出图中某顶点到其余顶点的最短路径
D.通过广度优先遍历求出图中某顶点到其余顶点的最短路径

以下叙述正确的是(A) 。
A.最短路径一定是简单路径
B.Dilkstra算法不适合有回路的带权图求最短路径
C.Dikstra算法不适合求任意两个顶点的最短路径
D.Floyd算法求两个顶点的最短路径时, pathk-1一定是pathk的子集

若图G有环,则G不存在拓扑排序序列。

若图G为连通图且不存在拓扑排序序列,则图G必有环。

拓扑序一定是唯一的。(错)

若将n个顶点e条弧的有向图采用邻接表存储,则拓扑排序算法的时间复杂度是:n+e

判定一个有向图是否存在回路除了可以利用拓扑排序方法外,还可以利用(深度优先遍历算法)。

在TopSort函数中,如果外循环还没结束,就已经找不到“未输出的入度为0的顶点”,则说明图中必定存在回路

若一个有向图中的顶点不能排成一个拓扑序列,则可断定该有向图(含有顶点数目大于1的强连通分量)

若用邻接矩阵存储有向图,矩阵中主对角线以下的元素均为零,则关于该图拓扑序列的结论是(存在,可能不唯一)。

关键路径

定义:从第一个事件到最后一个事件的最长路径

下面不正确的说法是(1).
(1)在AOE-网工程中,减少任一关键活动上的权值后,整个工期也就相应的减小
(2) AOE-网工程工期为关键活动上的权之和
(3) 在关键路径上的活动都是关键活动, 而关键活动也必在关键路径上。

以下对于AOE网的叙述中,错误的是©。
A.在AOE网中可能存在多条关键路径
B.关键活动不按期完成就会影响整个工程的完成时间
C.任何一个关键活动提前完成,整个工程也将提前完成
D.所有关键活动都提前完成,整个工程也将提前完成

最早开始时间:等于当前边起始结点的最早发生时间。
最晚开始时间:等于当前边指向结点的最迟发生时间-当前边的权值。
最早完工时间:等于当前边指向结点的最早发生时间。
最晚完工时间:等于当前边指向结点的最迟发生时间。

若使用AOE网估算工程进度,则下列叙述中正确的是:(B)
A.关键路径是从源点到汇点边数最多的一条路径
B.关键路径是从源点到汇点路径长度最长的路径
C.增加任一关键活动的时间不会延长工程的工期
D.缩短任一关键活动的时间将会缩短工程的工期

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值