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

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

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

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

1.设 n 是描述问题规模的非负整数,下列程序段的时间复杂度是 ()

x=0;

while (n>= (x+1)* (x+1))

        x=x+l;

A. o (logn)         B. o (√n)         C.o(n)         D. o (n^2)

2.若将一棵树T转化为对应的二叉树 BT,则下列对 BT 的遍历中,其遍历序列与T的后根遍历序列相同的是 ( )。

A.先序遍历         B.中序遍历         C. 后序遍历         D.按层遍历

3.对 n 个互不相同的符号进行哈夫曼编码。若生成的哈夫曼树共有 115 个结点,则 n 的值是( )。

A.56         B.57         C.58         D.60

4.在任意一棵非空平衡二叉树 (AVL树) T1 中,删除某结点v之后形成平衡二叉树 T2,再将v插入 T2 形成平衡二又树 T3。下列关于 T1与T3 的叙述中,正确的是( )。

  1. 若 V是 T1 的叶结点,则 T1 与 T3 可能不相同
  2. 若 V不是 T1 的叶结点,则 T1 与 T3 一定不相同
  3. 若V不是 T1 的叶结点,则 T1 与 T3 一定相同

A.(1)         B.(2)         C.(1)(2)         D.(1)(3)

5.下图所示的 AOE 网表示一项包含 8 个活动的工程活动 d 的最早开始时间和最迟开始时间分别是 ( )。

A.3和7         B.12和12         C.12和14         D.15和15

6.用有向无环图描述表达式(x+y) * ((x+y) /x),需要的顶点个数至少是 ( )。

A.5                 B.6                 C.8                 D.9

7.选择一个排序算法时,除算法的时空效率外,下列因素中,还需要考虑的是 ( )。

I.数据的规模 II.算法的稳定性 III.数据的存储方式 IV.数据的初始状态

A.仅III                 B.仅I、II                 C.仅II、III、IV                 D. I、II、III、IV

8.现有长度为 11 且初始为空的散列表 HT,散列函数是H (key) =key%7,采用线性探查(线性探测再散列) 法解决冲突;将关键字序列 87,40,30,6,11,22,98,20 依次插入到 HT 后,HT 查找失败的平均查找长度是( )。

A. 4                        B. 5. 25                    C. 6                     D. 6. 29

9,设主串 T=“abaabaabcabaabc”模式串 S=“abaabc”,采用 KMP 算法进行模式匹配,到匹配成功时为止,在匹配过程中进行的单个字符间的比较次数是 ( )。

A.9                         B.10                         C.12                         D.15

10.排序过程中,对尚未确定最终位置的所有元素进行一遍处理称为一“趟”。下列序列中,不可能是快速排序第二趟结果的是() 。

A. 5,2,16,12,28,60,32,72         B. 2,16,5,28,12,60,32,72

C.2,12,16,5,28,32,72,60         D. 5,2,12,28,16,32,72, 60

11.设外存上有 120 个初始归并段,进行 12 路归并时,为实现最佳归并,需要补充的虚段个数是( )。

A.1                         B.2                         C.3                         D.4

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

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

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

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

答案:1~5 BBCAC              6~11 ADCBDB

答案解析:

1,B

解析:本题考查程序的时间复杂度O(n)。

相关知识点:

时间复杂度:程序循环体内,执行次数最多的语句的执行次数,一般用O(n)表示,n表示次数。

求时间复杂度的步骤:

        1、首先找到执行次数最多的基本语句,一般都是在最内层循环的循环体内;

        2、查看该基本语句的执行次数;

        3、对于并列循环,则把复杂度相加,得出最后该程序的时间复杂度。

        TIPS:保证基本语句执行次数的函数中的最高次幂正确即可,可以忽略所有低次幂、最高次幂的系数。

本题手写过程截图如下:

本题需要关注的是:题目设置了一个常量n;这个常量可不是我们O(n)中的程序执行次数n,而是一个普通的常数;真正的次数k,是我们当前程序的执行次数,也就是第k次执行时,k的取值具体是如何计算的;求出的此时k的值范围,就是我们当前计算次数的时间复杂度。

2,B

解析:本题考查树和二叉树的转换。

相关知识点:

牢记如下这张老图(2020,2021年答案解析均有该题):(记住即可;考研成功的秘诀就是:反复,多次和重复)

        树                        森林                        二叉树

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

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

本题选B,无需手写答案。

3,C

解析:本题考查哈夫曼树的性质。

相关知识点:

(本题用到的)

        哈夫曼树(哈夫曼树是二叉树),因为其构成方式,只有0个分叉和结点为2个分叉的结点,没有分叉为1的结点;

        一棵二叉树的结点总数N = 分叉为0的结点+分叉为1的结点+分叉为2的结点;

                                                = 分叉为1的结点个数 + 2*分叉为2的结点个数 +1;(即结点数 = 分叉数 +1)

        哈夫曼树的N个带权结点均为叶子结点

(额外补充回忆知识点) 

        哈夫曼树的构造:

                1,将N个结点分别作为一颗只有根结点的二叉树,构成一个森林F;

                2,构造一个新结点,新结点是森林F中选取俩棵根结点权值最小的二叉树作为新结点的左右子树,结点的权值为左右子树根结点权值之和;然后递归步骤2(重复做步骤2);

                3,直到森林F中仅剩一颗树为止;此时所有的N个结点均为叶子结点,此时叶子结点的全部带权路径之和WPL,必然为最小,此棵树即为哈夫曼树。

                TIPS:哈夫曼树是不唯一的,可能有多种构造形态,但是哈夫曼树的WPL一定是唯一且最小的。

本题手写过程截图如下:

4,A

解析:本题考查平衡二叉树的定义以及插入和删除平衡二叉树的操作,并能够举出反例证明语句的错误原因。

相关知识点:

平衡二叉树的定义:左右子树的高度之差绝对值不超过1,即可选值为:1,-1,0;该定义是递归的,也就是说左右子树的子树也分别满足如上定义;直到整颗二叉树都达到平衡二叉树的定义。

平衡二叉树插入与删除,分别遵循LL,LR,RL,RR四种方式(其中插入的4种方式,和删除的4种方式略有不同);可关注王道视频平衡二叉树的插入删除小节详细学习。

如果一棵树是二叉平衡排序树,删除一个结点后又将其重新添加,得到的新二叉平衡树,可能与原树相同,也可能不同。本题手写过程截图如下:

5,C

解析:本题考查AOE网的最早开始时间和最迟开始时间。

相关知识点:

AOE网:ACTIVITY ON EDGE NETWORK,边表示网络。

AOE网中的一些常用概念:顶点最早开始时间,顶点最迟开始时间,边的最早开始时间,边的最迟开始时间,时间余量,关键路径等。

    表示方法:   

         顶点的最早开始时间:Vertex(顶点),early(adj,早的),用V(e)表示;

        顶点的最迟开始时间:late(adj,迟的),用V(l)表示;

        边的最早开始时间:Edge(边),用E(e)表示;

        边的最迟开始时间:用E(l)表示;

        时间余量:边的最迟开始时间 E(l)- 边的最早开始时间 E(e);

        关键路径:时间余量为0的路径所构成的总路径(可能有多条路径),就是关键路径。

    定义:

        顶点的最早开始时间V(e):前一个顶点的时间+指向该条路径的时间;如有多条路径指向当前顶点,取多条路径的最大值;

        顶点的最晚开始时间V(l):可逆推,确定顶点最早开始时间后,得到最后一个顶点的最早开始时间,同时也就是这个顶点的最晚开始时间;从最后一个顶点开始逆推:求某一个顶点的最晚开始时间,就是当前顶点所指向的下一个顶点的最晚开始时间 - 指向的下一个顶点的边的权值时间;如有当前顶点指向多个顶点,取各个最晚开始时间的最小值;

        边的最早开始时间E(e):边的最早开始时间 = 边的尾部所连接的顶点的最早开始时间;

        边的最晚开始时间E(l):边的最晚开始时间 = 边所指向的顶点的最晚开始时间 - 当前边的权值时间 ;

本题手写过程截图如下:

6,A

解析:本题主要考查有向无环图的定义。

相关知识点:

有向无环图指的是一个无回路的有向图。

王道视频真题讲解中有句话: 如果要快速算出一个表达式的有向无环图顶点最少,只需要查看有几个不同的字母和运算符号(括号不算)即可。

本题手写过程截图如下:

7,D

解析:本题考查影响排序算法的因素。

相关知识点:

影响排序算法的因素:

        1,时间复杂度,空间复杂度;

        2,数据序列的规模(以少许几位或者以TB为单位的,使用的算法大概率是不同的,比如外部排序,排序的数据量都特别大,因为是从外存调入到内存中去的,甚至可能以TB为单位);

        3,算法的稳定性;

        4,数据的存储方式:顺序存储,链式存储;

        5,数据序列的初始状态。

本题选D,不需要手写过程。

8,C

解析:本题考查的是散列查找,查找失败的查找长度计算。

相关知识点:

散列查找:也叫哈希查找,用hash函数来定位所要将关键字存放的位置。

散列查找的影响因素: 散列函数,冲突的处理办法,装填因子α等。

        散列函数:散列函数选择的好,可以让关键字不会发生冲突,在表中合理存放;

        冲突处理:当不同关键字通过散列函数映射到表中的同一个位置时,该现象称为冲突;为了避免冲突,有以下优化方法:拉链法——将冲突的数据依次用链表指针链接展示;开放定址法——

当映射到同一个位置时,可用开放定址法中线性探测法的d=0,1,2,3,4,.....等进行往后映射,也可用开放定址法中的平方探测法d=0,+1,-1,+2,-2,......等进行映射;再散列法——将冲突的数据,在用另一个(或多个)散列函数进行映射;

        装填因子α:表中关键字的数量 / 表长  ; α越大,表示该表被填充的越满。

        查找成功的查找长度:查找成功的每个元素概率相等,均为1/n;查找成功代表每次对比若干次就找到了该关键字;因此查找成功的查找长度 = 每个关键字的对比次数之和 / n ;

        查找失败的查找长度:每个关键字对比的次数之和/散列函数映射的值m(h(key)=key%m)。

本题手写过程截图如下:

 

9,B

解析:本题主要考查KMP算法。

相关知识点:

KMP算法进行模式匹配关键点:主串标识符i不变,模式串标识符j回退;每次当主串i的某个位置发送不适配现象,i不动,将模式串标识符j回退到某一个位置进行重新对比;如果模式串回退到位置0,将i和j 均++即可。

本题手写过程截图如下:

 10,D

解析:本题考查快速排序的思想以及过程。

相关知识点:

快速排序基本思想:每次选取一个枢轴元素,然后界定low,high的位置,一趟排序完成后,以枢轴元素为分界点——枢轴元素左边的都小于枢轴元素,枢轴元素右边的都大于枢轴元素;枢轴元素放到low=high的位置处。

快速排序属于交换排序;快速排序的代码段分两块:

        1,划分枢轴,low,high位置的递归函数;

        2,确定枢轴元素位置的partition函数块;

要熟练掌握默写快速排序的算法,如果考试考到排序,可无脑用之,必有分。

要熟练掌握默写快速排序的算法,如果考试考到排序,可无脑用之,必有分。

要熟练掌握默写快速排序的算法,如果考试考到排序,可无脑用之,必有分。

本题手写过程截图如下:

11,B

解析:本题考查k路归并,当归并段不完全时,所需要添加的虚段数。

相关知识点:

最佳归并树:k叉归并的最佳归并树一定是一颗严格k叉树,即树中只有度数为k,0的结点。

哈夫曼树是一颗严格二叉树,即树中只有度为0和度为2的结点。

 本题手写过程截图如下:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值