2020年408真题数据结构选择题部分

该上传的真题仅作学习交流,请勿商用,谢谢!

关于答案部分,均为本人手写过程拍照上传,此答案偏向个人理解,如有错误,请留言指正。

写字/上传不易,如果可以,希望各位点个赞,后续我可能会上传历年408真题,包括408的4门全部学科真题,以选择题解答为主,大题为辅(不是不想写大题,而是本人实在太菜,基本功不到位,大题理解能力以及代码部分不能达到408优秀的水平)。
 

1.将一个 10 * 10 对称矩阵 M 的上三角部分的元素m; (1<= i <= j <= 10) 按列优先存入 C 语言的维数组 N 中,元素m7,2在 N 中的下标是 ( )。

A、15 B、16 C、22 D、23

2.对空栈 S 进行Push与Pop 操作,入栈序列 a,b,c,d,e 经过Push,Push,Pop,Push,Pop,Push,Push,Pop 操作后得到的出栈序列是 ( )。

A、b, a, c B、b, a, e C、b, c,a D、b, c, e

3.对于任意一棵高度为 5 且有 10 个节点的二又树,若采用顺序存储结构保存,每个结点占 1 个存储单元(仅存放结点的数据信息),则存放该二叉树需要的存储单元数量至少是 ( )。

A、31 B、16 C、15 D、10

4.已知森林 F 及与之对应的二叉树T ,若 F 的先根遍历序列是 a,b,c,d,e,f,中根遍历序列是 b,a,d,f,e,c 则 T 的后根遍历序列是 ( )。

A、b, a, d, f,e, c B、b, d, f,e, c, a C、b, f, e, d c,a D、f, e, d, c, b,a

5.下列给定的关键字输入序列中,不能生成如下二叉排序树的是 ( )。

A、4,5,2,1,3 B、4,5,1,2,3 C、4,2,5,3,1 D、4,2,1,3,5

(5图)   

6.修改递归方式实现的图的深度优先搜索(DFS) 算法,将输出(访问)定点信息的语句移到退出递归前(即执行输出语句后立刻退出递归)。采用修改后的算法遍历有向无环图G,若输出结果中包含 G 中的全部顶点,则输出的顶点序列是 G 的( )。

A、拓扑有序序列 B、逆拓扑有序序列   C、广度优先搜索序列 D、深度优先搜索序列

 (7图)

7.已知无向图 G 如下所示,使用克鲁斯卡尔 (Kruskal) 算法求图 G 的最小生成树,加入到最小生成树中的边依次是 ( )。

A、(b,f)(b,d)(a,e)(c,e)(b,e) B、(b,f)(b,d)(be)(a,e)(e,c)

C、(a,e)(b,e)(c,e)(b,d)(b,f) D、(a,e)(c,e)(b,e)(b,f)(b,d)

8.若使用 AOE 网估算工程进度,则下列叙述中正确的是 ( )。

A、关键路径是从原点到汇点边数最多的一条路径

B、关键路径是从原点到汇点路径长度最长的路径

C、增加任一关键活动的时间不会延长工程的工期

D、缩短任一关键活动的时间将会缩短工程的工期

9.下列关于大根堆(至少含 2 个元素) 的叙述中正确的是 () 

(1)可以将堆看成一棵完全二叉树;(2)可采用顺序存储方式保存堆;

(3)可以将堆看成一棵二又排序树;(4)堆中的次大值一定在根的下一层;

A、(1),(2) B、(2),(3) C、(1),(2),(4) D、(1),(3),(4)

10.依次将关键字 5,6,9,13,8,2,12,15 插入初始为空的 4 阶 B 树后,根节点中包含的关键字是( )。

A、8 B、6,9 C、8,13 D、9,12

11.对大部分元素已有序的数组进行排序时,直接插入排序比简单选择排序效率更高,其原因是( )。

(1)直接插入排序过程中元素之间的比较次数更少

(2)直接插入排序过程中所需要的辅助空间更少

(3)直接插入排序过程中元素的移动次数更少

A、(1) B、(3) C、(1),(2) D、(1),(2),(3)

以上请自己做,做完后可进行答案核对!!

TIPS:答案为标准答案,但是解析过程为自己理解并上传的纸质版,如有异议或者错误,请多加指正,谢谢!

答案:1~5 CDACB      6~11 BABCBA

答案解析:

1,C

解析:本题考查特殊矩阵的压缩存储。

对于任何方阵,如果Aij=Aji,那么称该方阵为对称阵。此种情况下,为了节省存储空间,将矩阵分为上三角矩阵/下三角矩阵,即Aij=Aji,仅在上/下三角进行存储,其他位置不存储,这样节省了一半空间。

行优先和列优先的区别:

题中的M7,2明显在矩阵的下三角部分,但是该题为上三角存储,且按列优先方式,并且矩阵Mij是按照(1<= i <= j <= 10)形式,即下标从1开始,手写过程截图如下:

2,D

解析:本题考查栈的入栈和出栈操作。

pop表示弹出,也就是出栈的意思;push表示压入,推入,入栈的意思。

栈是一种后进先出的特殊线性表,即后进入的元素先出去。

手写过程截图如下:

3,A

解析:本题考查二叉树的顺序存储,以及二叉树的性质,如树高和结点个数之间的关系等。

二叉树如果使用顺序存储,一般情况下需要让结点的i的左孩子对应2i,右孩子对应2i+1,这样能够保证二叉树的性质;但是如果这样存储,又会使得数组变得比较大,占用了系统资源。

一个N棵结点的二叉树,树高h最小值为:log2 为底 (N+1)的对数 ———向上取整;最大值为:N。

本题手写过程截图如下:

4,C

解析:本题考查森林与二叉树的遍历,以及森林与二叉树的转换。

★★★关于二叉树的遍历转换,牢记如下图:

                 树                                森林                        二叉树

                先根遍历                   先序遍历                   先序遍历

                后根遍历                   中序遍历                   中序遍历

森林的F先根遍历=二叉树T的先根遍历;森林F的中序遍历=二叉树的中序遍历;

那么该题可以转换为:已知二叉树的先根和中序遍历,求二叉树的后根遍历序列。

先根遍历:根 左 右 ;  中序遍历:左 根 右; 后序遍历: 左 右 根;

该题的手写过程截图如下:

5,B

解析:本题考查二叉排序树的关键字插入。

二叉排序树的定义(递归定义):左子树<根结点<右子树;对于左右子树,而言,左右子树同时也要满足二叉排序树的定义。

该题的手写过程截图如下:

6,B

解析:本题考查深度优先搜索DFS的过程理解,同时考查拓扑排序的定义。

深度优先搜索:简单地讲,就是沿着一个分支探索,直到深入到最深处为止;如果达到最深处,返回上一级继续搜索其他分支;遵循递归定义。

(深度优先搜索的算法内容正式描述如下:选中初始结点,遍历初始结点中的第一个结点(按照图的存储结构来,分为邻接矩阵和邻接表),访问第一个结点,遍历与第一个结点相邻的其他结点中选中一个,继续访问;然后重复上一步骤;如果达到最深处,返回上一级继续搜索其他结点,该定义递归,直到遍历完所有结点,结束算法,此时可得到一个深度优先遍历序列。)

关键点:深度优先搜索是先遍历到当前结点,访问之,然后继续下一步;而题中要求,直到退出到上层递归前,才输出当前结点,这与遍历序列不同。

 拓扑排序:

        1,每次从有向无环图DAG中寻找一个出度为0的结点进行输出,删除结点的出度;

        2,循环操作1,直到有向无环图中所有结点都被遍历完,得到的遍历序列,称为拓扑排序序列。

 TIPS:拓扑排序序列不唯一;若图有环,则一定不存在拓扑排序序列。

以有向无环图DAG为例进行手写演示,截图如下:

7,A

解析:本题考查图的性质——最小生成树的算法之一,克鲁斯卡尔(另一个是普利姆算法)。

克鲁斯卡尔算法:针对边稠密的图。

        1,可每次选最小的边;

        2,如果该边加入后形成闭环,选择其他的最小的边加入;

        3,重复1,2,直到选中所有的顶点,此时得到的图称为最小生成树。

普里姆算法:针对顶点稠密的图。

        1,初始顶点随机选择一个;

        2,以该顶点形成的图中,找到一个与该顶点相连的边中权值最小的一个边加入图;

        3,如果该顶点加入后形成了环,那么选择其他最小相邻边的顶点;

        4,重复1,2,直到图中包含所有顶点。

  ​​​​​​​(7图)

本题的手写过程截图如下:

8,B

解析:本题考查AOE网的关键路径定义以及特点。

相关概念:AOE网,关键路径。

AOE网:ACTIVITY ON EDGE,边表示活动的网络。

关键路径:为了完成该工程,需要进行的最长的路径(时间)。

原点:工程的起点;           汇点:工程汇总的点,也就是终点。

本题解释如下:

A和B,关键路径是从原点到汇点路径长度最长的路径,为定义,B是正确的,A是错误的,没什么好说的;边数最多显然不对,边数最多不代表路径长度最长。

C,增加任意一个关键活动的时间,一定会延长该工程的工期。C错。

D,缩短任意一个关键活动的时间,将会缩短工程工期。D是错误的,正确说法:

        1,当关键路径只有一条时,缩短任意一个关键活动的时间,将会缩短工程工期,这句话是正确的;

        2,当关键路径有N条时,只有缩短共有的那些条关键路径,才能够缩短工程工期。

手写过程举例,如下截图说明:

9,C

解析:本题考查大根堆的定义。

相关知识点:堆排序,建堆,大根堆,小根堆。

大根堆/小根堆:以数组方式存储的关键字,其中i为父结点,2i为左孩子,2i+1为右孩子,大/小根堆为完全二叉树;

大/小根堆特性:

        1,大/小根堆满足: (大根堆)根>左,右孩子;(小根堆)根<左,右孩子;

        2,递归定义,即:根的左右孩子也需要满足大/小根堆的定义,同1;

建堆:给定一个初始序列A[],共有N个结点,取数组前[n/2](向下取整)个关键字,从A[n/2](向下取整)到数组A[0]对其左右孩子进行比较,如果左右孩子大于父结点则替换;最终对于整个序列,形成了大/小根堆的定义:根大/小于左,右孩子;此过程为建堆。

堆排序: 将给定大/小根堆进行排序,最终形成有序序列;堆排序属于交换排序。

以大根堆为例并手动模拟截图如下:

        1,给定大根堆A[],共有N个关键字;将堆顶元素和堆底元素互换,此时堆底元素为最大值,将其排除在外,把剩下的N-1个元素恢复成大根堆,此为一趟排序;

        2,递归1过程,直到只剩根结点,此时完成堆排序,输出有序序列;

2023/05/24上述纸质版解析有个错误:大根堆进行堆排序,将堆顶元素和堆底元素互换时,堆底元素为最大,进行N-1趟后,形成一个堆底元素最大而堆顶元素最小的有序序列;因为数组为顺序存储,所以堆底元素为数组下标最大的元素,即按照关键字递增的顺序进行排序。

由上述错误引申的一些概念(TIPS):

        1,大根堆进行堆排序形成了数组元素递增的序列,小根堆进行堆排序形成了数组元素递减的序列。

        2,建堆的时间复杂度为O(N);

        3,堆排序的时间复杂度:O(Nlog2 N);其中堆排序的比较次数的时间复杂度为O(N),堆排序比较完后,重新建成大/小根堆的上升过程,时间复杂度为O(log2 N),相乘得到堆排序的总时间复杂度O(Nlog2 N);

        4,堆排序是稳定的。

本题选项解析:

(1)堆是一颗完全二叉树,对;

(2)堆使用顺序存储,对;

(3)大/小根堆满足:根>(<)左右子树; 二叉排序树是左子树<根<右子树,错;

(4)堆中次大值在根的下一层(由题意,堆最少两个元素),对;

选 (1)(2)(4),C。

10,B

解析:本题考查B树的插入。

本题手写过程截图如下:

11,A

解析:本题考查对插入排序和选择排序的理解。

相关知识点:插入排序的定义,选择排序的定义。

插入排序:从序列的第一个元素开始进行插入排序;遍历序列,每次将新关键字插入到前面已经排好序的子序列中,并将大于该关键字的全部后移,形成新的子序列;直到序列整体有序;插入排序分为:直接插入排序(直接插入排序的优化为折半插入排序),SHELL排序(部分有序,逼近逐步有序——选中d,每次按照d将序列分割成子序列进行排序,排序的方式为直插排序;然后缩小d,直到d=1)。

        插入排序中:直插排序时间复杂度为O(N^2),且是稳定的;希尔排序的时间复杂度为O(Nlog2 N),是不稳定的。

选择排序:每次从待排序序列中选择一个最小的放入到第一个元素的位置,将其与第一个元素互换位置;从剩余的序列中找到最小的元素,将其与第一个元素互换;重复之前操作,直到整个序列都有序;选择排序分为简单选择排序和快速排序(枢轴元素pivot,大于枢轴的放右边,小于枢轴的放左边,经过log2 n趟完成排序,每趟时间复杂度为O(n))。

        选择排序中:简单选择排序时间复杂度为O(N^2),且是稳定的;快排时间复杂度为所有排序中最屌的,时间复杂度为O(Nlog2 N),是不稳定的。

答案选项解析:

前提条件:当大部分元素有序时。

(1)当大部分元素都有序,直插排序基本上不用每次从头遍历前面已经排好序的子序列,因为大部分都是有序的,(1)对。

(2)直插排序和选择排序的空间复杂度为O(1),相同,(2)错。

(3)直插排序每次进行插入,移动的次数为O(N)的数量级;而简单选择排序每趟遍历完该序列,仅需要跟待排序序列第一个互换(移动);直插排序移动元素的次数反而比简单选择排序更多,(3)错。

综上,答案选择A。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值