当前位置: 首页 > article >正文

13.数据结构(软考)

13.数据结构(软考)

13.1:线性表

13.1.1 顺序表

        顺序存储方式:数组的内存是连续分配的并且是静态分配的,即在使用数组之前需要分配固定大小的空间。

时间复杂度:

        读:O(1)

        查询:1,(n+1)/2,n

        插入:1,(n+1)/2,n

        删除:1,(n+1)/2,n-1

优势在于读操作。

 13.1.2 链表

        链表(linked-list)存储方式:链表的内存是不连续的,前一个元素存储地址的下一个地址中存储的不一定是下一个元素。链表通过一个指向下一个元素地址的引用将链表中的所有元素串起来。

尾结点:最后一个有效结点。
首结点:第一个有效结点。
头结点:第一个有效结点之前的那个结点,存放链表首地址。
头指针:指向头结点的指针变量。
尾指针:指向尾结点的指针变量。

特点:

        ①n个结点离散分布,彼此通过指针相联系。

        ② 除头结点和尾结点外,每个结点只有一个前驱结点和一个后续结点。头结点没有前驱结点,尾结点没有后继结点。
        ③头结点并不存放有效数据,只存放链表首地址。其头结点的数据类型和首结点类型一样。
        ④加头结点的目的是方便对链表的操作,比如在链表头部进行结点的删除、插入。

 

 13.1.2.1 单项链表

插入: 

删除当前节点的下一个节点:

删除当前节点:

        这里做了处理为将当前节点赋值为下一个节点值,然后山出下一个节点

13.1.2.2 双向链表

插入:

删除:

13.1.3 顺序存储与链式存储对比

13.2:栈和队列

13.3:串

1.串的定义:

        串是仅由字符构成的有限序列,是一种线性表。一般记为S=“abcdef”,其中,S是串名,单引号括起来的字符序列是串值。

2.串的几个基本概念
        (1)空串与空格串
        空串:长度为零,不包含任何字符。
        空格串:由一个或多个空格组成的串。虽然空格是一个空白字符,但它也是一个字符,在计算串长度时要将其计算在内。
        (2)子串与子序列
        子串:由串中任意长度的连续字符构成的序列称为子串。含有子串的串称为主串子串在主串中的位置是指子串首次出现时,该子串的第一个字符在主串中的位置。空串是任意串的子串。
        子序列:一个串的“子序列”(subsequence)是将这个串中的一些字符提取出来得到一个新串,并且不改变它们的相对位置关系。
        (3)串比较与串相等
        串比较:两个串比较大小时以字符的ASCII码值(或其他字符编码集合)作为依据。实质上,比较操作从两个的第一个字符开始进行,字符的码值大者所在的串为大;若其中一个串先结束,则以串长较大者为大。
        串相等:指两个串长度相等且对应序号的字符也相同。

3、串的基本操作:
        (1)赋值操作StrAssign(s,t):将串s的值赋给串t。
        (2)连接操作Concat(s,t):将串t接续在串s的尾部,形成一个新的串。

        (3)求串长StrLength(s):返回串s的长度。
        (4)串比较StrCompare(s,t):比较两个串的大小。返回值-1、0和1分别表示s=t和s>t三种情况。s<t.
        (5)求子串SubString(s,start,len):返回串S中从start开始的、长度为len的字符序列。

4、串的存储
        (1)顺序存储
        (2)链式存储

        模式匹配:子串的定位操作通常称为串的模式匹配。(子串也称为模式串)
        朴素的模式匹配算法(布鲁特-福斯算法):其基本思想是从主串的第一个字符起与模式串的第一个字符比较,若相等,则继续逐一对字符进行后续的比较,否则从主串第二个字符起与模式串的第一个字符重新比较,直到模式串中每个字符依次与主串中一个连续的字符序列相等时为止,此时称为匹配成功。如果不能在主串中找到与模式串相同的子串,则匹配失败。
        改进的模式匹配算法(KMP算法):
        其改进之处在于-每当匹配过程中出现相比较的字符不相等时,不需要回退到主串的字符位置指针,而是利用已经得到的“部分匹配”结果将模式串向右“滑动”尽可能远的距离再继续进行比较。
        在KMP算法中,依据模式串的next函数值实现子串的滑动。若令next[i]=k,则next[]表示当模式串中的p;与主串中相应字符不相等时,令模式串的pnexu与主串的相应字符进行比较。(j=next[j])next函数的定义如下: 

        KMP是进行字符串模式匹配运算效率较高的算法。根据对 next 函数的定义,模式串前两个字符的 next 值为 0、1。
        对于第3 个字符 “a”,,其在模式串中的前缀为“ab”,从该子串找不出前缀和后缀相同的部分,因此,根据定义,该位置字符的next 值为 1。
        对于第4个字符“a”其在模式串中的前缀为“ aba”:音量:8%1只有长度为1的前缀“a” 和后缀“a”相同,根据定义,该位置字符的 next 值为 2。
        对于第5个字符 “a”其在模式串中的前缀为“abaa0”,该子串只有长度为 1的前缀“a” 和后缀相同,根据定义,该位置字符的 next 值为 2。
        综上可得,模式串“abaac”的 next 函数值为 01122.

一、对于公式

        1、由(1)式,当j=1时,next[1]=0;

        2、当j=1时,由(2)式,max{k|13、取值范围,j、k都为正整数,且1<=j<=5【可根据下面的具体过程理解公式】二、本题计算如下:2、1),电( nety,.lplp2Lpk1'='PIp2Lp1'p1,为第一个字母a;'pik+1pj-k+2Lpj-1'='p2p3Lp2'=p2,为第二个字母b,a!=b,此时,找不到k不满足条件,由(3)式,next[3]=1.

        4、j=4,满足1(1)当k=2,'plp2Lpk-1'='p1p2Lp1'=p1,为第一个字母a,'pj-k+lpjk+2Lpj-1'='p3p4Lp3'=p3,为第三个字母a,满足'p1p2Lpk-1'='pj-k+lpj-k+2Lpj-1'。(2)当k=3,'p1p2Lpk-1'='p1p2Lp2'=p1p2,为第一二字母ab,'pj-k+lpj-k+2Lpj1'='p2p3Lp3'=p2p3,为第二三个字母ba,不满足'p1p2Lpk-1'='pj-k+lpj-k+2Lpj-1'。综上可得,当j-4时,满足条件的最大k值为2,next[4]=2。

        5、j=5,满足1(1)当k=2,'p1lp2Lpk-1'='plp2Lp1'=p1,为第一个字母a,'pj-k+lpjk+2Lpj-1'='p4p5Lp4'=p4,为第四个字母a,满足'plp2Lpk-1'='pj-k+lpj-k+2Lpj-1'。(2)当k=3,'p1p2Lpk-1'='p1p2Lp2'=p1p2,为第一二字母ab,'pj-k+lpj-k+2Lpj1'='p3p4Lp4'=p3p4,为第三四个字母aa,不满足'p1p2Lpk-1'='pj-k+lpj-k+2Lpj-1'。(3)当k=4,'p1p2Lpk-1'='p1p2Lp3'=p1p2p3,为第一二三字母aba,'pj-k+lpj-k+2Lpj1'='p2p3Lp4'=p2p3p4,为第二三四个字母baa,不满足'p1p2Lpk-1'='pj-k+lpj-k+2Lpj-1综上可得,当j=5时,满足条件的最大k值为2,next[5]=2。根据上面的分析过程,可以得出next0函数值为01122.

相关文章:

13.数据结构(软考)

13.数据结构&#xff08;软考&#xff09; 13.1:线性表 13.1.1 顺序表 顺序存储方式:数组的内存是连续分配的并且是静态分配的&#xff0c;即在使用数组之前需要分配固定大小的空间。 时间复杂度&#xff1a; 读&#xff1a;O(1) 查询&#xff1a;1&#xff0c;(n1)/2&#x…...

拉拉扯扯adfda

read -p "请输入一个成绩&#xff1a;" sorce if [ "$sorce" -ge 90 -a "$sorce" -le 100 ] thenecho A elif [ "$sorce" -ge 80 -a "$sorce" -lt 90 ] thenecho B elif [ "$sorce" -ge 70 -a "$sorce"…...

【计算机网络】TCP

1.基本概念及报文格式 基本概念&#xff1a; TCP的中文全称为传输控制协议&#xff08;Transmission Control Protocol&#xff09;&#xff0c;是一种可靠的&#xff0c;面向连接的&#xff0c;基于字节流的传输层通信协议。 报文格式&#xff1a; 序号 &#xff1a;占32⽐…...

doris: PostgreSQL

Doris JDBC Catalog 支持通过标准 JDBC 接口连接 PostgreSQL 数据库。本文档介绍如何配置 PostgreSQL 数据库连接。 使用须知​ 要连接到 PostgreSQL 数据库&#xff0c;您需要 PostgreSQL 11.x 或更高版本 PostgreSQL 数据库的 JDBC 驱动程序&#xff0c;您可以从 Maven 仓…...

深度学习笔记——神经网络

本文为在拓尔思智能举办的训练营中学习内容的总结&#xff0c;部分内容摘自百度百科 个人在这里推荐一个好用的软件&#xff0c;Trae&#xff0c;主要是免费。 人工神经元是人工神经网络的基本单元。模拟生物神经元&#xff0c;人工神经元有1个或者多个输入&#xff08;模拟多…...

django中路由配置规则的详细说明

在 Django 中,路由配置是将 URL 映射到视图函数或类视图的关键步骤,它决定了用户请求的 URL 会触发哪个视图进行处理。以下将详细介绍 Django 中路由配置的规则、高级使用方法以及多个应用配置的规则。 基本路由配置规则 1. 项目级路由配置 在 Django 项目中,根路由配置文…...

关于tomcat使用中浏览器打开index.jsp后中文显示不正常是乱码,但英文正常的问题

如果是jsp文件就在首行加 “<% page language"java" contentType"text/html; charsetUTF-8" pageEncoding"UTF-8" %>” 如果是html文件 在head标签加入&#xff1a; <meta charset"UTF-8"> 以jsp为例子&#xff0c;我们…...

pytest结合allure

Allure 一、文档二、指令三、装饰器3.1 allure.step装饰器3.2 allure.description装饰器3.3 allure.title装饰器3.4 allure.link、allure.issue 和 allure.testcase装饰器3.5 allure.epic、allure.feature 和 allure.story装饰器3.6 allure.severity装饰器 一、文档 allure文档…...

机器学习在地图制图学中的应用

原文链接&#xff1a;https://www.tandfonline.com/doi/full/10.1080/15230406.2023.2295948#abstract CSDN/2025/Machine learning in cartography.pdf at main keykeywu2048/CSDN GitHub 核心内容 本文是《制图学与地理信息科学》特刊的扩展评论&#xff0c;系统探讨了机…...

vue2升vue3,uniapp兼容鸿蒙app踩坑记录

前提&#xff1a;最近鸿蒙势头很好&#xff0c;公司的 uniapp vue2 项目&#xff0c;要兼容鸿蒙app。就开始了我的uniapp转鸿蒙踩坑之旅&#xff0c;请看下文&#xff08;注意下文都是在uniapp开发基础上&#xff09; 1. 首先鸿蒙开发只支持Vue3&#xff0c;不支持Vue2、不支持…...

Linux基础网络设置

文章目录 Linux基础网络设置介绍查看和配置网络接口查看活动网络接口信息临时修改网卡IP地址永久修改IP地址启用和关闭网卡 主机名设置查看和临时修改主机名永久修改主机名 路由表设置查看路由表信息 网络连接状态和接口统计信息查看网络连接状态 网络连通性测试测试网络连通性…...

DeepSeek × 豆包深度整合指南:工作流全解析

DeepSeek 豆包深度整合指南&#xff1a;工作流全解析 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;可以分享一下给大家。点击跳转到网站。 https://www.captainbed.cn/ccc 文章目录 DeepSeek 豆包深度整合指南&#xff1a;工…...

海思Hi3516DV300交叉编译opencv

OpenCV是一个开源的跨平台计算机视觉库&#xff0c;支持C、Python等多种语言&#xff0c;适用于图像处理、目标检测、机器学习等任务。其核心由C编写&#xff0c;高效轻量&#xff0c;提供实时视觉处理功能&#xff0c;广泛应用于工业自动化、医疗影像等领域。 1 环境准备 1…...

【AI赋能】AI 工具生成视频教材:从创意到成品的全流程指南

AI 工具生成视频教材&#xff1a;从创意到成品的全流程指南 目标 通过本教材&#xff0c;您将学会如何利用 AI 工具&#xff08;Grok、Sora、Speechify 和 CapCut&#xff09;生成一个完整的视频&#xff0c;包括脚本生成、视频片段制作、字幕添加、音频生成以及最终剪辑合成…...

[FE] React 初窥门径(五):React 组件的加载过程(commit 阶段)

1. 回顾 前一篇文章我们看到&#xff0c;ReactDOM.render 总共包含这些步骤&#xff0c; 然后介绍了 performSyncWorkOnRoot 做的事情&#xff0c;它主要做了两件事&#xff0c; renderRootSync 可称之为 render 阶段&#xff1a;创建了一颗 Fiber Tree&#xff08;包含 html …...

Linux(Centos 7.6)命令详解:vim

1.命令作用 vi/vim 是Linux 系统内置不可或缺的文本编辑命令&#xff0c;vim 是vi 的加强版本&#xff0c;兼容vi 的所有指令&#xff0c;不仅能编辑文本&#xff0c;而且还具有shell 程序编辑的功能&#xff0c;可以不同颜色的字体来辨别语法的正确性。 2.命令语法 usage: …...

Kubernetes Pod网络组件解析与选型指南

前言 在Kubernetes集群中&#xff0c;Pod网络插件是支撑容器间通信的核心基础设施。它决定了Pod如何跨节点互联、如何与外部服务交互&#xff0c;甚至如何实现网络安全策略。本文将从技术原理、主流方案对比到选型实践&#xff0c;全方位解析Pod网络组件的设计哲学与落地策略。…...

java环境部署

java环境部署 一、准备工作 jrejdkeclipse jdk下载&#xff1a;21和1.8-----官网&#xff1a;Oracle&#xff1a;Java 下载 |神谕 该处选择要依据自身的系统类型选择下载 idea的下载安装&#xff1a;IntelliJ IDEA | Other Versions 二、安装 三、环境配置 四、使用 五、i…...

100天精通Python(爬虫篇)——第115天:爬虫在线小工具_Curl转python爬虫代码工具(快速构建初始爬虫代码)

文章目录 一、curl是什么&#xff1f;二、爬虫在线小工具&#xff08;牛逼puls&#xff09;三、实战操作 一、curl是什么&#xff1f; 基本概念&#xff1a;curl 支持多种协议&#xff0c;如 HTTP、HTTPS、FTP、SFTP 等&#xff0c;可用于从服务器获取数据或向服务器发送数据&a…...

查看k8s集群的资源使用情况

查看Kubernetes&#xff08;k8s&#xff09;集群的资源使用情况有多种方法&#xff0c;以下是一些常见的方式&#xff1a; 使用kubectl命令行工具 查看节点资源使用情况 kubectl top nodes命令可以显示集群中各个节点的CPU和内存使用情况。例如&#xff1a; NAME …...

【渗透测试】基于时间的盲注(Time-Based Blind SQL Injection)

发生ERROR日志告警 查看系统日志如下&#xff1a; java.lang.IllegalArgumentException: Illegal character in query at index 203: https://api.weixin.qq.com/sns/jscode2session?access_token90_Vap5zo5UTJS4jbuvneMkyS1LHwHAgrofaX8bnIfW8EHXA71IRZwsqzJam9bo1m3zRcSrb…...

Electron应用中获取设备唯一ID和系统信息

让我创建一篇关于如何在Electron应用中获取设备唯一ID和系统信息&#xff0c;并在登录时使用这些信息的博客文章。我将确保步骤明确、条理清晰&#xff0c;适合初学者和有经验的开发者。 这篇博客应包含以下部分&#xff1a; 介绍 - 为什么需要获取设备信息前提条件和安装依赖…...

python-leetcode-解决智力问题

2140. 解决智力问题 - 力扣&#xff08;LeetCode&#xff09; 这道题是一个典型的 动态规划&#xff08;Dynamic Programming, DP&#xff09; 问题&#xff0c;可以使用 自底向上 的方式解决。 思路 定义状态&#xff1a; 设 dp[i] 表示从第 i 题开始&#xff0c;能获得的最高…...

SpireCV荣获Gitee 最有价值开源项目称号

什么是GVP&#xff1f; GVP全称Gitee Valuable Project&#xff0c;意思为Gitee最有价值开源项目。作为GVP称号的获得者&#xff0c;SpireCV在开源社区中展现出了卓越的实力和影响力&#xff0c;为开源软件的发展和推广做出了积极的贡献。 这一荣誉不仅充分肯定了过去阿木实验…...

数据结构基础(一)

文章目录 1 数据结构基础1.1 什么是程序&#xff1f;1.2 数据、数据元素、数据项、数据对象1.3 基本的逻辑结构 2 算法效率2.1 时间复杂度2.1.1 循环执行次数2.1.2 大O(n)表示法 2.2 空间复杂度 1 数据结构基础 1.1 什么是程序&#xff1f; ​ 程序 数据结构 &#xff0b; 算…...

⭐算法OJ⭐N-皇后问题 II【回溯剪枝】(C++实现)N-Queens II

⭐算法OJ⭐N-皇后问题【回溯剪枝】&#xff08;C实现&#xff09;N-Queens 问题描述 The n-queens puzzle is the problem of placing n n n queens on an n n n \times n nn chessboard such that no two queens attack each other. Given an integer n, return the num…...

项目管理工具 Maven

目录 1.Maven的概念 1.1​​​​​什么是Maven 1.2什么是依赖管理 1.3什么是项目构建 1.4Maven的应用场景 1.5为什么使用Maven 1.6Maven模型 2.初识Maven 2.1Maven安装 2.1.1安装准备 2.1.2Maven安装目录分析 2.1.3Maven的环境变量 2.2Maven的第一个项目 2.2.1按照约…...

国产编辑器EverEdit - 宏功能介绍

1 宏 1.1 应用场景 宏是一种重复执行简单工作的利器&#xff0c;可以让用户愉快的从繁琐的工作中解放出来&#xff0c;其本质是对键盘和菜单的操作序列的录制&#xff0c;并不会识别文件的内容&#xff0c;属于无差别无脑执行。 特别是对一些有规律的重复按键动作&#xff0c;…...

CODEGEN:一种基于多轮对话的大型语言模型编程合成方法

【摘要】 该论文于ICLR 2023会议上发表,标题为“CODEGEN:用于编程的大型语言模型”,由Salesforce Research团队撰写。论文提出的CODEGEN是一个大型语言模型系列,旨在通过自然语言和编程语言数据进行训练,以实现程序合成。以下是论文的主要贡献和关键发现的总结: 核心贡献…...

利用后缀表达式构造表达式二叉树的方法

后缀表达式&#xff08;逆波兰表达式&#xff09;是一种将运算符放在操作数之后的表达式表示法。利用后缀表达式构造表达式二叉树的方法主要依赖于栈结构。 转换步骤 初始化 创建一个空栈。 遍历后缀表达式 对后缀表达式的每个符号依次处理&#xff1a; 遇到操作数 如果当前符…...