2009 ~ 2019 年 408【数据结构】大题解析

2009 年

讲解视频推荐:【BOK408真题讲解-2009年(催更就退网版)】

1. 图的应用(10’)

带权图(权值非负, 表示边连接的两顶点间的距离)的最短路径问题是找出从初始顶点到目标顶点之间的一条最短路径。假设从初始顶点到目标顶点之间存在路径,现有一种解决该问题的方法:
① 设最短路径初始时仅包含初始顶点,令当前顶点 u 为初始顶点;
② 选择离 u 最近且尚未在最短路径中的一个顶点 v ,加入到最短路径中,修改当前顶点 u = v ;
③ 重复步骤 ② ,直到 u 是目标顶点时为止。
请问上述方法能否求得最短路径?若该方法可行, 请证明之;否则,请举例说明。

【解析】

2. 线性表的链式表示(15’)

已知一个带有表头结点的单链表,结点结构为:

datalink

假设该链表只给出了头指针 list 。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第 k 个位置上的结点(k 为正整数)。若查找成功, 算法输出该结点的 data 域的值, 并返回 1 ;否则, 只返回 0 。要求:

(1)描述算法的基本设计思想。
(2)描述算法的详细实现步骤。
(3)根据设计思想和实现步骤, 采用程序设计语言描述泉法(使用 C 、C++ 或 Java 语言实现),关键之处请给出简要注释。

【解析】


2010 年

讲解视频推荐:【BOK408真题讲解-2010年】

1. 散列表(10’)

将关键字序列(7, 8, 30, 11, 18 , 9, 14)散列存储到散列表中。散列表的存储空间是一个下标从 0 开始的一维数组,散列函数为:H(key) = (key × 3) MOD 7 ,处理冲突采用线性探测再散列法,要求装填(载)因子为 0.7 。
(1)请画出所构造的散列表。
(2)分别计算等概率情况下查找成功和查找不成功的平均查找长度。

【解析】

2. 线性表的顺序表示(13’)

设将 n(n > 1)个整数存放到一维数组 R 中。试设计一个在时间和空间两方面都尽可能高效的算法,将 R 中保存的序列循环左移 p(0 < p < n)个位置,即将 R 中的数据由(x0, x1, …, xn-1)变换为(xp, xp+1, …, xn-1, x0, x1, …, xp-1)。要求:

(1)给出算法的基本设计思想。
(2)根据设计思想,采用 C 、C++ 或 Java 语言描述算法,关键之处给出注释。
(3)说明你所设计算法的时间复杂度和空间复杂度。

【解析】


2011 年

讲解视频推荐:【BOK408真题讲解-2011年】

1. 图的应用(8’)

已知有 6 个顶点(顶点编号为 0 ~ 5 ) 的有向带权图 G ,其邻接矩阵 A 为上三角矩阵,按行为主序(行优先)保存在如下的一维数组中。

4654333

要求:
(1)写出图 G 的邻接矩阵 A 。
(2)画出有向带权图 G 。
(3)求图 G 的关键路径,并计算该关键路径的长度。

【解析】



2. 线性表的顺序表示(15’)

一个长度为 L(L ≥ 1)的升序序列 S ,处在第 ⌈L / 2⌉ 个位置的数称为 S 的中位数。例如,若序列 S1 = (11, 13, 15, 17, 19) ,则 S 的中位数是 15 。两个序列的中位数是含它们所有元素的升序序列的中位数。例如,若 S2 = (2, 4, 6, 8, 20) ,则 S1 和 S2 的中位数是 11 。现有两个等长升序序列 A 和 B ,试设计一个在时间和空间两方面都尽可能高效的算法,找出两个序列 A 和 B 的中位数。要求:
(1)给出算法的基本设计思想。
(2)根据设计思想,采用 C 、C++ 或 Java 语言描述算法, 关键之处给出注释。
(3)说明你所设计算法的时间复杂度和空间复杂度。

【解析】



2012 年

讲解视频推荐:【BOK408真题讲解-2012年】

1. 树与二叉树的应用(10’)

设有 6 个有序表 A, B, C, D, E, F ,分别含有 10 ,35, 40, 50, 60 和 200 个数据元素,各表中元素按升序排列。要求通过 5 次两两合并,将 6 个表最终合并成 1 个升序表,并在最坏情况下比较的总次数达到最小。请回答下列问题。
(1)给出完整的合并过程, 并求出最坏情况下比较的总次数。
(2)根据你的合并过程,描述 n(n ≥ 2)个不等长升序表的合并策略,并说明理由。

【解析】


2. 线性表的链式表示(13’)

假定采用带头结点的单链表保存单词,当两个单词有相同的后缀时, 则可共享相同的后缀存储空间。例如,“loading” 和 “being” 的存储映像如下图所示。

设 str1 和 str2 分别指向两个单词所在单链表的头结点, 链表结点结构为:

datanext

请设计一个时间上尽可能高效的算法, 找出由 str1 和 str2 所指的两个链表共同后缀的起始位置(如图中字符 i 所在结点的位置 p ) 。要求:
(1)给出算法的基本设计思想。
(2)根据设计思想, 采用 C 或 C++ 或 Java 语言描述算法, 关键之处给出注释。
(3)说明你所设计算法的时间复杂度。

【解析】

(3)时间复杂度为 O(len1 + len2) 或 O(max(len1, len2)) ,其中 len1 、len2 分别为两个链表的长度。

2013 年

讲解视频推荐:【BOK408真题讲解-2013年】

1. 线性表的顺序表示(13’)

已知一个整数序列 A = (a0, a1,…, an-1) ,其中 0 ≤ ai < n(0 ≤ i < n)。若存在 ap1 = ap2 = ··· = apm = x 且 m > n/2(0 ≤ pk < n, 1 ≤ k ≤ m),则称 x 为 A 的主元素。例如 A = (0, 5, 5, 3, 5, 7, 5, 5) ,则 5 为主元素; 又如 A = (0, 5, 5, 3, 5, 1, 5, 7) ,则 A 中没有主元素。假设 A 中的 n 个元素保存在一个一维数组中, 请设计一个尽可能高效的算法, 找出 A 的主元素。若存在主元素,则输出该元素;否则输出 -1 。要求:

(1)给出算法的基本设计思想。
(2)根据设计思想,采用 C 、C++ 或 Java 语言描述算法, 关键之处给出注释。
(3)说明你所设计算法的时间复杂度和空间复杂度。

【解析】

(1)给出算法的基本设计思想:算法的策略是从前向后扫描数组元素,标记出一个可能成为主元素的元素 Num 。然后重新计数, 确认 Num 是否是主元素。

(3)说明算法复杂性:参考答案中实现的程序的时间复杂度为 O(n) ,空间复杂度为 O(1) 。

2. 顺序查找和折半查找(10’)

设包含 4 个数据元素的集合 S = {“do”, “for”, “repeat”, ''while"} ,各元素的查找概率依次为 P1 = 0.35 ,p2 = 0.15 ,p3 = 0.15 ,p4 = 0.35 。将 S 保存在一个长度为 4 的顺序表中, 采用折半查找法, 查找成功时的平均查找长度为 2.2 。请回答:

(1)若采用顺序存储结构保存 s ,且要求平均查找长度更短,则元素应如何排列? 应使用何种查找方法?查找成功时的平均查找长度是多少?
(2)若采用链式存储结构保存 S ,且要求平均查找长度更短,则元素应如何排列? 应使用何种查找方法?查找成功时的平均查找长度是多少?

【解析】

2014 年

讲解视频推荐:【BOK408真题讲解-2014年】

1. 树与二叉树的应用(13’)

二叉树的带权路径长度(WPL)是二叉树中所有叶结点的带权路径长度之和。给定一棵二叉树 T ,采用二叉链表存储,结点结构如下:

leftweightright

其中叶结点的 weight 域保存该结点的非负权值。设 root 为指向 T 的根结点的指针,请设计求 T 的 WPL 的算法, 要求:
(1)给出算法的基本设计思想。
(2)使用 C 或 C++ 语言,给出二叉树结点的数据类型定义。
(3)根据设计思想, 采用 C 或 C++ 语言描述算法, 关键之处给出注释。

【解析】


2. 图的应用(10’)

某网络中的路由器运行 OSPF 路由协议,题 42 表是路由器 R1 维护的主要链路状态信息(LSI),题 42 图是根据题 42 表及 R1 的接口名构造出来的网络拓扑。

请回答下列问题。
(1)本题中的网络可抽象为数据结构中的哪种逻辑结构?
(2)针对题 42 表中的内容,设计合理的链式存储结构,以保存题 42 表中的链路状态信息(LSI)。要求给出链式存储结构的数据类型定义,并画出对应题 42 表的链式存储结构示意图(示意图中可仅以 ID 标识结点)。
(3)按照迪杰斯特拉(Dijkstra)算法的策略,依次给出 R1 到达题 42 图中子网 192.1.x.x 的最短路径及费用。

【解析】



2015 年

讲解视频推荐:【BOK408真题讲解-2015年】

1. 线性表的链式表示(15’)

用单链表保存 m 个整数,结点的结构为:

datalink

且 |data| ≤ n(n 为正整数) 。现要求设计一个时间复杂度尽可能高效的算法,对于链表中 data 的绝对值相等的结点,仅保留第一次出现的结点而删除其余绝对值相等的结点。例如,若给定的单链表 head 如下:

要求:
(1)给出算法的基本设计思想。
(2)使用 C 或 C++ 语言,给出单链表结点的数据类型定义。
(3)根据设计思想,采用 C 或 C++ 语言描述算法,关键之处给出注释。
(4)说明你所设计算法的时间复杂度和空间复杂度。

【解析】

2. 图的存储及基本操作(8’)

已知含有 5 个顶点的图 G 如下图所示。请回答下列问题:

(1)写出图 G 的邻接矩阵 A(行、列下标从 0 开始)。
(2)求 A2 ,矩阵 A2 中位于 0 行 3 列元素值的含义是什么?
(3)若已知具有 n(n ≥ 2)个顶点的图的邻接矩阵为 B ,则 Bm(2 ≤ m ≤ n)中非零元素的含义是什么?

【解析】

(1)图 G 的邻接矩阵 A 如下:

2016 年

讲解视频推荐:【BOK408真题讲解-2016年】

1. 树(8’)

如果一棵非空 k(k ≥ 2)叉树 T 中每个非叶结点都有 K 个孩子,则称 T 为正则 K 叉树。请回答下列问题并给出推导过程。

(1)若 T 有 m 个非叶结点,则 T 中的叶结点有多少个?
(2)若 T 的高度为 h(单结点的树 h = 1),则 T 的结点数最多为多少个?最少为多少个?

【解析】

2. 交换排序(15’)

已知由 n(n ≥ 2)个正整数构成的集合 A = {ak | 0 ≤ k < n},将其划分为两个不相交的子集 A1 和 A2 ,元素个数分别是 n1 和 n2 ,A1 和 A2 中元素之和分别为 S1 和 S2 。设计一个尽可能高效的划分算法, 满足 |n1 - n2| 最小且 |S1 - S2| 最大。要求:

(1)给出算法的基本设计思想。
(2)根据设计思想,采用 C 或 C++ 语言描述算法,关键之处给出注释。
(3)说明你所设计算法的平均时间复杂度和空间复杂度。

【解析】


(3)算法的平均时间复杂度和空间复杂度:本参考答案给出的算法平均时间复杂度是 O(n) ,空间复杂度是 O(1) 。

2017 年

讲解视频推荐:【BOK408真题讲解-2017年】

1. 二叉树的遍历(15’)

请设计一个算法,将给定的表达式树(二叉树)转换为等价的中缀表达式(通过括号反映操作符的计算次序)并输出。例如,当下列两棵表达式树作为算法的输入时,输出的等价中缀表达式分别为:(a+b)×(c×(-d)) 和 (a×b)+(-(c-d)) 。

二叉树结点定义如下:

typedef struct node{char data[10];		//存储操作数或操作符struct node *left, *right;
}BTree;

要求:
(1)给出算法的基本设计思想。
(2)根据设计思想,采用 C 或 C++ 语言描述算法,关键之处给出注释。

【解析】

2. 图的应用(8’)

使用 Prim(普里姆)算法求带权连通图的最小(代价)生成树(MST)。请回答下列问题。

(1)对下图 G ,从顶点 A 开始求 G 的 MST ,依次给出按算法选出的边。

(2)图 G 的 MST 是唯一的吗?
(3)对任意的带权连通图,满足什么条件时,其 MST 是唯一的?

【解析】

2018 年

讲解视频推荐:【BOK408真题讲解-2018年】

1. 线性表的顺序表示(13’)

给定一个含 n(n ≥ 1)个整数的数组,请设计一个在时间上尽可能高效的算法,找出数组中未出现的最小正整数。例如,数组 {-5 , 3, 2, 3} 中未出现的最小正整数是 1 ,数组 {1, 2, 3} 中未出现的最小正整数是 4 。要求:

(1)给出算法的基本设计思想。
(2)根据设计思想,采用 C 或 C++ 语言描述算法,关键之处给出注释。
(3)说明你所设计算法的时间复杂度和空间复杂度。

【解析】


2. 图的应用(12’)

拟建设一个光通信骨干网络连通 BJ 、CS 、XA 、QD 、JN 、NJ 、TL 和 WH 八个城市,题 42 图中无向边上的权值表示两个城市间备选光纤的铺设费用。
请回答下列问题。

(1)仅从铺设费用角度出发,给出所有可能的最经济的光纤铺设方案(用带权图表示),并计算相应方案的总费用。
(2)题 42 图可采用图的哪种存储结构?给出求解问题(1)所使用的算法名称。
(3)假设每个城市采用一个路由器按(1)中得到的最经济方案组网, 主机 H1 直接连接在 TL 的路由器上,主机 H2 直接连接在 BJ 的路由器上。若 H1 向 H2 发送一个 TTL = 5 的 IP 分组,则 H2 是否可以收到该 IP 分组?

【解析】

2019 年

讲解视频推荐:【BOK408真题讲解-2019年】

1. 线性表的链式表示(13’)

设线性表 L = (a1, a2, a3, … , an-2, an-1, an) 采用带头结点的单链表保存,链表中的结点定义如下:

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

请设计一个空间复杂度为 O(1) 且时间上尽可能高效的算法,重新排列 L 中的各结点,得到线性表 L’ = (a1, an, a2, an-1, a3, an-2, …)。要求:
(1)给出算法的基本设计思想。
(2)根据设计思想,采用 C 或 C++ 语言描述算法,关键之处给出注释。
(3)说明你所设计的算法的时间复杂度。

【解析】


2. 队列(10’)

请设计一个队列,要求满足:① 初始时队列为空;② 入队时,允许增加队列占用空间;③ 出队后,出队元素所占用的空间可重复使用,即整个队列所占用的空间只增不减;④ 入队操作和出队操作的时间复杂度始终保待为 O(1) 。请回答下列问题:

(1)该队列是应选择链式存储结构,还是应选择顺序存储结构?
(2)画出队列的初始状态,并给出判断队空和队满的条件。
(3)画出第一个元素入队后的队列状态。
(4)给出入队操作和出队操作的基本过程。

【解析】


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/64575.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

时空AI赋能低空智能科技创新

随着人工智能技术的不断进步&#xff0c;时空人工智能&#xff08;Spatio-Temporal AI&#xff0c;简称时空AI&#xff09;正在逐渐成为推动低空经济发展的新引擎。时空AI结合了地理空间智能、城市空间智能和时空大数据智能&#xff0c;为低空智能科技创新提供了强大的数据支持…

SamOut 任意长度推理空间不变

项目地址 import numpy as np import pandas as pd import torch from tqdm import tqdmfrom infer_model import SamOutdef load_model_and_voc(device"cpu"):voc pd.read_pickle("total_voc.pkl")net SamOut(len(voc["voc"]), 1024 512, 64…

17.springcloud_openfeign之扩展组件一

文章目录 一、前言二、默认约定配置FeignAutoConfigurationCachingCapabilityFeignCachingInvocationHandlerFactoryFeignJacksonConfiguration熔断器配置FeignCircuitBreakerTargeterFeignCircuitBreaker.Builder FeignClientsConfigurationCircuitBreakerFactory 总结 一、前…

Python读取Excel批量写入到PPT生成词卡

一、问题的提出 有网友想把Excel表中的三列数据&#xff0c;分别是&#xff1a;单词、音标和释义分别写入到PPT当中&#xff0c;每一张PPT写一个单词的内容。这种批量操作是python的强项&#xff0c;尤其是在办公领域&#xff0c;它能较好地解放双手&#xff0c;读取Excel表后…

Proteus(8.15)仿真下载安装过程(附详细安装过程图)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、Proteus是什么&#xff1f; 二、下载链接 三、下安装步骤 1.解压&#xff0c;有键管理员运行 2.点击Next&#xff0c;进行下一步 3.勾选I accept…&#…

防止私接小路由器

电脑获取到IP地址不是DHCP服务器的IP地址段&#xff0c;导致整个公司网络瘫痪&#xff0c;这些故障现象通常80%原因是私接小路由器导致的&#xff0c;以下防止私接小路由器措施。 一、交换机配置DHCP Sooping DHCP snooping是一种DHCP安全特性&#xff0c;用于防止非法设备获…

动态导出word文件支持转pdf

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、功能说明二、使用步骤1.controller2.工具类 DocumentUtil 导出样式 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff…

紧固件设计之——开槽六角头防脱出杆螺栓仿真APP

按照产品形态分类&#xff0c;紧固件通常包括以下12类&#xff1a;螺栓、螺柱、螺钉、螺母、自攻螺钉、木螺钉、垫圈、挡圈、销、铆钉、焊钉、组合件与连接副&#xff0c;是一类用于连接和固定各种构件和零部件的重要机械零件&#xff0c;可确保机械装置或设备结构的牢固和稳定…

【Python装饰器】编写一个装饰器,并将其放到适当的位置,目的是让代码 1 秒钟打印一个结果

import timedef fib():back1, back2 0, 1def func():nonlocal back1, back2back1, back2 back2, back1 back2print(back1, end )return funcdef get_fib(n):f fib()for i in range(n):f()n int(input("请输入需要获取的斐波那契数&#xff1a;"))get_fib(n) imp…

mysql中与并发相关的问题?

今天我们来聊聊 MySQL 中与并发相关的一些问题。作为一名资深 Python 开发工程师&#xff0c;我觉得这些问题不仅关乎数据库的稳定性和数据的一致性&#xff0c;更与我们的代码实现和业务逻辑密切相关。 尤其是在高并发环境下&#xff0c;如何保证数据的一致性&#xff0c;如何…

【Mac】安装 PaddleOCR

环境&#xff1a;Mac M1 芯片 1、安装 Anaconda 安装较为简单&#xff0c;直接在 Anaconda 官网 下载pkg文件&#xff0c;根据向导提示完成安装。 Anaconda 用于搭建 Python 虚拟环境&#xff0c;目的是为了避免与之前环境安装库的版本冲突&#xff0c;另外 paddle 对Python…

使用k6进行kafka负载测试

1.安装环境 kafka环境 参考Docker搭建kafka环境-CSDN博客 xk6-kafka环境 ./xk6 build --with github.com/mostafa/xk6-kafkalatest 查看安装情况 2.编写脚本 test_kafka.js // Either import the module object import * as kafka from "k6/x/kafka";// Or in…

服务器ip:port服务用nginx 域名代理

ubuntu 1、安装nginx # 更新软件包列表 sudo apt update# 安装Nginx sudo apt install nginx -y# 检查Nginx状态 sudo systemctl status nginx2、创建存放域名 SSL证书的目录 # 创建目录 sudo mkdir -p /etc/nginx/ssl# 复制证书文件到该目录 sudo cp play.cn_bundle.crt /et…

[机器学习]XGBoost(3)——确定树的结构

XGBoost的目标函数详见[机器学习]XGBoost&#xff08;2&#xff09;——目标函数&#xff08;公式详解&#xff09; 确定树的结构 之前在关于目标函数的计算中&#xff0c;均假设树的结构是确定的&#xff0c;但实际上&#xff0c;当划分条件不同时&#xff0c;叶子节点包含的…

springboot444新冠物资管理系统的设计与实现(论文+源码)_kaic

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装新冠物资管理系统软件来发挥其高效地信息处理的作用&#x…

Javascript-web API-day02

文章目录 01-事件监听02-点击关闭广告03-随机点名案例04-鼠标经过或离开事件05-可点击的轮播图06-小米搜索框07-键盘类型事件08-键盘事件-发布评论案例09-focus选择器10-评论回车发布11-事件对象12-trim方法13-环境对象14-回调函数15-tab栏切换 01-事件监听 <!DOCTYPE html…

使用xjar 对Spring-Boot JAR 包加密运行

1 Xjar 介绍 Spring Boot JAR 安全加密运行工具&#xff0c;同时支持的原生JAR。 基于对JAR包内资源的加密以及拓展ClassLoader来构建的一套程序加密启动&#xff0c;动态解密运行的方案&#xff0c;避免源码泄露或反编译。 功能特性 无需侵入代码&#xff0c;只需要把编译好的…

深度学习的下一站:解锁人工智能的新边界

引言&#xff1a;新边界的呼唤 深度学习的诞生&#xff0c;犹如人工智能领域的一次革命&#xff0c;激发了语音助手、自动驾驶、智能医疗等前沿技术的飞速发展。然而&#xff0c;面对现实世界的复杂性&#xff0c;现有的深度学习模型仍然存在数据依赖、可解释性差、环境适应力不…

基于DockerCompose搭建Redis主从哨兵模式

linux目录结构 内网配置 哨兵配置文件如下&#xff0c;创建3个哨兵配置文件 # sentinel26379.conf sentinel26380.conf sentinel26381.conf 内容如下 protected-mode no sentinel monitor mymaster redis-master 6379 2 sentinel down-after-milliseconds mymaster 60000 s…

Vite 与 Webpack 的区别

在前端开发中&#xff0c;构建工具是不可或缺的&#xff0c;Webpack 和 Vite 是当前最流行的选择之一。尽管它们的目标相似&#xff0c;但在实现方式和开发体验上却有显著差异。本文将探讨 Vite 和 Webpack 的主要区别&#xff0c;以便于根据项目需求选择合适的工具。 1. 构建…