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;为低空智能科技创新提供了强大的数据支持…

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…&#…

动态导出word文件支持转pdf

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

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

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

mysql中与并发相关的问题?

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

使用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…

[机器学习]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…

upload-labs靶场1-19关

第 1 关&#xff08;删除前端js校验&#xff09; 点击第一关&#xff0c;我们可以看到页面上传区可以上传一个图片&#xff0c;我们要上传一个 webshell&#xff0c;这里我们上传一句话木马的 php 点击上传 显示文件不支持上传&#xff0c;这时我们查看源码 查看代码后发现&am…

vue3+vite 引入动画组件库 Inspira UI

关于Inspira UI Inspira UI不是传统的组件库。相反&#xff0c;它是精选的优雅组件集合&#xff0c;您可以轻松将其集成到您的应用程序中。只需选择所需的组件&#xff0c;复制代码&#xff0c;然后自定义以适合您的项目即可。您可以随意使用和修改代码&#xff01; 官网地址…

Go语言启动独立进程

文章目录 问题解决方案1. **将 npc.exe 启动为独立的进程**2. **修改 exec.Command 函数**示例代码解释为什么这样有效注意 问题 在你当前的代码中&#xff0c;调用 exec.Command("XXX.exe") 启动 XXX.exe 程序时&#xff0c;这个程序是由 Go 程序直接启动的。如果 …

计算机网络错题

文章目录 码分复用透明传输差错检测停止-等待协议回退N帧协议CSMA/CD协议以太网交换机Vlanip地址的无分类编制方法ip地址的应用规划ip数据包的发送和转发过程路由信息协议IPI2016201720202022 2.5信道 码分复用 透明传输 差错检测 停止-等待协议 回退N帧协议 CSMA/CD协议 以太网…

使用Docker启用MySQL8.0.11

目录 一、Docker减小镜像大小的方式 1、基础镜像选择 2、减少镜像层数 3、清理无用文件和缓存 4、优化文件复制&#xff08;COPY和ADD指令&#xff09; 二、Docker镜像多阶段构建 1、什么是dockers镜像多阶段构建 1.1 概念介绍 1.2 构建过程和优势 2、怎样在Dockerfil…

Zabbix6.0升级为7.2

Zabbix 7.0 进行了全新升级&#xff0c;本文讲解如何从 6.0 版本升级至最新版本 7.2。在 CentOS 8 上通过RPM 方式安装 Zabbix 服务 一、环境信息 我是CentOS 7安装的服务端&#xff0c;在该机器在通过源码去安装 Zabbix 7.0 版本的话&#xff0c;会比较费劲&#xff0c;因为有…

2024.4 评估大语言模型在医疗行业应用的综合调查

A Comprehensive Survey on Evaluating Large Language Model Applications in the Medical Industry https://arxiv.org/abs/2404.15777 问题 大语言模型&#xff08;LLMs&#xff09;在医疗领域应用广泛&#xff0c;但缺乏专门针对其在医疗应用中有效性、准确性、可用性和…