数据结构【数组、串、广义表】

news2024/11/24 17:22:42

第四章 数组、串、广义表

一、数组
1.概念:线性表是通过数组实现的,数组是线性表的推广,数组只有存取元素和修改元素的操作(除了初始化和销毁);
2.数组的存储结构:一个数组的所有元素在内存中占用一段连续的存储空间(顺序存储);

  • 以行为主顺序优先存储;
  • 以列为主顺序优先存储。

3.矩阵的压缩存储(节约空间)

  • 对称矩阵:元素关于主对角线对称,利于节约空间,n*(n+1)/2;
    在这里插入图片描述
  • 三角矩阵:上三角或者下三角均为同一个常量,n*(n+1)/2+1;
    在这里插入图片描述
  • 三对角矩阵:第一行和最后一行有2非0数字,其余都是3个非0数字,3n-2;转化为一维数组的话,下标是k=2i+j-1(i是这个元素的纵坐标,j是横坐标);
    在这里插入图片描述
  • 稀疏矩阵:三元组(i,j,v)记录了非零元素的行号i、列号j以及非零的元素v(一般压缩存储方法有三元组顺序表和十字链表);
    在这里插入图片描述

二、串
1.概念:特殊的线性表,数据元素是仅是一个字符组成,所以串是由0个或多个字符组成的有限序列;无元素叫空串(空格串不是空串),包含子串的叫主串,默认以1开头;
2.基本存储方式:顺序存储和链式存储;
3.子串:串中任意连续字符组成的子序列,空串是任意串的子串,任意串是其自身的子串;

  • 长度为n的字符串的子串个数:
    • 有n(n+1)/2 +1个子串;
    • 非空子串:n(n+1)/2;
    • 非空真子串:n(n+1)/2-1。

4.串相等:两串串值相等(相同),但两串长度相等时,各个对应位置的字符都相等才相等;
5.串的模式匹配算法:简单说就是在文本中查找某字符;

  • 简单匹配:时间复杂度O(n*m),n和m分别是主串和模式串(子串)的长度;
    在这里插入图片描述
  • KMP算法:相对比较方便
    在这里插入图片描述
  • 前缀:第一个字母开头,不包括全部;如:absd,前缀是a、ab、ads;
  • 后缀:最后一个字母开头,不包括全部;如:absd,后缀是d、sd、bsd;
  • 求next:next[1]=0,前后缀重合时加1,否则就是1;
    在这里插入图片描述

三、广义表
1.概念:简称表,一种递归的数据结构,通常使用链式存储结构;时线性表的推广,由于有两种数据元素,所以需要两种结构的结点,表结点和原子结点;
在这里插入图片描述
2.特征:

  • 广度:定义最外层包含的元素个数,把最外层的括号去掉就很明显了;
  • 深度:定义所含弧的重数;原子深度为0,空表为1;
  • 任何一个非空广义表GL可分解为表头head(GL)=al和表尾tail(GL)=(a2,…,an)两部分;
  • 小写字母表示原子,大写字母表示广义表表名;
  • 例子:A=()
    B=(e)
    C=(a,(bcd))
    D=(A,B,C)=((),(e),(a,(b,cd)) E=((a,(a,b),((a,b),c)))
    A是一个空表,其长度为0,其深度为1;
    B是只含有单个原子e的表,其长度为1其深度为1:
    C有两个元素,一个是原子a,另一个是子表,其长度为2,其深度为2;
    D有三个元素,每个元素都是一个表,其长度为3,其深度为3;
    E中只含有一个元素,是一个表,它的长度为1,其深度为4;
  • 表结点的三个域:标志域、指示表头的指针的指针域、指示表尾的指针的指针域,tag=1;
  • 原子域:两个域,标志域和值域,tag=0;
    在这里插入图片描述
    3.广义表中的head和tail的运算
  • 表头:表中第一个元素,可以是原子、子表;
  • 表尾:必定时子表
  • 操作:取出
    • 例题:已知广义表LS=((a,b,c),(d,e,f)),取出e,使用tail和head如何取出来?tail(LS)=((d,e,f))
      head(tail(LS))=(def) tail(head(tail(LS)))=(e,f) //无论如何都会加上这个()括号
      head(tail(head(tail(Ls)))=e //head可以去除单个元素

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

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

相关文章

第八章:list类

系列文章目录 文章目录 系列文章目录前言list的介绍及使用list的介绍list的使用list的构造函数list的迭代器list的容量list的成员访问list的增删改查 list与vector的对比总结 前言 list是STL的一种链表类,可以在常数范围内在任意位置进行插入和删除的序列式容器。 …

【iOS】isKindOfClass和isMemberOfClass方法

前言 这个归根结底还是在考察我们对isa走向图和类的继承的理解,也就是苹果官方这幅图: 接下来的函数调用流程请参考这张图。 1 isKindOfClass方法 1.1 objc_opt_isKindOfClass C函数 查看源码可发现,无论是谁调用isKindOfClass方法都会…

系统学习Linux-MySQL服务基础(一)

一、MySQL服务概述 什么是数据库? 将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合 数据库是存储、管理和操作组织化数据的软件系统 数据库能干什么? 企业应用存放用户数据、管理企业数据金融行业存储分析客户的财务…

Stable Diffusion在各种显卡上的加速方式测试,最高可以提速211.2%

Stable Diffusion是一种基于扩散模型的图像生成技术,能够从文本生成高质量的图像,适用于CG,插图和高分辨率壁纸等领域。 但是它计算过程复杂,使得它的生成速度较慢。所以研究人员就创造了各种提高其速度的方式,比如Xf…

Springboot读取配置的一些方式

从配置文件中获取属性应该是SpringBoot开发中最为常用的功能之一,但就是这么常用的功能,仍然有很多开发者在这个方面踩坑。 下面整理了几种获取配置属性的方式,弄清配置加载、读取的底层原理,一旦出现问题可以分析。 以下示例源…

Linux基础开发工具之Linux编译器的使用(gcc/g++)

目录 前言 1.背景知识介绍 2.预处理阶段 3.编译阶段 4.汇编阶段 5.链接过程 5.1 函数库 5.1.1 静态库和动态库 5.2 链接过程的具体内容 总结 前言 大家好呀,许久没给大家更新了,对于我们在Linux环境下编程,之前小编只是给大家介绍…

Ubuntu安装JDK与IntelliJ IDEA

目录 前言 Ubuntu安装JDK 1、更新软件包列表 2、安装OpenJDK 3、验证安装 Ubuntu安装IntelliJ IDEA 1、下载 IntelliJ IDEA 2、解压缩 IntelliJ IDEA 安装包 3、移动 IntelliJ IDEA 到安装目录 4、启动 IntelliJ IDEA 前言 APT(Advanced Package Too…

react 在build读取env 数据

默认会读取.env 文件 npm install dotenv --save npm install dotenv-cli --save-dev例如读取.env.test "build:test": "dotenv -e .env.test react-app-rewired build",.env.test REACT_APP_CURRENTMODE devREACT_APP_Public_Path "https://baid…

VUE中的生命周期、每个生命周期可以干什么

生命周期 就VUE来说就是一个程序的即将创建到销毁的一个过程,也就是vm对象实例从创建到最终销毁的过程。 VUE生命周期4个阶段8个钩子函数(到某一阶段自动调用的函数) 1.初始阶段(虚拟的DOM生成) beforeCreate() 初始化事件对象和生命周期…

width: calc(~“100% - 267px“);动态css 调样式

.result-filtering {color: #8b8b8b;display: flex;// width: 82.6%;width: calc(~"100% - 267px");}

证书文件无法生成.p12

做好的证书文件在生成.p12文件的过程中遇到了.p12选项置灰且无法选择并导出的情况 解决办法 起初认为生成的空白 CertificateSigningRequest 有问题,反反复复尝试几次制作后均无效; 而后发现问题出在了钥匙串访问的选项问题上 ... 将顶部菜单 tab 由"所有选项"切换至…

ActivityWatch配置跨平台同步(没弄完)

安装完后马上给你来个下马威&#xff1a; 具体内容如下&#xff1a; Traceback (most recent call last): File "aw_qt\__main__.py", line 3, in <module> File "click\core.py", line 1130, in __call__ File "click\core.py", l…

docker制作compose

第一步&#xff0c;先了解Compose是什么&#xff1f; Compose 项目是 Docker 官方的开源项目&#xff0c;负责实现对 Docker 容器集群的快速编排。 Compose有两个重要的概念 1.项目 &#xff1a;由一组关联的应用容器组成的一个完整业务单元&#xff0c;在docker-compose.ym…

最受欢迎的8种编程语言解析_kaic

国内目前最受欢迎的8种编程语言解析 在过去的 17 个月&#xff08;2022 年 1 月至 2023 年 5 月&#xff09;时间里&#xff0c;DevJobsScanner 通过分析超 1400 万个开发人员职位&#xff0c;并从中筛选了有明确编程语言需求的职位&#xff0c;得出了在 2023 年需求量最大的 …

Socket基本原理详解

socket的概念 故事要从一个插头说起。 插头与插座 当我将插头插入插座&#xff0c;那看起来就像是将两者连起来了。 风扇与电力系统建立"连接" 而插座的英文&#xff0c;又叫socket。 巧了&#xff0c;我们程序员搞网络编程时也会用到一个叫socket的东西。 其实两者…

[算法通关村] 1.1 单向链表的创建

各位读者朋友们&#xff0c; 从今天开始&#xff0c;我将通过博文的形式&#xff0c;概述数据结构中应知必会的基本算法&#xff0c; 由于我更加熟悉 Java 语言&#xff0c;所以全程使用 Java 语言进行叙述&#xff0c; 如果您发现了文章中的错误&#xff0c;请您不吝赐教。 什…

HCIP——OSPF综合实验

OSPF实验 一、实验拓扑二、实验要求三、实验思路四、实验步骤1、配置接口IP地址以及环回2、配置缺省路由3、配置MGRE环境4、配置OSPF5、修改网络类型6、重发布7、配置汇总空接口防环8、配置特殊区域&#xff1a;9、配置NAT环境10、加快收敛11、配置接口认证12、测试 一、实验拓…

ModHeader插件

ModHeader浏览器插件下载装载地址&#xff1a;&#xff08;microsoftedge&#xff09;ModHeader - Modify HTTP headers - Microsoft Edge Addonshttps://microsoftedge.microsoft.com/addons/detail/modheader-modify-http-h/opgbiafapkbbnbnjcdomjaghbckfkglc?refidbingshor…

MySQL 主从复制的认识 2023.07.23

一、理解MySQL主从复制原理 1、概念&#xff1a;主从复制是用来建立一个和 主数据库完全一样的数据库环境称为从数据库&#xff1b;主数据库一般是准实时的业务数据库。 2、作用&#xff1a;灾备、数据分布、负载平衡、读写分离、提高并发能力 3、原理图 4、具体步骤 (1) M…

微服务远程调用openFeign简单回顾

目录 一. OpenFeign简介 二. OpenFeign原理 演示使用 provider模块 消费者模块 配置全局feign日志 示例源代码: 一. OpenFeign简介 OpenFeign是SpringCloud服务调用中间件&#xff0c;可以帮助代理服务API接口。并且可以解析SpringMVC的RequestMapping注解下的接口&#x…