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

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…...

开发环境搭建-完善登录功能

一.完善登录功能 我们修改密码为md5中的格式&#xff0c;那么就需要修改数据库中的密码和将从前端获取到的密码转化成md5格式&#xff0c;然后进行比对。比对成功则登录成功&#xff0c;失败则禁止登录。 二.md5格式 使用DigestUtils工具类进行md5加密&#xff0c;调用md4Dig…...

HAL库,配置adc基本流程

1. 初始化阶段---cubemx (1) GPIO初始化 函数&#xff1a;HAL_GPIO_Init() 作用&#xff1a;配置ADC引脚为模拟输入模式。 代码示例&#xff1a; // 使能GPIOA时钟 __HAL_RCC_GPIOA_CLK_ENABLE();// 配置PA1为模拟输入 GPIO_InitTypeDef GPIO_InitStruct {0}; GPIO_InitStr…...

DeepSeek爆火催生培训热潮,是机遇还是陷阱?

DeepSeek 掀起的学习风暴 最近&#xff0c;DeepSeek 以迅猛之势闯入大众视野&#xff0c;在国内引发了一场学习狂潮。它的出现&#xff0c;就像是在平静的湖面投入了一颗巨石&#xff0c;激起层层涟漪。 在各大社交平台上&#xff0c;与 DeepSeek 相关的话题讨论热度居高不下&…...

Apache Httpd 多后缀解析

目录 1.原因 2.环境 3.复现 4.防御 1.Apache Httpd 多后缀解析原因 Apache HTTP Server 在处理文件请求时&#xff0c;通常会根据文件的后缀来确定如何处理该文件。例如&#xff0c;.php文件会被交给 PHP 解释器处理&#xff0c;而.html文件则直接作为静态文件返回。 然而…...

备赛蓝桥杯之第十五届职业院校组省赛第五题:悠然画境

提示&#xff1a;本篇文章仅仅是作者自己目前在备赛蓝桥杯中&#xff0c;自己学习与刷题的学习笔记&#xff0c;写的不好&#xff0c;欢迎大家批评与建议 由于个别题目代码量与题目量偏大&#xff0c;请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题&#xff0…...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_modules

定义在 objs\ngx_modules.c #include <ngx_config.h> #include <ngx_core.h>extern ngx_module_t ngx_core_module; extern ngx_module_t ngx_errlog_module; extern ngx_module_t ngx_conf_module; extern ngx_module_t ngx_openssl_module; extern ngx_modul…...

css错峰布局/瀑布流样式(类似于快手样式)

当样式一侧比较高的时候会自动换行&#xff0c;尽量保持高度大概一致&#xff0c; 例&#xff1a; 一侧元素为5&#xff0c;另一侧元素为6 当为5的一侧过于高的时候&#xff0c;可能会变为4/7分部dom节点 如果不需要这样的话删除样式 flex-flow:column wrap; 设置父级dom样…...

【并发编程】聊聊定时任务ScheduledThreadPool的实现原理和源码解析

ScheduledThreadPoolExecutor 是在线程池的基础上 拓展的定时功能的线程池&#xff0c;主要有四种方式&#xff0c;具体可以看代码&#xff0c; 这里主要描述下 scheduleAtFixedRate &#xff1a; 除了第一次执行的时间&#xff0c;后面任务执行的时间 为 time MAX(任务执行时…...

【虚拟化】Docker Desktop 架构简介

在阅读前您需要了解 docker 架构&#xff1a;Docker architecture WSL 技术&#xff1a;什么是 WSL 2 1.Hyper-V backend 我们知道&#xff0c;Docker Desktop 最开始的架构的后端是采用的 Hyper-V。 Docker daemon (dockerd) 运行在一个 Linux distro (LinuxKit build) 中&…...

DeepSeek 医疗大模型微调实战讨论版(第一部分)

DeepSeek医疗大模型微调实战指南第一部分 DeepSeek 作为一款具有独特优势的大模型,在医疗领域展现出了巨大的应用潜力。它采用了先进的混合专家架构(MoE),能够根据输入数据的特性选择性激活部分专家,避免了不必要的计算,极大地提高了计算效率和模型精度 。这种架构使得 …...

c++实现最大公因数和最小公倍数

最大公因数和最小公倍数的介绍 读这篇文章&#xff0c;请你先对最大公因数以及最小公倍数进行了解&#xff1a; 最大公因数&#xff08;英文名&#xff1a;gcd&#xff09; 定义&#xff1a;最大公因数&#xff0c;也称最大公约数&#xff0c;指两个或多个整数共有约数&…...

知识库Dify和cherry无法解析影印pdf word解决方案

近期收到大量读者反馈&#xff1a;上传pdf/图文PDF到Dify、Cherry Studio等知识库时&#xff0c;普遍存在格式错乱、图片丢失、表格失效三大痛点。 在试用的几款知识库中除了ragflow具备图片解析的能力外&#xff0c;其他的都只能解析文本。 如果想要解析扫描件&#xff0c…...

【记录一下学习】Embedding 与向量数据库

一、向量数据库 向量数据库&#xff08;Vector Database&#xff09;&#xff0c;也叫矢量数据库&#xff0c;主要用来存储和处理向量数据。 在数学中&#xff0c;向量是有大小和方向的量&#xff0c;可以使用带箭头的线段表示&#xff0c;箭头指向即为向量的方向&#xff0c…...

【第21节】C++设计模式(行为模式)-Chain of Responsibility(责任链)模式

一、问题背景 在 VC/MFC 开发中&#xff0c;消息处理机制是核心部分之一。VC 是基于消息和事件驱动的框架&#xff0c;消息的处理流程通常是通过链式传递的方式进行的。例如&#xff0c;一个 WM_COMMAND 消息的处理流程可能如下&#xff1a; &#xff08;1&#xff09;MDI 主窗…...

createrepo centos通过nginx搭建本地源

yum update 先安装一个nginx。 安装Nginx yum install gcc gcc-c pcre pcre-devel openssl openssl-devel libtool zlib zlib-devel -y cd /usr/local/src wget http://nginx.org/download/nginx-1.22.0.tar.gz tar -zxvf nginx-1.22.0.tar.gz cd nginx-1.22.0 ./configu…...

在 Docker 中搭建GBase 8s主备集群环境

本文介绍了如何在同一台机器上使用 Docker 容器搭建GBase 8s主备集群环境。 拉取镜像 拉取GBase 8s的最新镜像 docker pull liaosnet/gbase8s或者docker pull liaosnet/gbase8s:v8.8_3513x25_csdk_x64注&#xff1a;在tag为v8.8_3513x25_csdk_x64及之后的版本中&#xff0c;…...

【MySQL-数据类型】数据类型分类+数值类型+文本、二进制类型+String类型

一、数据类型分类 二、数值类型 1.bit类型 测试环境ubuntu 基本语法&#xff1a; bit[(M)]&#xff1a;位字段类型&#xff0c;M表示每个值的位数&#xff0c;范围从1&#xff5e;64&#xff1b;如果M被忽略&#xff0c;默认为1举例&#xff1a; create table testBit(id i…...

小谈java内存马

基础知识 &#xff08;代码功底不好&#xff0c;就找ai优化了一下&#xff09; Java内存马是一种利用Java虚拟机&#xff08;JVM&#xff09;动态特性&#xff08;如类加载机制、反射技术等&#xff09;在内存中注入恶意代码的攻击手段。它不需要在磁盘上写入文件&#xff0c…...

简单的二元语言模型bigram实现

内容总结归纳自视频&#xff1a;【珍藏】从头开始用代码构建GPT - 大神Andrej Karpathy 的“神经网络从Zero到Hero 系列”之七_哔哩哔哩_bilibili 项目&#xff1a;https://github.com/karpathy/ng-video-lecture Bigram模型是基于当前Token预测下一个Token的模型。例如&#x…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...