408真题

这是一份关于数据结构历年考试的真题解析,涵盖了2016年至2019年的选择题和综合题,涉及哈夫曼编码、二叉树遍历、线性探查再散列法、快速排序等多个知识点。解析详细,包括算法的时间复杂度和空间复杂度分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据结构

2019年

选择题

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

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

解析: n > = ( x + 1 ) 2 n>=(x+1)^2 n>=(x+1)2,则 x + 1 < = n x+1<=\sqrt{n} x+1<=n

  • A. O ( l o g   n ) O(log\space n) O(log n)
  • B. O ( n 1 / 2 ) O(n^{1/2}) O(n1/2)
  • C. O ( n ) O(n) O(n)
  • D. O ( n 2 ) O(n^2) O(n2)

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

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

解析:

二叉树 先序 中序
先根 后根
森林 先序 后序

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

  • A.56
  • B.57
  • C.58
  • D.69

解析:有n个数,生成2n-1个哈夫曼结点;有n-1个度为2的结点。

4.在任意一棵非空平衡二叉树(AVL树)T 1 _1 1中,删除某结点v后形成平衡二叉树T 2 _2 2,再将v插入T 2 _2 2形成平衡二叉树T 3 _3 3。下列关于T 1 _1 1与T 3 _3 3的叙述中,正确的是
I.若v是T 1 _1 1的叶结点,则T 1 _1 1与T 3 _3 3可能不相同
II.若v不是T 1 _1 1的叶结点,则T 1 _1 1与T 3 _3 3一定不相同
III.若v不是T 1 _1 1的叶结点,则T 1 _1 1与T 3 _3 3一定相同

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

解析:
对于I:
在这里插入图片描述
若删除3,则再插入3,二叉树前后不变
对于II:
在这里插入图片描述

对于III:
在这里插入图片描述
5.下图所示的AOE网表示一项包含8个活动的工程,活动d的最早开始时间和最迟开始时间分别是
在这里插入图片描述

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

解析:
a、b、c都完成才能开始执行d,所以最早开始为8+4=12;
现在计算完成6的时间:
完成1、2、4、6花16个时间
完成1、2、5、6花18个时间
完成1、3、2、4、6花25个时间
完成1、3、2、5、6花27个时间
完成1、3、5、6花27个时间
所以,完成6的时间应该取最大的时间27,再从g=6,d=7反推到d,得27-6-7=14

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

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

解析:表达式共有x,y,+,*,/五种符号,如果每个符号可以装进一个顶点内,则需要5个顶点
在这里插入图片描述
7.选择一个排序算法时,除算法的时空效率外,下列因素中,还需要考虑的是
I.数据的规模  II.数据的存储方式
III.算法的稳定性  IV.数据的初始状态

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

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

  • A.4
  • B.5.25
  • C.6
  • D.6.29

解析:
在这里插入图片描述
假如查找0,算出在0的位置,对比后发现是98而非0,继续往右探测,对比到8的位置,发现为空,停止对比,共对比9次(即0,1,2,3,4,5,6,7,8);
假如查找1,算出在1的位置,对比后发现是22而非1,一直往右对比到8的位置,发现为空,停止对比,共对比8次(1,2,3,4,5,6,7,8);
假如查找2,……,共对比7次;
……
假如查找6,……,共对比3次;
以上查找总共失败了9+8+7+……+3=42次
因为函数 % 7 \% 7 %7,计算的范围只能是0~6的范围,所以7个数据,共比较失败了42次,查找失败的平均查找长度42/7=6次

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

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

解析:
子串序号:从1开始编号
next值:第1位写0,第2位写1,第n位看n-1的最大匹配长度,再加1;
nextval值:第1位为0,第2位与第1位相同则为0,否则为1;第3位看它的next值,定位到next值对应的序号的字符,若两者不同,则nextval的值就是字符本身的next值;如果两者相同,填入next值对应序号的nextval;

注:若序号从0开始,则以上值都相应减1
在这里插入图片描述
第一次比较了6次,发现a与c不匹配:
在这里插入图片描述
第二次从序号6开始比较(子串使用next值跳到3的位置),7,8,9比较完成后匹配,共比较4次:
在这里插入图片描述
共比较6+4=10次

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

解析:
快排的思路是选一个枢轴,小的放枢轴左边,大的放枢轴右边。
A的第一趟枢轴是72、第二趟是28
B的第一趟枢轴是72、第二趟是2
C的第一趟枢轴是28、第二趟是2和32

综合题

41.设线性表L=(a 1 _1 1,a 2 _2 2,a 3 _3 3,…,a n − 2 _{n-2} n2,a n − 1 _{n-1} n1,a n _n n)采用带头结点的单链表保存,链表中结点定义如下:

typedef struct node{
   
	int data;
	struct node*next;
}NODE;

请设计一个空间复杂度为 O ( 1 ) O(1) O(1)且时间上尽可能高效的算法,重新排列L中的各结点,得到线性表L`=(a 1 _1 1,a n _n n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值