设主串的长度为n,模式串的长度为m,则串匹配的KMP算法时间复杂度是( )。 (2分)
- O(m)
- O(n)
- O(n + m)
- O(n×m)
串 ‘ababaaababaa’ 的next数组为: (2分)
- 012345678999
- 012121111212
- 011234223456
- 0123012322345
字符串‘ababaabab’ 的nextval 为: (3分)
- (0,1,0,1,04,1,0,1)
- (0,1,0,1,0,2,1,0,1)
- (0,1,0,1,0,0,0,1,1)
- (0,1,0,1,0,1,0,1,1 )
答案:1.
对一组包含10个元素的非递减有序序列,采用直接插入排序排成非递增序列,其可能的比较次数和移动次数分别是: (2分)
- 100, 100
- 100, 54
- 54, 63
- 45, 44
答案:4.
设有1000个元素的有序序列,如果用二分插入排序再插入一个元素,则最大比较次数是:(2分)
- 1000
- 999
- 500
- 10
答案:4.
对于序列{ 49,38,65,97,76,13,27,50 },按由小到大进行排序,下面哪一个是初始步长为4的希尔排序法第一趟的结果? (2分)
- 13,27,38,49,50,65,76,97
- 49,13,27,50,76,38,65,97
- 49,76,65,13,27,50,97,38
- 97,76,65,50,49,38,27,13
答案:2.
给定初始待排序列{ 15,9,7,8,20,-1,4 }。如果希尔排序第一趟结束后得到序列为{ 15,-1,4,8,20,9,7 },则该趟增量为: (2分)
- 1
- 2
- 3
- 4
答案:4.
已知一个长度为16的顺序表L,其元素按关键字有序排列。若采用二分查找法查找一个L中不存在的元素,则关键字的比较次数最多是: (2分)
- 4
- 5
- 6
- 7
答案:2.
用二分查找从100个有序整数中查找某数,最坏情况下需要比较的次数是:(2分)
- 7
- 10
- 50
- 99
答案:1.
在有n(n>1000)个元素的升序数组A
中查找关键字x。查找算法的伪代码如下所示:
k = 0;
while ( k<n 且 A[k]<x ) k = k+3;
if ( k<n 且 A[k]==x ) 查找成功;
else if ( k-1<n 且 A[k-1]==x ) 查找成功;
else if ( k-2<n 且 A[k-2]==x ) 查找成功;
else 查找失败;
本算法与二分查找(折半查找)算法相比,有可能具有更少比较次数的情形是:(2分)
- 当x不在数组中
- 当x接近数组开头处
- 当x接近数组结尾处
- 当x位于数组中间位置
答案:2.
下列二叉树中,可能成为折半查找判定树(不含外部结点)的是: (4分)
答案:1.
若二叉搜索树是有N个结点的完全二叉树,则不正确的说法是:(1分)
- 所有结点的平均查找效率是O(logN)
- 最小值一定在叶结点上
- 最大值一定在叶结点上
- 中位值结点在根结点或根的左子树上
答案:3.
若一棵二叉树的后序遍历序列是{ 1, 3, 2, 6, 5, 7, 4 },中序遍历序列是{ 1, 2, 3, 4, 5, 6, 7 },则下列哪句是错的?(3分)
- 这是一棵完全二叉树
- 2是1和3的父结点
- 这是一棵二叉搜索树
- 7是5的父结点
答案:1.
将{ 32, 2, 15, 65, 28, 10 }依次插入初始为空的二叉搜索树。则该树的前序遍历结果是:(3分)
- 2, 10, 15, 28, 32, 65
- 32, 2, 10, 15, 28, 65
- 10, 28, 15, 2, 65, 32
- 32, 2, 15, 10, 28, 65
答案:4.
若一棵二叉树的前序遍历序列是{ 4, 2, 1, 3, 6, 5, 7 },中序遍历序列是{ 1, 2, 3, 4, 5, 6, 7 },则下列哪句是错的?(3分)
- 这是一棵完全二叉树
- 所有的奇数都在叶子结点上
- 这是一棵二叉搜索树
- 2是5的父结点
答案:4.
{ 5, 11, 13, 1, 3, 6 }依次插入初始为空的二叉搜索树。则该树的后序遍历结果是:(3分)
- 3, 1, 5, 6, 13, 11
- 3, 1, 6, 13, 11, 5
- 1, 3, 11, 6, 13, 5
- 1, 3, 5, 6, 13, 11
对二叉搜索树进行什么遍历可以得到从小到大的排序序列? (1分)
- 前序遍历
- 后序遍历
- 中序遍历
- 层次遍历
答案:3.
若二叉搜索树是有N个结点的完全二叉树,则不正确的说法是:(1分)
- 平均查找效率是O(logN)
- 最大值一定在最后一层
- 最小值一定在叶结点上
- 中位值结点在根结点或根的左子树上
已知8个数据元素为(34,76,45,18,26,54,92,65),按照依次插入结点的方法生成一棵二叉搜索树后,最后两层上的结点总数为: (2分)
- 1
- 2
- 3
- 4
答案:2.
下列叙述正确的是()。 (2分)
- 在任意一棵非空二叉搜索树,删除某结点后又将其插入,则所得二叉搜索树与删除前原二叉搜索树相同。
- 二叉树中除叶结点外, 任一结点X,其左子树根结点的值小于该结点(X)的值;其右子树根结点的值≥该结点(X)的值,则此二叉树一定是二叉搜索树。
- 虽然给出关键字序列的顺序不一样,但依次生成的二叉搜索树却是一样的。
- 在二叉搜索树中插入一个新结点,总是插入到最下层,作为新的叶子结点。
答案:4.
在AOE网中,什么是关键路径? (1分)
- 最短回路
- 最长回路
- 从第一个事件到最后一个事件的最短路径
- 从第一个事件到最后一个事件的最长路径
答案:4.
在拓扑排序算法中用堆栈和用队列产生的结果会不同吗?(1分)
- 是的肯定不同
- 肯定是相同的
- 有可能会不同
- 以上全不对
答案:3.
下图为一个AOV网,其可能的拓扑有序序列为: (2分)
- ABCDFEG
- ADFCEBG
- ACDFBEG
- ABDCEFG
答案:4.
若将n个顶点e条弧的有向图采用邻接表存储,则拓扑排序算法的时间复杂度是:(1分)
- O(n)
- O(n+e)
- O(n2)
- O(n×e)
答案:2.
对下图进行拓扑排序,可以得到不同的拓扑序列的个数是: (2分)
- 4
- 3
- 2
- 1
答案:2.
已知有向图G=(V, E),其中V = {v1, v2, v3, v4, v5, v6}
,E = {<v1,v2>, <v1,v4>, <v2,v6>, <v3,v1>, <v3,v4>, <v4,v5>, <v5,v2>, <v5,v6>}
。G的拓扑序列是: (2分)
v3, v1, v4, v5, v2, v6
v3, v4, v1, v5, v2, v6
v1, v3, v4, v5, v2, v6
v1, v4, v3, v5, v2, v6
答案:1.
给定有权无向图的邻接矩阵如下,其最小生成树的总权重是:(3分)
- 22
- 20
- 15
- 8
答案:4.
给定有权无向图的邻接矩阵如下,其最小生成树的总权重是:(3分)
- 20
- 22
- 8
- 15
答案:3.
给定有权无向图的邻接矩阵如下,其最小生成树的总权重是:(3分)
- 24
- 23
- 18
- 17
答案:2.
给定有权无向图如下。关于其最小生成树,下列哪句是对的? (3分)
- 最小生成树不唯一,其总权重为23
- 最小生成树唯一,其总权重为20
- 边(B, F)一定在树中,树的总权重为23
- 边(H, G)一定在树中,树的总权重为20
答案:1.
给定有权无向图如下。关于其最小生成树,下列哪句是对的? (3分)
- 边(B, A)一定在树中,树的总权重为23
- 边(D, C)一定在树中,树的总权重为20
- 最小生成树不唯一,其总权重为23
- 最小生成树唯一,其总权重为20
答案:3.
若无向图G =(V,E)中含10个顶点,要保证图G在任何情况下都是连通的,则需要的边数最少是: (3分)
- 45
- 37
- 36
- 9
给定一个有向图的邻接表如下图,则该图有__个强连通分量。(3分)
- 4 {{0, 1, 5}, {2}, {3}, {4}}
- 3 {{2}, {4}, {0, 1, 3, 5}}
- 1 {0, 1, 2, 3, 4, 5}
- 1 {0, 5, 1, 3}
- 答案:2.
给定有向图的邻接矩阵如下:
顶点2(编号从0开始)的出度和入度分别是:(1分)
- 3, 1
- 1, 3
- 0, 2
- 2, 0
- 答案:3.
下面给出的有向图中,有__个强连通分量。(2分)
- 1 ({0,1,2,3,4})
- 1 ({1,2,3,4})
- 2 ({1,2,3,4}, {0})
- 5 ({0}, {1}, {2}, {3}, {4})
- 答案:3.
下面给出的有向图中,各个顶点的入度和出度分别是:(1分)
- 入度: 0, 2, 3, 1, 2; 出度: 3, 2, 1, 1, 1
- 入度: 3, 2, 1, 1, 1; 出度: 0, 2, 3, 1, 2
- 入度: 3, 4, 4, 2, 3; 出度: 3, 4, 4, 2, 3
- 入度: 0, 1, 2, 1, 1; 出度: 3, 2, 1, 1, 1
- 答案:1.
如果G是一个有36条边的非连通无向图,那么该图顶点个数最少为多少?(3分)
- 7
- 8
- 9
- 10
- 答案:4.
下面关于图的存储的叙述中,哪一个是正确的? (1分)
- 用相邻矩阵法存储图,占用的存储空间数只与图中结点个数有关,而与边数无关
- 用相邻矩阵法存储图,占用的存储空间数只与图中边数有关,而与结点个数无关
- 用邻接表法存储图,占用的存储空间数只与图中结点个数有关,而与边数无关
- 用邻接表法存储图,占用的存储空间数只与图中边数有关,而与结点个数无关
- 答案:1.
关于图的邻接矩阵,下列哪个结论是正确的? (1分)
- 有向图的邻接矩阵总是不对称的
- 有向图的邻接矩阵可以是对称的,也可以是不对称的
- 无向图的邻接矩阵总是不对称的
- 无向图的邻接矩阵可以是不对称的,也可以是对称的
- 答案:2.
设N个顶点E条边的图用邻接表存储,则求每个顶点入度的时间复杂度为: (2分)
- O(N)
- O(N2)
- O(N+E)
- O(N×E)
- 答案:3.
在一个无向图中,所有顶点的度数之和等于所有边数的多少倍? (2分)
- 1/2
- 1
- 2
- 4
- 答案:3.
在一个有向图中,所有顶点的入度与出度之和等于所有边之和的多少倍? (2分)
- 1/2
- 1
- 2
- 4
- 答案:3.
在任一有向图中,所有顶点的入度之和与所有顶点的出度之和的关系是: (1分)
- 相等
- 大于等于
- 小于等于
- 不确定
- 答案:1.
设无向图的顶点个数为N,则该图最多有多少条边? (1分)
- N−1
- N(N−1)/2
- N(N+1)/2
- N2
- 答案:2.
下列关于无向连通图特征的叙述中,正确的是: (2分)
- 所有顶点的度之和为偶数
- 边数大于顶点个数减1
- 至少有一个顶点的度为1
- 只有1
- 只有2
- 1和2
- 1和3
- 答案:1.
若无向图G =(V,E)中含7个顶点,要保证图G在任何情况下都是连通的,则需要的边数最少是: (3分)
- 6
- 15
- 16
- 21
- 答案:3.
在N个顶点的无向图中,所有顶点的度之和不会超过顶点数的多少倍? (2分)
- 1
- 2
- (N−1)/2
- N−1
- 答案:4.
对于一个具有N个顶点的无向图,要连通所有顶点至少需要多少条边? (2分)
- N−1
- N
- N+1
- N/2
- 答案:1.
具有N(N>0)个顶点的无向图至多有多少个连通分量? (2分)
- 0
- 1
- N−1
- N
- 答案:4.
一个有N个顶点的强连通图至少有多少条边? (2分)
- N−1
- N
- N+1
- N(N−1)
- 答案:2.
如果G是一个有28条边的非连通无向图,那么该图顶点个数最少为多少? (3分)
- 7
- 8
- 9
- 10
- 答案:3.
对于有向图,其邻接矩阵表示比邻接表表示更易于: (2分)
- 求一个顶点的入度
- 求一个顶点的出边邻接点
- 进行图的深度优先遍历
- 进行图的广度优先遍历
- 答案:1.
对于一个具有N个顶点的无向图,若采用邻接矩阵表示,则该矩阵的大小是: (1分)
- N−1
- N
- (N−1)2
- N2
- 答案:4.
若一个有向图用邻接矩阵表示,则第i个结点的入度就是: (1分)
- 第i行的元素个数
- 第i行的非零元素个数
- 第i列的非零元素个数
- 第i列的零元素个数
- 答案:3.
下列选项中,不是下图深度优先搜索序列的是:(2分)
- V1, V5, V4, V3, V2
- V1, V3, V2, V5, V4
- V1, V2, V5, V4, V3
- V1, V2, V3, V4, V5
- 答案:4.
若某图的深度优先搜索序列是{V1, V4, V0, V3, V2},则下列哪个图不可能对应该序列? (2分)
- 答案:3.
若某图的深度优先搜索序列是{V2, V0, V4, V3, V1},则下列哪个图不可能对应该序列? (2分)
- 答案:4.
已知无向图G含有16条边,其中度为4的顶点个数为3,度为3的顶点个数为4,其他顶点的度均小于3。图G所含的顶点个数至少是:(4分)
- 10
- 11
- 13
- 15
- 答案:2.
给定一有向图的邻接表如下。从顶点V1出发按深度优先搜索法进行遍历,则得到的一种顶点序列为:(2分)
- V1,V5,V4,V7,V6,V2,V3
- V1,V2,V3,V4,V7,V6,V5
- V1,V5,V4,V7,V6,V3,V2
- V1,V5,V6,V4,V7,V2,V3
- 答案:3.
图的广度优先遍历类似于二叉树的:(1分)
- 先序遍历
- 中序遍历
- 后序遍历
- 层次遍历
- 答案:4.
给定无向图G,从V0出发进行深度优先遍历访问的边集合为: {(V0,V1), (V0,V4), (V1,V2), (V1,V3), (V4,V5), (V5,V6)}。则下面哪条边不可能出现在G中? (3分)
- (V0,V2)
- (V0,V6)
- (V1,V5)
- (V4,V6)
- 答案:3.
给定一有向图的邻接表如下。从顶点V1出发按深度优先搜索法进行遍历,则得到的一种顶点序列为: (2分)
- V1,V2,V3,V5,V4
- V1,V3,V4,V5,V2
- V1,V4,V3,V5,V2
- V1,V2,V4,V5,V3
- 答案:2.
已知一个图的邻接矩阵如下,则从顶点V1出发按深度优先搜索法进行遍历,可能得到的一种顶点序列为: (2分)
- V1,V2,V3,V4,V5,V6
- V1,V2,V4,V5,V6,V3
- V1,V3,V5,V2,V4,V6
- V1,V3,V5,V6,V4,V2
- 答案:2.
如果从无向图的任一顶点出发进行一次深度优先搜索可访问所有顶点,则该图一定是: (2分)
- 连通图
- 完全图
- 有回路的图
- 一棵树
- 答案:1.
在图中自a点开始进行广度优先遍历算法可能得到的结果为: (2分)
- a, e, d, f, c, b
- a, c, f, e, b, d
- a, e, b, c, f, d
- a, b, e, c, d, f
- 答案:4.
在图中自c点开始进行广度优先遍历算法可能得到的结果为: (2分)
- c,a,b,e,f,d
- c,a,f,d,e,b
- c,f,a,d,e,b
- c,f,a,b,d,e
- 答案:3.
如果无向图G必须进行两次广度优先搜索才能访问其所有顶点,则下列说法中不正确的是: (2分)
- G肯定不是完全图
- G中一定有回路
- G一定不是连通图
- G有2个连通分量
- 答案:2.
给定一有向图的邻接表如下。若从v1开始利用此邻接表做广度优先搜索得到的顶点序列为:{v1, v3, v2, v4, v5},则该邻接表中顺序填空的结果应为: (3分)
- v2, v3, v4
- v3, v2, v4
- v3, v4, v2
- v4, v3, v2
- 答案:2.
给定一有向图的邻接表如下。从顶点V1出发按广度优先搜索法进行遍历,则得到的一种顶点序列为: (2分)
- V1,V2,V3,V4,V5
- V1,V2,V3,V5,V4
- V1,V3,V2,V4,V5
- V1,V4,V3,V5,V2
- 答案:3.
已知一个图的邻接矩阵如下,则从顶点V1出发按广度优先搜索法进行遍历,可能得到的一种顶点序列为: (2分)
- V1,V2,V3,V5,V4,V6
- V1,V2,V4,V5,V6,V3
- V1,V3,V5,V2,V4,V6
- V1,V3,V5,V6,V4,V2
- 答案:1.
下列说法不正确的是: (2分)
- 图的遍历是从给定的源点出发每一个顶点仅被访问一次
- 遍历的基本算法有两种:深度遍历和广度遍历
- 图的深度遍历是一个递归过程
- 图的深度遍历不适用于有向图
- 答案:4.
图的深度优先遍历类似于二叉树的: (1分)
- 先序遍历
- 中序遍历
- 后序遍历
- 层次遍历
- 答案:1.
在图中自a点开始进行深度优先遍历算法可能得到的结果为: (2分)
- a, b, e, c, d, f
- a, c, f, e, b, d
- a, e, b, c, f, d
- a, e, d, f, c, b
具有1102个结点的完全二叉树一定有__个叶子结点。(3分)
- 79
- 551
- 1063
- 不确定
- 答案:2.
若森林F有15条边、25个结点,则F包含树的个数是:(2分)
- 8
- 9
- 10
- 11
- 答案:3.
将森林转换为对应的二叉树,若在二叉树中,结点u是结点v的父结点的父结点,则在原来的森林中,u和v可能具有的关系是: (3分)
- 父子关系; 2. 兄弟关系; 3. u的父结点与v的父结点是兄弟关系
- 只有2
- 1和2
- 1和3
- 1、2和3
- 答案:2.
对于一个有N个结点、K条边的森林,共有几棵树? (2分)
- N−K
- N−K+1
- N−K−1
- 不能确定
- 答案:1.
设森林F中有三棵树,第一、第二、第三棵树的结点个数分别为M1,M2和M3。则与森林F对应的二叉树根结点的右子树上的结点个数是: (2分)
- M1
- M1+M2
- M2+M3
- M3
- 答案:3.
由若干个二叉树组成的森林F中,叶结点总个数为N,度为2的结点总个数为M,则该集合中二叉树的个数为: (3分)
- M−N
- N−M
- N−M−1
- 无法确定
- 答案:2.
已知一棵完全二叉树的第6层(设根为第1层)有8个叶结点,则该完全二叉树的结点个数最多是: (3分)
- 39
- 52
- 111
- 119
- 答案:3.
在一个用数组表示的完全二叉树中,如果根结点下标为1,那么下标为17和19这两个结点的最近公共祖先结点在哪里(数组下标)? (注:两个结点的“公共祖先结点”是指同时都是这两个结点祖先的结点) (3分)
- 8
- 4
- 2
- 1
- 答案:2.
具有65个结点的完全二叉树其深度为(根的深度为1): (3分)
- 8
- 7
- 6
- 5
- 答案:2.
如果一棵非空k(k≥2)叉树T中每个非叶子结点都有k个孩子,则称T为正则k叉树。若T的高度为h(单结点的树h=1),则T的结点数最多为:(3分)
- (kh−1)/(k−1)
- (kh−1−1)/(k−1)
- (kh+1−1)/(k−1)
- 以上都不是
- 答案:1.
如果一棵非空k(k≥2)叉树T中每个非叶子结点都有k个孩子,则称T为正则k叉树。若T的高度为h(单结点的树h=1),则T的结点数最少为:(3分)
- (kh−1−1)/(k−1)+1
- (kh−1)/(k−1)−1
- kh
- k(h−1)+1
- 答案:4.
要使一棵非空二叉树的先序序列与中序序列相同,其所有非叶结点须满足的条件是:(2分)
- 只有左子树
- 只有右子树
- 结点的度均为1
- 结点的度均为2
- 答案:2.
已知一棵二叉树的树形如下图所示,其后序序列为{ e
, a
, c
, b
, d
, g
, f
}。树中与结点a
同层的结点是:(3分)
c
d
f
g
- 答案:2.
若一棵二叉树的后序遍历序列是{ 1, 3, 2, 6, 5, 7, 4 },中序遍历序列是{ 1, 2, 3, 4, 5, 6, 7 },则下列哪句是错的?(3分)
- 这是一棵完全二叉树
- 2是1和3的父结点
- 这是一棵二叉搜索树
- 7是5的父结点
- 答案:1.
如果一棵非空k(k≥2)叉树T中每个非叶子结点都有k个孩子,则称T为正则k叉树。若T有m个非叶子结点,则T中的叶子结点个数为:(3分)
- mk
- m(k−1)
- m(k−1)+1
- m(k−1)−1
- 答案:3.
有一个四叉树,度2的结点数为2,度3的结点数为3,度4的结点数为4。问该树的叶结点个数是多少?(2分)
- 10
- 12
- 20
- 21
- 答案:4.
若一棵二叉树的前序遍历序列是{ 4, 2, 1, 3, 6, 5, 7 },中序遍历序列是{ 1, 2, 3, 4, 5, 6, 7 },则下列哪句是错的?(3分)
- 这是一棵完全二叉树
- 所有的奇数都在叶子结点上
- 这是一棵二叉搜索树
- 2是5的父结点
- 答案:4.
按照二叉树的定义,具有3个结点的二叉树有几种? (2分)
- 3
- 4
- 5
- 6
- 答案:3.
任何一棵二叉树的叶结点在先序、中序和后序遍历序列中的相对次序 (2分)
- 发生改变
- 不发生改变
- 不能确定
- 以上都不对
- 答案:2.
二叉树中第5层(根的层号为1)上的结点个数最多为:(2分)
- 8
- 15
- 16
- 32
- 答案:3.
先序遍历图示二叉树的结果为 (2分)
- A,B,C,D,H,E,I,F,G
- A,B,D,H,I,E,C,F,G
- H,D,I,B,E,A,F,C,G
- H,I,D,B,E,F,G,A,C
- 答案:2.
三叉树中,度为1的结点有5个,度为2的结点3个,度为3的结点2个,问该树含有几个叶结点? (3分)
- 8
- 10
- 12
- 13
- 答案:1.
某二叉树的中序序列和后序序列正好相反,则该二叉树一定是 (2分)
- 空或只有一个结点
- 高度等于其结点数
- 任一结点无左孩子
- 任一结点无右孩子
- 答案:3.
某二叉树的前序和后序遍历序列正好相反,则该二叉树一定是 (2分)
- 空或只有一个结点
- 高度等于其结点数
- 任一结点无左孩子
- 任一结点无右孩子
- 答案:2.
设n、m为一棵二叉树上的两个结点,在中序遍历时,n在m前的条件是 (3分)
- n在m左方
- n在m右方
- n是m祖先
- n是m子孙
- 答案:1.
给定二叉树如下图所示。设N代表二叉树的根,L代表根结点的左子树,R代表根结点的右子树。若遍历后的结点序列为3、1、7、5、6、2、4,则其遍历方式是: (2分)
- NRL
- RNL
- LRN
- RLN
- 答案:2.
设高为h的二叉树(规定叶子结点的高度为1)只有度为0和2的结点,则此类二叉树的最少结点数和最多结点数分别为: (3分)
- 2h, 2h−1
- 2h−1, 2h−1
- 2h−1, 2h−1−1
- 2h−1+1, 2h−1
- 答案:2.
在下述结论中,正确的是: (2分)
①只有一个结点的二叉树的度为0;
②二叉树的度为2;
③二叉树的左右子树可任意交换;
④深度为K的完全二叉树的结点个数小于或等于深度相同的满二叉树。
- ①④
- ②④
- ①②③
- ②③④
设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为 (2分)
- 13
- 33
- 18
- 40
答案:2.
设有数组A[i,j],数组的每个元素长度为3字节,i的值为1 到8 ,j的值为1 到10,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为()。 (2分)
- BA+141
- BA+180
- BA+222
- BA+225
答案:2.
将一个A[1..100,1..100]的三对角矩阵,按行优先存入一维数组B[1‥298]中,A中元素A6665(即该元素下标i=66,j=65),在B数组中的位置K为()。 (2分)
- 198
- 195
- 197
- 199
答案:2.
作者: 鲁法明
若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B[1..(n(n+1))/2]中,则在B中确定aij(i<j)的位置k的关系为()。 (2分)
- i*(i-1)/2+j
- j*(j-1)/2+i
- i*(i+1)/2+j
- j*(j+1)/2+i
答案:2.
作者: 鲁法明
已知广义表L=((x,y,z),a,(u,t,w)),从L表中取出原子项t的运算是()。 (2分)
- head(tail(tail(L)))
- tail(head(head(tail(L))))
- head(tail(head(tail(L))))
- head(tail(head(tail(tail(L)))))
答案:4.
作者: 鲁法明
广义表A=(a,b,(c,d),(e,(f,g))),则式子Head(Tail(Head(Tail(Tail(A)))))的值为()。 (2分)
- (g)
- (d)
- c
- d
设广义表L=((a,b,c)),则L的长度和深度分别为( ) (2分)
- 1和1
- 1和3
- 1和2
- 2和3
树最适合于用来表示 (1分)
- 有序数据元素
- 无序数据元素
- 元素之间无联系的数据
- 元素之间具有分支层次关系的数据
- 答案:4.
设树T的度为4,其中度为1、2、3、4的结点个数分别为4、2、1、1。则T中有多少个叶子结点? (3分)
- 4
- 6
- 8
- 10
- 答案:3.
已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历的结果为()。 (3分)
- CBEFDA
- FEDCBA
- CBEDFA
- 不定
已知某二叉树的后序遍历序列是dabec, 中序遍历序列是debac , 它的前序遍历是( )。 (3分)
- acbed
- decab
- deabc
- cedba
答案:4.
给定一个堆栈的入栈序列为{ 1, 2, ⋯, n },出栈序列为{ p1, p2, ⋯, pn }。如果p2=n,则存在多少种不同的出栈序列?(2分)
- 1
- 2
- n−1
- n
- 答案:3.
设一个堆栈的入栈顺序是1、2、3、4、5。若第一个出栈的元素是4,则最后一个出栈的元素必定是: (2分)
- 1
- 3
- 5
- 1或者5
- 答案:4.
从栈顶指针为ST
的链栈中删除一个结点且用X
保存被删结点的值,则执行: (2分)
X= ST->data;
X= ST; ST = ST->next;
X= ST->data; ST = ST->next;
ST = ST->next; X= ST->data;
- 答案:3.
设栈S和队列Q的初始状态均为空,元素a、b、c、d、e、f、g依次进入栈S。若每个元素出栈后立即进入队列Q,且7个元素出队的顺序是b、d、c、f、e、a、g,则栈S的容量至少是: (2分)
- 1
- 2
- 3
- 4
- 答案:3.
假设有5个整数以1、2、3、4、5的顺序被压入堆栈,且出栈顺序为3、5、4、2、1,那么为了获得这样的输出,堆栈大小至少为: (2分)
- 2
- 3
- 4
- 5
- 答案:3.
若元素a、b、c、d、e、f依次进栈,允许进栈、退栈操作交替进行,但不允许连续三次进行退栈工作,则不可能得到的出栈序列是? (2分)
- b c a e f d
- c b d a e f
- d c e b f a
- a f e d c b
- 答案:4.
设一个栈的输入序列是1、2、3、4、5,则下列序列中,是栈的合法输出序列的是? (2分)
- 3 2 1 5 4
- 5 1 2 3 4
- 4 5 1 3 2
- 4 3 1 2 5
- 答案:1.
有六个元素以6、5、4、3、2、1的顺序进栈,问哪个不是合法的出栈序列? (2分)
- 2 3 4 1 5 6
- 3 4 6 5 2 1
- 5 4 3 6 1 2
- 4 5 3 1 2 6
- 答案:2.
若一个栈的入栈序列为1、2、3、…、N,输出序列的第一个元素是i,则第j个输出元素是: (2分)
- i−j−1
- i−j
- j−i−1
- 不确定
- 答案:4.
若一个栈的入栈序列为1、2、3、…、N,其输出序列为p1、p2、p3、…、pN。若p1=N,则pi为: (2分)
- i
- n−i
- n−i+1
- 不确定
- 答案:3.
将5个字母ooops
按此顺序入栈,则有多少种不同的出栈顺序可以仍然得到ooops
? (2分)
- 1
- 3
- 5
- 6
- 答案:3.
栈的插入和删除操作在( )进行。 (2分)
- 栈顶
- 栈底
- 任意位置
- 指定位置
答案:1.
对于一非空的循环单链表,h
和p
分别指向链表的头、尾结点,则有:(2分)
p->next == h
p->next == NULL
p == NULL
p == h
- 答案:1.
在双向循环链表结点p
之后插入s
的语句是: (3分)
p->next=s; s->prior=p; p->next->prior=s ; s->next=p->next;
p->next->prior=s; p->next=s; s->prior=p; s->next=p->next;
s->prior=p; s->next=p->next; p->next=s; p->next->prior=s;
s->prior=p; s->next=p->next; p->next->prior=s; p->next=s;
- 答案:4.
在双向链表存储结构中,删除p
所指的结点,相应语句为:(3分)
p->prior=p->prior->prior; p->prior->next=p;
p->next->prior=p; p->next=p->next->next;
p->prior->next=p->next; p->next->prior=p->prior;
p->next=p->prior->prior; p->prior=p->next->next;
- 答案:3.
某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用什么存储方式最节省运算时间? (2分)
- 单链表
- 仅有尾指针的单循环链表
- 仅有头指针的单循环链表
- 双链表
- 答案:2.
若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。则采用哪种存储方式最节省运算时间? (2分)
- 单链表
- 双链表
- 单循环链表
- 带头结点的双循环链表
- 答案:4.
将线性表La和Lb头尾连接,要求时间复杂度为O(1),且占用辅助空间尽量小。应该使用哪种结构? (2分)
- 单链表
- 单循环链表
- 带尾指针的单循环链表
- 带头结点的双循环链表
- 答案:3.
(neuDS)在链表中若经常要删除表中最后一个结点或在最后一个结点之后插入一个新结点,则宜采用()存储方式。 (2分)
- 顺序表
- 用头指针标识的循环单链表
- 用尾指针标识的循环单链表
- 双向链表
非空的循环单链表head的尾结点(由p所指向)满足()。 (2分)
- p->next == NULL
- p == NULL
- p->next == head
- p == head
在循环双链表的p所指结点之前插入s所指结点的操作是()。 (2分)
- p->prior = s; s->next = p; p->prior->next = s; s->prior = p->prior;
- p->prior = s; p->prior->next = s; s->next = p; s->prior = p->prior;
- s->next = p; s->prior = p->prior; p->prior = s; p->right->next = s;
- s->next = p; s->prior = p->prior; p->prior->next = s; p->prior = s;
若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点,则采用()存储方式最节省运算时间。 (2分)
- 单链表
- 给出表头指针的单循环链表
- 双链表
- 带表头附加结点的双循环链表
某线性表最常用的操作是在最后一个结点之后插入一个结点或删除第一个结点,故采用()存储方式最节省运算时间。 (2分)
- 单链表
- 仅有头结点的单循环链表
- 双链表
- 仅有尾指针的单循环链表
在一个长度为n(n>1)的单链表上,设有头和尾两个指针,执行()操作与链表的长度有关。 (2分)
- 删除单链表中的第一个元素
- 删除单链表中的最后一个元素
- 在单链表第一个元素前插入一个新元素
- 在单链表最后一个元素后插入一个新元素
如果对线性表的运算只有4种,即删除第一个元素,删除最后一个元素,在第一个元素前面插入新元素,在最后一个元素的后面插入新元素,则最好使用()。 (2分)
- 只有表尾指针没有表头指针的循环单链表
- 只有表尾指针没有表头指针的非循环双链表
- 只有表头指针没有表尾指针的循环双链表
- 既有表头指针也有表尾指针的循环单链表
如果对线性表的运算只有2种,即删除第一个元素,在最后一个元素的后面插入新元素,则最好使用()。 (2分)
- 只有表头指针没有表尾指针的循环单链表
- 只有表尾指针没有表头指针的循环单链表
- 非循环双链表
- 循环双链表
在双向循环链表中,在p所指的结点之后插入s指针所指的结点,其操作是()。 (2分)
- p->next = s; s->prior = p; (p->next)->prior = s; s->next = p->next;
- s->prior = p; s->next = p->next; p->next = s; p->next->prior = s;
- p->next = s; p->next->prior = s; s->prior = p; s->next = p->next;
- s->prior = p; s->next = p->next; p->next->prior = s; p->next = s;
带表头附加结点的双向循环链表为空的判断条件是头指针L满足条件()。 (2分)
- L= =NULL
- L->right= =NULL
- L->left = =NULL
- L->right= =L
循环链表的主要优点是()。 (2分)
- 不再需要头指针了
- 已知某个结点的位置后,能够很容易找到它的直接前驱
- 在进行插入、删除运算时,能更好的保证链表不断开
- 从表中的任意结点出发都能扫描到整个链表
已知指针ha和hb分别是两个单链表的头指针,下列算法将这两个链表首尾相连在一起,并形成一个循环链表(即ha的最后一个结点链接hb的第一个结点,hb的最后一个结点指向ha),返回该循环链表的头指针。请将该算法补充完整。 (4分)
typedef struct node{
ElemType data;
struct node *next;
}LNode;
LNode *merge(LNode *ha, LNode *hb) {
LNode *p=ha;
if (ha==NULL || hb==NULL) {
cout<<”one or two link lists are empty!”<<endl;
return NULL;
}
while ( p->next!=NULL )
p=p->next;
p->next=hb;
while ( p->next!=NULL )
p=p->next;
__________
}
- ha=p->next; return ha;
- p->next=ha; return ha;
- ha=p->next; return p;
- p->next=ha; return p;
设有一个双向循环链表,每个结点中除有left、data和right三个域外,还增设了一个访问频度域freq,freq 的初值为零。每当链表进行一次查找操作后,被访问结点的频度域值便增1,同时调整链表中结点的次序,使链表按结点频度值非递增有序的次序排列。下列算法是符合上述要求的查找算法,请将该算法补充完整。 (4分)
typedef struct Node{
ElemType data;
struct Node *left;
struct Node *right;
intfreq;
} DNode;
DNode *locate_DList(DNode *&L, ElemType x)
{ //在表L中查找元素x,查找成功则调整结点频度域值及结点位置,并返回结点地址;
//查找不成功则返回NULL
DNode *p=L, *q;
if (L==NULL) return NULL;
while (p->data!=x && p->right!=L) p=p->right;
if (p->data!=x) return NULL;
p->freq++;
q=p->left;
while (q!=L && q->freq<=p->freq) q=q->left; //查找插入位置
if (q==L && q->freq<=p->freq) { //需将p结点插在头结点L前
//将p结点先从链表中摘下来
p->left->right=p->right;
p->right->left=p->left;
//将p结点插在L结点前
p->right=L;
p->left=L->left;
L->left->right=p;
L->left=p;
L=p;
}
else if (q!=p->left ) { //若q不是p的前驱,则需调整结点位置,将p结点插在q结点后
//将p结点先从链表中摘下来
p->left->right=p->right;
p->right->left=p->left;
______________ //将p结点插在q结点后
}
return p;
}
- p->left=q; p->right=q->right;
- p->left=q; q->right=p;
- p->left=q; p->right=q->right; q->right->left=p; q->right=p;
- p->left=q; q->right=p; p->right=q->right; q->right->left=p;
与单链表相比,双链表的优点之一是()。 (2分)
- 插入、删除操作更加简单
- 可随机访问
- 可以省略表头指针或表尾指针
- 顺序访问相邻结点更加灵活
采用多项式的非零项链式存储表示法,如果两个多项式的非零项分别为N1和N2个,最高项指数分别为M1和M2,则实现两个多项式相乘的时间复杂度是:(2分)
- O(N1×N2)
- O(M1×M2)
- O(N1+N2)
- O(M1+M2)
- 答案:1.
设h
为不带头结点的单向链表。在h
的头上插入一个新结点t
的语句是:(2分)
h=t; t->next=h->next;
t->next=h->next; h=t;
h=t; t->next=h;
t->next=h; h=t;
- 答案:4.
在单链表中,若p
所指的结点不是最后结点,在p
之后插入s
所指结点,则执行 (2分)
s->next=p; p->next=s;
s->next=p->next; p=s;
s->next=p->next; p->next=s;
p->next=s; s->next=p;
- 答案:3
带头结点的单链表h
为空的判定条件是: (2分)
h == NULL;
h->next == NULL;
h->next == h;
h != NULL;
- 答案:2.
将两个结点数都为N且都从小到大有序的单向链表合并成一个从小到大有序的单向链表,那么可能的最少比较次数是: (2分)
- 1
- N
- 2N
- NlogN
- 答案:2
线性表若采用链式存储结构时,要求内存中可用存储单元的地址 (1分)
- 必须是连续的
- 连续或不连续都可以
- 部分地址必须是连续的
- 一定是不连续的
- 答案:2
在具有N个结点的单链表中,实现下列哪个操作,其算法的时间复杂度是O(N)? (2分)
- 在地址为p的结点之后插入一个结点
- 删除开始结点
- 遍历链表和求链表的第i个结点
- 删除地址为p的结点的后继结点
- 答案:3
对于一个具有N个结点的单链表,在给定值为x的结点后插入一个新结点的时间复杂度为 (2分)
- O(1)
- O(N/2)
- O(N)
- O(N2)
- 答案:3
链表不具有的特点是: (1分)
- 插入、删除不需要移动元素
- 方便随机访问任一元素
- 不必事先估计存储空间
- 所需空间与线性长度成正比
- 答案:2
(neuDS)在一个含有n个结点的有序单链表中插入一个新结点,使单链表仍然保持有序的算法的时间复杂度是( )。 (2分)
- O(1)
- O(log2n)
- O(n)
- O(n2)
将长度为n的单链表连接在长度为m的单链表之后的算法的时间复杂度为( )。 (2分)
- O(1)
- O(m)
- O(n)
- O(n+m)
(neuDS)在单链表中,增加一个头结点的最终目的是为了( )。 (2分)
- 使单链表至少有一个结点
- 方便运算的实现
- 标识表结点中首结点的位置
- 说明单链表是线性表的链式存储
在单链表中,要删除某一指定结点,必须先找到该结点的()。 (2分)
- 直接前驱
- 自身位置
- 直接后继
- 直接后继的后继
以下关于链式存储结构的叙述中,()是不正确的。 (2分)
- 结点除自身信息外还包括指针域,因此存储密度小于顺序存储结构
- 逻辑上相邻的结点物理上不必邻接
- 可以通过计算直接确定第i个结点的存储地址
- 插入、删除运算操作方便,不必移动结点
线性链表不具有的特点是()。 (2分)
- 随机访问
- 不必事先估计所需存储空间大小
- 插入与删除时不必移动元素
- 所需空间与线性长度成正比
线性表若采用链式存储结构时,要求内存中可用存储单元的地址()。 (2分)
- 必须是连续的
- 部分地址必须是连续的
- 一定是不连续的
- 连续或不连续都可以
对线性表,在下列情况下应当采用链表表示的是()。 (2分)
- 经常需要随机地存取元素
- 经常需要进行插入和删除操作
- 表中元素需要占据一片连续的存储空间
- 表中的元素个数不变
不带表头附加结点的单链表为空的判断条件是头指针head满足条件()。 (2分)
- head==NULL
- head->next==NULL
- head->next== head
- head!=NULL
可以用带表头附加结点的链表表示线性表,也可以用不带头结点的链表表示线性表,前者最主要的好处是()。 (2分)
- 可以加快对表的遍历
- 使空表和非空表的处理统一
- 节省存储空间
- 可以提高存取表元素的速度
答案:2
线性表若采用链式存储结构时,要求内存中可用存储单元的地址 (1分)
- 连续或不连续都可以
- 部分地址必须是连续的
- 必须是连续的
- 一定是不连续的
- 答案:1
在单链表中,要删除某一指定结点,必须先找到该结点的()。 (1分)
- 直接后继
- 直接前驱
- 自身位置
- 直接后继的后继
线性表L在什么情况下适用于使用链式结构实现? (1分)
- L中含有大量的结点
- L中结点结构复杂
- 需不断对L进行删除插入
- 需经常修改L中的结点值
- 答案3
在单链表中,若p
所指的结点不是最后结点,在p
之后插入s
所指结点,则执行 (1分)
s->next=p; p->next=s;
s->next=p->next; p=s;
s->next=p->next; p->next=s;
p->next=s; s->next=p;
- 答案:3
链表不具有的特点是: (1分)
- 不必事先估计存储空间
- 所需空间与线性长度成正比
- 插入、删除不需要移动元素
- 方便随机访问任一元素
- 答案:4
设h
为不带头结点的单向链表。在h
的头上插入一个新结点t
的语句是:(1分)
t->next=h->next; h=t;
t->next=h; h=t;
h=t; t->next=h->next;
h=t; t->next=h;
- 答案:2
以下关于链式存储结构的叙述中,()是不正确的。 (1分)
- 插入、删除运算操作方便,不必移动结点
- 结点除自身信息外还包括指针域,因此存储密度小于顺序存储结构
- 逻辑上相邻的结点物理上不必邻接
- 可以通过计算直接确定第i个结点的存储地址
线性表采用链式存储时,其地址()。 (1分)
- 部分地址必须是连续的
- 必须是连续的
- 一定是不连续的
- 连续与否均可以
可以用带表头附加结点的链表表示线性表,也可以用不带头结点的链表表示线性表,前者最主要的好处是()。 (1分)
- 使空表和非空表的处理统一
- 节省存储空间
- 可以提高存取表元素的速度
- 可以加快对表的遍历
不带表头附加结点的单链表为空的判断条件是头指针head满足条件()。 (1分)
- head->next== head
- head!=NULL
- head==NULL
- head->next==NULL
答案:3
图形结构中元素之间存在()关系。 (2分)
- 一对多
- 多对多
- 一对一
- 多对一
在数据结构中,从逻辑上可以把数据结构分成( )。 (1分)
- 动态结构和静态结构
- 紧凑结构和非紧凑结构
- 线性结构和非线性结构
- 内部结构和外部结构
- 答案:3
数据结构是一门研究非数值计算的程序设计问题中计算机的()以及它们之间的关系和运算等的学科。 (2分)
- 逻辑存储
- 操作对象
- 计算方法
- 数据映象
在数据结构中,与所使用的计算机无关的数据结构是()。 (2分)
- 存储结构
- 逻辑结构
- 逻辑结构和存储结构
- 物理结构
下列关于数据的逻辑结构的叙述中,()是正确的。 (2分)
- 数据的逻辑结构反映了数据在计算机中的存储方式
- 数据的逻辑结构是数据元素间关系的描述
- 数据的逻辑结构分为顺序结构和链式结构
- 数据的逻辑结构分为静态结构和动态结构
数据的()包括集合、线性结构、树形结构和图形结构四种基本类型。 (2分)
- 逻辑结构
- 算法描述
- 存储结构
- 基本运算
线性结构中元素之间存在()关系。 (2分)
- 一对一
- 一对多
- 多对多
- 多对一
从物理存储上可以把数据结构分为 (2分)
- 基本结构、构造型结构
- 动态结构、静态结构
- 顺序结构、链式结构
- 线性结构、树形结构、图形结构和集合结构
数据在计算机内存中的表示是指() 。 (2分)
- 数据结构
- 数据的逻辑结构
- 数据元素之间的关系
- 数据的存储结构
树形结构中元素之间存在()关系。 (2分)
- 一对多
- 多对多
- 多对一
- 一对一
在决定选取何种存储结构时,一般不考虑()。 (2分)
- 结点个数的多少
- 对数据有哪些运算
- 所用编程语言实现这种结构是否方便
- 各结点的值如何