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

数据结构--串、数组、广义表

这里写目录标题

    • 定义
    • 案例引用
    • 串的类型定义以及存储结构
      • 抽象类型定义
      • 存储结构(顺序表较为常用)
        • 顺序存储结构
        • 链式存储结构
      • 串的模式匹配算法(查找主串中是否有某个字串)
        • BF算法
        • KMP算法
          • 设计思想
          • 对字串的回溯进行了优化
          • 代码
          • 对next【j】进行优化
  • 数组
    • 类型
      • 一维数组
      • 二维数组
    • 抽象类型定义
    • 顺序存储结构
      • 已知首元地址,求某个元素的地址(该元素第一个字节的地址)
    • 特殊矩阵的压缩存储
      • 对称矩阵
      • 三角矩阵
      • 带状矩阵
      • 稀疏矩阵
        • 顺序结构
        • 链式结构
  • 广义表
    • 简介
    • 性质
    • 基本运算
    • 案例

定义

在这里插入图片描述
在这里插入图片描述
也叫字符串
在这里插入图片描述
在这里插入图片描述

案例引用

在这里插入图片描述

串的类型定义以及存储结构

抽象类型定义

在这里插入图片描述
在这里插入图片描述

存储结构(顺序表较为常用)

在这里插入图片描述

顺序存储结构

在这里插入图片描述
为了方便一些操作,通常串的数组的第一个位置不放元素,而是从ch【1】开始存放元素

链式存储结构

在这里插入图片描述
如果一个结点的数据域只放一个字符,那么会导致存储密度异常的底,解决这个问题:在数据域放更多的字符数据
在这里插入图片描述
上面的结构体定义结点结构,下面定义链表结构

可以得知,对于好多功能的链式表示都是定义两个结构:一个是结点、一个是链表自己
定义链表时:先定义第二个结构体的对象,创建出链表,如果要创建新的结点,那么要用到第一个结构体,进行插入即可

串的模式匹配算法(查找主串中是否有某个字串)

BF算法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果匹配失败,那么需要对两个串的下标进行回溯,从而重新比较下一组

对于主串,先回溯到原始位置:i=i-(j-1)
因为对于串的第一个下标都是1,所以,j移动的格数是j-1,而i与j同步移动,所以,回溯到原始位置是i-(j-1)
之后,因为要进行下一组比较,所以,i回到原始位置之后,还需要后移一位,所以i=i-(j-1)+1

对于字串,直接回到第一个位置即可:j=1
在这里插入图片描述
由于第一个位置下标为1,方便了这里字串位置的计算,直接i-T.length即可

在这里插入图片描述
在这里插入图片描述
while循换条件:当主串的下标或者字串的下标有一个出界,那就代表匹配结束,最后要么匹配成功(j>=T.length)要么匹配失败,循环继续的条件是二者都没有出界,一旦有一个出界,那么结果为假,那么整体为假,&&一假则假

在这里插入图片描述
最好情况是o(1)
最坏情况是o(n*m)

综合平均:o(n*m)

KMP算法

设计思想

在这里插入图片描述

对字串的回溯进行了优化

在这里插入图片描述
在这里插入图片描述
当字串第j个元素失配,需要回溯到的下标位置,放入数组next【j】中

第一个元素失配,那么需要回溯到0,但是由于没有0位置,所以实际上的操作是i++,j仍然是1
之后的元素 想看是否满足其前面的首位子集是否相等,例如j=5时,前四个元素,先看1、4,二者相等,所以k-1=1,那么k=2,之后再看12、34,再看123、234,如果有更大的k,那么就取最大的k为最终值,注意不能全部包含 例如1234,这样是不可以的

如果这种情况也不满足,就是其他情况,next【j】=1

代码

kmp算法:
在这里插入图片描述
next【j】的算法:
在这里插入图片描述

对next【j】进行优化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

按照上述标黄的语句,进行分析即可,开头两位一般是01 或者00
之后 如果回溯位置的元素与自身相同,那么val值与回溯位置的next值一样,如果不同 ,那么仍然是自己的next值
最后要注意标黄的第四种情况,也就是如果相同,每次要判断到第一位为止

总结来说 不同为自身,相同做替换,不同则停止,相同则到底

改进后的next【j】:
在这里插入图片描述

数组

类型

一维数组

在这里插入图片描述

二维数组

在这里插入图片描述
二维数组可以是非线性结构,也可以是特殊的线性结构

特殊的线性结构:将一行看成一个线性结构,该行的每个元素是一个列向量
在这里插入图片描述
分开定义,实际上就是对特殊的线性结构的代码解释

在这里插入图片描述
数组一旦定义,那么长度固定,所以一般只是做取元素和修改元素操作

抽象类型定义

在这里插入图片描述
在这里插入图片描述

顺序存储结构

在这里插入图片描述
因为内存单元只能是线性的,但是数组有多维,所以要想办法将多维关系映射到一维关系,接下来通过找指定元素的地址来反映这个关系,接下来就是解决这个问题

已知首元地址,求某个元素的地址(该元素第一个字节的地址)

一维数组
在这里插入图片描述

二维数组
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
也就是(第一维下标*列数+第二维下标)*一个元素所占字节数+首元地址=目标元素的地址
(本质上,是要求该元素的前面有几个元素,但是因为下标都是从0开始,所以根据数学关系,下标的数就是该元素之前有几个元素的多少)

三维数组
在这里插入图片描述

n维
在这里插入图片描述

案例
在这里插入图片描述
注意这里假设元素占用一个空间,先利用第一个条件求出列数,之后利用公式,求出答案

特殊矩阵的压缩存储

在这里插入图片描述

在这里插入图片描述

对称矩阵

在这里插入图片描述
只存上三角或者下三角,元素位置:i*(i-1)/2+j 这就是目标元素前面的元素个数

三角矩阵

在这里插入图片描述

带状矩阵

在这里插入图片描述

稀疏矩阵

顺序结构

在这里插入图片描述
在这里插入图片描述

链式结构

在这里插入图片描述
在这里插入图片描述
每行每列都有许多头指针,负责该行或者该列

每个非零元素都有一个结点,该结点包括行数、列数、值、指向下方的结点、指向右方的结点,

广义表

简介

在这里插入图片描述

在这里插入图片描述
这里注意 表尾:1.是除了第一个元素之外的所有元素组成的表
2.一定是一个表,所以求表尾第一步:先写一个括号,之后看去掉表头之后,剩什么就直接填入括号里

在这里插入图片描述
例如 第二题 表头是第一个元素,第一个元素就是一个空括号 所以就是:()
表尾 先写一个空括号(),之后看除去表头之后 什么也没有了 就是空,所以 括号里什么都不写 所以还是()

第三题 表头:a
表尾:先写一个空括号,之后,将除去表头的剩下的元素填入空表中,也就是((b,c))

性质

在这里插入图片描述
在这里插入图片描述

基本运算

在这里插入图片描述

案例

在这里插入图片描述
在这里插入图片描述
循环m(模式串的长度)次,就可以将所有可能的情况都取得了

相关文章:

数据结构--串、数组、广义表

这里写目录标题 串定义案例引用串的类型定义以及存储结构抽象类型定义存储结构(顺序表较为常用)顺序存储结构链式存储结构 串的模式匹配算法(查找主串中是否有某个字串)BF算法KMP算法设计思想对字串的回溯进行了优化代码对next【j】进行优化 数组类型一维…...

白银挑战——链表高频面试算法题

算法通关村第一关–链表白银挑战笔记 开始时间:2023年7月18日14:39:36 链表 Java中定义一个链表 class ListNode {public int val;public ListNode next;ListNode(int x) {val x;next null;}}1、四种方法解决两个链表第一个公共子节点 解释一下什么是公共节点 如…...

海外腾讯云账号:腾讯云高性能计算平台 THPC

高性能计算平台(TencentCloud High Performance Computing,THPC)是一款腾讯云自研的高性能计算资源管理服务,集成腾讯云上的计算、存储、网络等产品资源,并整合 HPC 专用作业管理调度、集群管理等软件,向用…...

eclipse 最新版没有navigator视图如何解决

使用project exploere视图可以显示类似navigator视图 1.显示project exploere视图 window---->show view --->project exploere 2.project exploere视图转换为类似navigator视图 第一步:点击视图右上角三个点或者倒三角,点击fiters and custom…...

Zynq-Linux移植学习笔记之62- PL挂载复旦微flash

1、背景介绍 现在为了全国产化需要,之前所有的进口flash全部要换成国产flash 2、复旦微flash型号 其中EFM25QU256和EFM25QL256对标winbond的w25q256 nor flash 3、FPGA设置 复旦微flash只支持单线模式,当使用PL侧的IP核访问时,需要设置模式…...

SpringBoot复习:(2)Tomcat容器是怎么启动的?

SpringApplication的run方法包含如下代码: 其中调用的refreshContext代码如下: 其中调用的refresh方法片段如下: 其中调用的refresh方法代码如下: 其中调用的super.refresh方法代码如下: public void refresh() th…...

1 MobileHomeTopicApplication

目录 1 OrderApplication 1.1 引用文件 1.2 #region 字段 1.3 #region 属性 OrderApplication 引用文件using System; using...

mpi4py包安装报错

报错情况 #include <mpi.h>^~~~~~~compilation terminated.failure.removing: _configtest.c _configtest.oerror: Cannot compile MPI programs. Check your configuration!!![end of output]note: This error originates from a subprocess, and is likely not a probl…...

C语言进阶-1

1、数据类型 1.1、基本数据类型 数据类型分2类&#xff1a;基本数据类型复合类型 基本类型&#xff1a;char short int long float double 复合类型&#xff1a;数组 结构体 共用体 类&#xff08;C语言没有类&#xff0c;C有&#xff09; 1.1.1、内存占用与sizeof运算符 数据…...

Python如何正确解决爬虫过程中的Cookie失效问题?

前言 本文是该专栏的第54篇,后面会持续分享python爬虫干货知识,记得关注。 在python爬虫项目中,Cookie是一种用于在客户端和服务器之间传递信息的技术。在爬取某些网站的时候,可能会需要登录才能正常获取到数据,这个时候就需要用到cookie来解决。通常情况下,需要将cooki…...

维护自己电脑浅析

作为一名计算机用户&#xff0c;维护自己的电脑是非常重要的&#xff0c;这可以保证电脑的正常运行、数据的安全、提高电脑的性能等。在本文中&#xff0c;我将分享一些我个人维护电脑的经验和技巧。 定期清理电脑 电脑在使用过程中会产生大量的临时文件、垃圾文件、缓存文件等…...

svo2论文

论文题目 SVO: Semidirect Visual Odometry for Monocular and Multicamera Systems 内容 1&#xff09; 具有最小特征漂移的长特征轨迹&#xff1b; 2&#xff09; 图像平面中的大量均匀分布的特征&#xff1b; 3&#xff09;新特征与旧地标的可靠关联&#xff08;即环路闭…...

【GoLang】MAC安装Go语言环境

小试牛刀 首先安装VScode软件 或者pycharmmac安装brew软件 brew install go 报了一个错误 不提供这个支持 重新brew install go 之后又重新brew reinstall go 使用go version 可以看到go 的版本 使用go env 可以看到go安装后的配置 配置一个环境变量 vim ~/.zshrc, # bre…...

epoll服务器创建

驱动 #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/io.h> #include <linux/device.h> #include <linux/uaccess.h> #include <linux/poll.h> unsigned int major; char kbuf[128]{0}…...

jdk11环境 提示“因为 accessExternalDTD 属性设置的限制导致不允许 ‘http‘ 访问“bug

在运行mybatis源码的时候&#xff0c;提示一下错误&#xff1a; Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession. ### Cause: org.apache.ibatis.builder.BuilderException: Error creating docum…...

Android Studio 的版本控制Git

Android Studio 的版本控制Git。 Git 是最流行的版本控制工具&#xff0c;本文介绍其在安卓开发环境Android Studio下的使用。 本文参考链接是&#xff1a;https://learntodroid.com/how-to-use-git-and-github-in-android-studio/ 一&#xff1a;Android Studio 中设置Git …...

一个 SpringBoot 项目能处理多少请求

首先&#xff0c;这个问题有坑&#xff0c;因为 spring boot 不处理请求&#xff0c;只是把现有的开源组件打包后进行了版本适配、预定义了一些开源组件的配置通过代码的方式进行自动装配进行简化开发。这是 spring boot 的价值。 使用 spring boot 进行开发相对于之前写配置文…...

Python中的r字符串前缀及其用法详解

Python中的r字符串前缀及其用法详解 1. 介绍 1.1 什么是r字符串前缀 在Python中&#xff0c;r字符串前缀是一种特殊的字符串前缀&#xff0c;用于表示原始字符串。当一个字符串以r前缀开始时&#xff0c;它将被视为原始字符串&#xff0c;其中的转义字符将被忽略。 1.2 r字…...

LabVIEW实现三相异步电机磁通模型

LabVIEW实现三相异步电机磁通模型 三相异步电动机由于经济和出色的机电坚固性而广泛用于工业化应用。这台机器的设计和驱动非常简单&#xff0c;但在控制扭矩和速度方面&#xff0c;它隐藏了相当大的功能复杂性。通过数学建模&#xff0c;可以理解机器动力学。 基于微分方程的…...

读书会-《影响力》

《影响力》这本书的作者罗伯特西奥迪尼时全球知名说服力研究权威。因其在影响力研究领域的开创性&#xff0c;人们将其称为“影响力研究领域的本杰明富兰克林”。这本书从人们的心理状态&#xff0c;进行了很多实验研究&#xff0c;总结出了7大规律。如果从事营销&#xff0c;需…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...