数据结构-分析期末选择题考点(串、数组)

竹月光中诗世界

松风影里酒生涯

目录

 串的常见考法(一)BF算法

 串的常见考法(二)KMP求 next数组

串的常见考法(三)串的概念及性质

串的常见考法(四)给出主串求子串数量

数组的常见考法(一)计算二维数组中的某个空间地址

 数组的常见考法(二)二维数组下标的计算

数组的常见考法(三)给出表达式求个数 

契子


承接上回,我们来复习串这一章的内容 ~

说到,其实也不难,不过考点分布算是有点多。这里我们依旧是以题型进行分析:

<1> BF算法:一般考主串在哪个位置与子串匹配 (大概率)

<2> KMP算法:给出一个串求其 next 数组 (大概率)

<3> 串的概念以及性质(比如说特殊线性表,存储的数据元素是字符)

<4>给出一个主串子串数量

串的大概考点便是以上这些,我们再来聊一聊数组
考数组的话,肯定是不会给你一维数组的,要考也是考二维,常以计算一个二维数组中的某个空间地址出题

<1>计算二维数组中的某个空间地址

<2>二维数组下标的计算(可能会结合一维数组考)

<3>给出几维数组表达式求几维数组元素个数


 

 串的常见考法(一)BF算法

StrIndex (‘DATASTRUCTURE',1,‘STR')= ()。
A. 3
B. 7
C. 5
D. 9

首先我先来说明一下 StrIndex 这个函数的意思:

主串 DATASTRUCTURE 中的第 1 个位置找到子串 STR 的位置并返回,若是找不到则返回 -1

所以这是一个字符串匹配的题目,我们只需简单的数一下从主串的第一个位置到子串的位置的距离便可以啦 ~


所以答案选择 C

S1='good',S2='morning',执行函数SubStr(S2,4,LenStr(S1))后的结果为()。
A. 'good'
B. 'go'
C. 'morn'
D. 'ning'

我先来说一下 SuStrLenStr 的功能:

(1)substr()是 C++ 函数,主要功能是复制子字符串,要求从指定位置开始,并具有指定的长度。如果没有指定长度或超出了源字符串的长度,则子字符串将延续到源字符串的结尾

(2)strlen 是C语言的函数用来求字符串的长度

所以我们的题目应该这么理解,在 S2(morning )中的第 4 个位置复制 S1(good)长度个并存储在临时空间,S2的第 4 个位置便是 n,所以结果便是 n 开始的后面 4 个字符


所以答案选择 D

 串的常见考法(二)KMP求 next数组

感觉这个有点不好讲,因为我不知道大家的基础是怎么样的,需不需要提一下 KMP 算法,算了还是提一下吧

其实做着种类型题其实不需要懂多少 KMP 的东西

只要知道最长公共前后缀怎么算就可以 KO 这道题

我现在先讲讲:

💞公共前后缀就是字符串前缀与后缀的集合中的相等部分

对于字符串 abab 来说:
前缀 [a,ab,aba],后缀 [b,ab,bab],那么公共前后缀也就是 [ab],长度为2
公共前后缀是可以重合的:
[ababa]的前缀[aba]和后缀[aba]公共前后缀的长度就是3

我们知道这个知识点便可以做题了


我们先来个简单点的,看下面的类型题

串“abcac”的next数组为(  )。

我们数组的第一和第二位置直接无脑 0、1(固定的)

然后到我们的 c 位置(第三位置),就看前面那些写好 next 数组的串有没有公共前后缀

如果没有便写入 1,如果有就 1 加上最长公共前后缀的长度

我们这里看的是 ab 所以没有公共前后缀,所以写上 1 即可

这里稍微快进一下

这个时候我们来到 c 位置,我们看的便是 abca 这个串,它有公共前后缀 a 且是最大的,所以我们就要 1 加上它的长度,便是 2


是不是很简单,我们再看一道题:

串“ababaaababaa”的next数组为()
A. 012345678999   
B.012121111212   
C.011234223456    
D.0123012322345

我们还是按照之前的方法,开局无脑 01,虽然说答案都是 01,但是要一步一步来

然后开始在看看有没有公共前后缀

<1>没有直接写 1

<2>有便用 1 加上最长公共前后缀,在我们 b(第4个位置)这个地方,前面的串是 ab

那么最长公共前后缀为 1,加上便是 2

这里就不说明了,直接看图吧

这里就是我之前提到过的:公共前后缀是可以重叠的(所以这里公共前后缀是3)

按步骤反复,便可以得出结果了:

所以答案选择 C

方法想必已经教会你们了,所以我就来讲讲别的题型啦 ~ 

 

串的常见考法(三)串的概念性质

像这种概念题都考得很简单,我这里就直接给出答案了,放在这里只是为了让你们更好的了解题目

(1)串是一种特殊的线性表,其特殊性体现在(  )。A.可以顺序存储               B.数据元素是一个字符      C.可以链式存储               D.数据元素可以是多个字符若

答案选 B

(2)串下面关于串的的叙述中,(  )是不正确的?A.串是字符的有限序列           B.空串是由空格构成的串C.模式匹配是串的一种重要运算    D.串既可以采用顺序存储,也可以采用链式存储

答案选 B

串的长度是指( )。
A.串中所含不同字母的个数
B.串中所含字符的个数
C.串中所含不同字符的个数
D.串中所含非空格字符的个数

答案选 B

设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为()。
A.求子串
B.联接
C.匹配
D.求串长

答案选 C

如下陈述中正确的是()
A.串中元素只能是字母
B.串的长度必须大于零
C.串是一种特殊的线性表
D.空串就是空白串

答案选 C

串的常见考法(四)给出主串子串数量

若串S=“software”,其子串的个数是()。
A.8
B.37
C.36
D.9

大概就是像这样的题型,我们得到一个主串要求出子串

这其实就是初中题好吧,不过有一点要注意的是:子串还包含空串哦

所以这就是相似的选项相差 1 的原因,就是为了坑你!

然后就是找规律了,不过不想找的话就慢慢枚举吧

首先,software 没有重复字符,长度为8
1个字符的子串有8个;
2个字符的子串有8-1个;
3个字符的子串有8-2个;
... ...
7个字符的子串有8-6个;
8个字符的子串有8-7个。
所以子串总数是1+2+3...+8=36个

但是字串还包含空字串,所以我们还需要加上 1

所以这道题的答案选择 B

这里总结稍微一下规律:

字串: n(n+1)/2 + 1
非空子串:n(n+1)/2
非空真子串(不包括空串和跟自己一样的子串):n(n+1)/2 - 1

 

 接下来为我们就来总结一下数组吧 ~ 学了那么久的程序,数组还解决不了吗?

数组的常见考法(一)计算二维数组中的某个空间地址

首先讲一下概念(公式)吧 ~

二维数组默认按行存储
A[i][j]的地址 = 基地址 + i * 列数 * 每个元素占的字节数 + j * 每个元素占的字节数二维数组是 m 行 n 列,行下标和列下标都从0开始
loc[i,j] = 首地址+(i*n +j)*每个数据元素的大小二维数组是 m 行 n 列,行下标和列下标都从1开始
loc[i,j] = 首地址+((i-1)*n +(j-1))*每个数据元素的大小
二维数组默认按列存储
A[i][j]的地址 = 基地址 + i * 行数 * 每个元素占的字节数 + j * 每个元素占的字节数二维数组是 m 行 n 列,行下标和列下标都从0开始
loc[i,j] = 首地址 + (j*m + i) * 每个数据元素的大小二维数组是 m 行 n 列,行下标和列下标都从1开始
loc[i,j] = 首地址 + ((j-1)*m + (i-1)) * 每个数据元素的大小

 

假设以行序为主序存储二维数组A=array[1..100,1..100],设每个数据元素占2个存储单元,基地址为10
则LOC[5,5]=(  )。
A. 808
B. 1010
C. 818
D. 1020

面对这个题你有两种选择:要么记公式要么画图模拟

画图的话这里就不说了,不过是画图推出公式而已 ~

对了,有一点需要注意,如果题目没有特别说明,我们的数组都是默认0 开始的,这里比较特殊是从 1 开始的,我们就简单的套一下公式吧

loc[5,5] = 10 + ((5-1)*100 + (5-1)) * 2

算出结果为 818 

所以答案选择 C

设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一元素,其存储地址为1
每个元素占一个地址空间,则a85的地址为()。
A、13
B、33
C、18
D、40
由于是对称矩阵,因此压缩存储可以认为只要存储下三角矩阵。
(1,1)                                          1
(2,1) (2,2)                                    2
(3,1) (3,2) (3,3)                              3
(4,1) (4,2) (4,3) (4,4)                        4
(5,1) (5,2) (5,3) (5,4) (5,5)                  5 
(6,1) (6,2) (6,3) (6,4) (6,5) (6,6)            6
(7,1) (7,2) (7,3) (7,4) (7,5) (7,6) (7,7)      7 
(8,1) (8,2) (8,3) (8,4) (8,5)                  51+2+3+4+5+6+7+5=33

首先我们得矩阵是从(1,1)开始的,因为矩阵是对称的,所以我们只需要画出一半的图形便可以直观的做出来

这里可以推一下公式:

k 代表要求的空间地址,i 表示行,j 表示列

k=(i*(i-1)/2)+j

所以答案选择 B

 数组的常见考法(二)二维数组下标的计算

设二维数组A[1.. m,1.. n](即m行n列)按行存储在数组B[1.. m*n]中
则二维数组元素A[i,j]在一维数组B中的下标为()
A. (i-1)*n+j 
B. (i-1)*n+j-1
C. i*(j-1)
D. j*m+i-1

其实像这种题如果不会的话可以画图来理解一下的

我们的二维数组中的 22 放在一维数组中是什么地位?

放在我们一维数组来看也就是说:地位 = 上面层数 + 当前序列

设当前层数为 i,当前序列为 j

因为我们的 22 在二维数组中是在第二行的第二个位置,但是由于我们不是从 0 开始而是从 1 开始所以我们需要 (i-1),因为有 n 列所以我们需要乘以 n,即:(i-1)*n

我们的 22 在二维数组的第 2 位,所以需要 + j

模拟完了,答案自然也就出来了

所以答案选择 A

数组的常见考法(三)给出表达式求个数

数组A[0..4,-1..-3,5..7]中含有元素的个数()
A. 55
B. 45
C. 36
D. 16

可以看到题目给我们的是一个三位数组,但是不要慌,求个数而已,想一想我们一维二维怎么求个数的,三维就怎么求

简单来说这道题就是小学题,不过将其包装了一下

一维数组我们就想象成一条线,我们求一条线的长度不是直接去量?(看)

二维数组我们就想象成一个长方形,我们长乘宽不就成了

三维数组我们就想象成长方体,长乘宽乘高,这就是这道题的做法

我们需要找到(长、宽、高)才能算出其个数,而我们所谓的长、宽、高便是每个维的个数

每维个数 = 上限 - 下限 + 14-0+1=5-1-(-3)+1=37-5+1=3

最后:5*3*3=45 便可以求出三维数组的个数了

所以答案选择 B

 

 

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

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

相关文章

使用 nvm 管理 Node 版本及 pnpm 安装

文章目录 GithubWindows 环境Mac/Linux 使用脚本进行安装或更新Mac/Linux 环境变量nvm 常用命令npm 常用命令npm 安装 pnpmNode 历史版本 Github https://github.com/nvm-sh/nvm Windows 环境 https://nvm.uihtm.com/nvm.html Mac/Linux 使用脚本进行安装或更新 curl -o- …

如何在AWS上使用免费的服务器

要在AWS上免费使用的服务器&#xff0c;你可以按照以下步骤操作&#xff1a; &#xff08;1&#xff09;注册AWS账户&#xff1a; 访问AWS官方网站&#xff08;https://aws.amazon.com/cn/&#xff09;&#xff0c;点击右上角的“完成注册”&#xff0c;按照页面提示填写相关…

华为BGP路由实验基础1------用物理口建立对等体

1.用物理口做BGP建立对等体建立BGP连接 实验拓扑&#xff1a; 实验步骤&#xff1a; 1.完成基本配置 sys [Huawei]sys AR1 [AR1]undo in e [AR1]int g0/0/0 [AR1-GigabitEthernet0/0/0]ip add 1.1.1.1 24 [AR1-GigabitEthernet0/0/0]q [AR1] sys [Huawei]sys AR2 [AR2]undo i…

【Python】已解决:Python正确安装文字识别库EasyOCR

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;Python正确安装文字识别库EasyOCR 一、分析问题背景 在使用Python进行图像处理和文字识别时&#xff0c;EasyOCR是一个流行的库&#xff0c;它基于PyTorch&…

【算法刷题 | 动态规划14】6.28(最大子数组和、判断子序列、不同的子序列)

文章目录 35.最大子数组和35.1题目35.2解法&#xff1a;动规35.2.1动规思路35.2.2代码实现 36.判断子序列36.1题目36.2解法&#xff1a;动规36.2.1动规思路36.2.2代码实现 37.不同的子序列37.1题目37.2解法&#xff1a;动规37.2.1动规思路37.2.2代码实现 35.最大子数组和 35.1…

笔记本电脑为什么可以链接热点,却无法连接WiFi

① 在开始菜单的搜索栏中&#xff0c;输入 cmd 。 ② 右击上方该程序&#xff0c;选择 以管理员身份运行 ③ 输入&#xff1a;nestsh winsock reset ④ 敲击回车&#xff0c;显示如下页面 ⑤ 再输入 ipconfig/flushdns 回车 ⑥ 然后重启电脑&#xff0c;OVER&#xff01;

98、验证二叉搜索树

给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 题解&#xff1a;若要验证是…

Python之父推荐!Star 60k!深入CPython内核:揭秘内部实现细节

都说 Python 是人工智能的“天选”语言&#xff0c;为什么呢&#xff1f; 可能很多读者都知道&#xff0c;Python 的解释器是用 C 语言写的&#xff0c;所以其实我们在谈论 “Python” 的时候&#xff0c;99.9% 的情况说的就是 “CPython”&#xff01; CPython 是目前最流行的…

SD-WAN组网对比传统组网的优势

随着商业环境的迅速变化&#xff0c;企业对网络连接的需求不断增长。传统组网方案已经难以满足现代企业的需求&#xff0c;而作为一种新兴的网络解决方案&#xff0c;SD-WAN正逐渐受到企业的青睐。那么&#xff0c;SD-WAN究竟在哪些方面优于传统组网方案呢&#xff1f; 灵活性 …

深度探讨网络安全:挑战、防御策略与实战案例

目录 ​编辑 一、引言 二、网络安全的主要挑战 恶意软件与病毒 数据泄露 分布式拒绝服务攻击&#xff08;DDoS&#xff09; 内部威胁 三、防御策略与实战案例 恶意软件防护 网络钓鱼防护 数据泄露防护 总结 一、引言 随着信息技术的迅猛发展&#xff0c;网络安全问…

# [0628] Task04 DQN 算法及进阶

easy-rl PDF版本 笔记整理 P6 - P8 joyrl 比对 补充 P7 - P8 相关 代码 整理 待整理 &#xff01;&#xff01; 最新版PDF下载 地址&#xff1a;https://github.com/datawhalechina/easy-rl/releases 国内地址(推荐国内读者使用)&#xff1a; 链接: https://pan.baidu.com/s/1i…

第二节:如何使用thymeleaf渲染html(自学Spring boot 3.x的第一天)

大家好&#xff0c;我是网创有方&#xff0c;今天来学习如何使用thymeleaf渲染html。该模板运用不广泛&#xff0c;所以本节内容了解既可。 第一步&#xff1a;创建html文件。 在模板templates目录下创建一个html文件。 编写代码如下&#xff1a; <!DOCTYPE html> <…

RocketMQ快速入门:事务消息原理及实现(十)

目录 0. 引言1. 原理2. 事务消息的实现2.1 java client实现&#xff08;适用于spring框架&#xff09;2.2 springboot实现 3. 总结 0. 引言 rocketmq 的一大特性就是支持事务性消息&#xff0c;这在诸多场景中有所应用。在之前的文章中我们已经讲解过事务消息的使用&#xff0…

P1114 “非常男女”计划最优解

原题地址 P1114 “非常男女”计划 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 代码题解 AC代码&#xff08;1&#xff09; 因为用的是级的算法&#xff0c;所以最后一个 了&#xff0c;这里使用特判来得到的&#xff0c;给你们放一下代码&#xff1a; #include <bi…

《昇思25天学习打卡营第5天|onereal》

ShuffleNet网络介绍 ShuffleNetV1是旷视科技提出的一种计算高效的CNN模型&#xff0c;和MobileNet, SqueezeNet等一样主要应用在移动端&#xff0c;所以模型的设计目标就是利用有限的计算资源来达到最好的模型精度。ShuffleNetV1的设计核心是引入了两种操作&#xff1a;Pointw…

49-5 内网渗透 - 服务注册表权限脆弱提权

一、服务注册表权限脆弱提权介绍 Windows操作系统中的注册表存储了每个系统服务的相关条目。注册表使用访问控制列表(ACL)来管理用户对其条目的访问权限。如果注册表的ACL配置不正确,可能导致低权限用户获得对服务注册表的写入权限。攻击者可以利用这一漏洞修改注册表内容,…

【android 9】【input】【9.发送按键事件3——Inputchannel的创建过程】

系列文章 本人系列文章-CSDN博客 目录 系列文章 目录 1.简介 1.1 主要步骤 1.2 时序图 2.源码分析 2.1 WindowManagerImpl的addView 2.2 WindowManagerGlobal的addView 2.3 ViewRootImpl 2.4 getWindowSession 2.5 WMS中的openSession 2.6 Session 2.7 class W 2.…

java周测总结(3)

1、什么是I0流&#xff1f; 是一串流动的字符,从先进先出的方式要求信息的通道。 2、什么是序列化&#xff1f;什么是反序列化&#xff1f; 序例化是将对象的状态存储到特定的存储介质中的过程反序例化是将特定的有合者公质中数据重新构建对象的过程。 3、Java中线程在哪个包下…

Ingress Controller介绍及部署实践

Ingress Controller介绍及部署实践 1. 概念 1.1 Ingress Ingress 提供从集群外部到集群内服务的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 资源所定义的规则来控制。 下面是 Ingress 的一个简单示例&#xff0c;可将所有流量都发送到同一 Service&#xff1a; 通过配置&am…

11.常见的Transforms(二)

常见的Transforms&#xff08;二&#xff09; 1.Resize() 的使用 1.1 作用 resize可以把输入的图片按照输入的参数值重新设定大小。 1.2 所需参数 需要输入想要重新设定的图片大小。 输入的参数类型可以为包含长和宽数值的一个序列&#xff08;h,w&#xff09;或者一个整…