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

第四章 数组、串、广义表

一、数组
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.mfbz.cn/a/45647.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

动手学DL——深度学习预备知识随笔【深度学习】【PyTorch】

文章目录 2、预备知识2.1、数据操作2.2、线性代数&矩阵计算2.3、导数2.4、基础优化方法 2、预备知识 2.1、数据操作 batch:以图片数据为例,一次读入的图片数量。 小批量样本可以充分利用GPU进行并行计算提高计算效率。 数据访问 数组:np…

Java运算符

大体上,与C语言差不多,不同的地方,我用红色字体标注了 算术运算符 1. 基本四则运算符:加减乘除模 ( - * / %) int a 10 ; int b 20 ; System . out . println ( a b ); // 30 System . out . println ( a - b…

二十三种设计模式第十八篇--责任链模式

责任链模式是一种行为型设计模式,它允许你将请求沿着处理者链传递,直到有一个处理者能够处理该请求为止。责任链模式将请求发送者和请求处理者解耦,从而使得多个处理者都有机会处理同一个请求。 该模式包含以下几个关键角色: 抽象…

macOS 源码编译 qpress

╰─➤ git clone https://github.com/PierreLvx/qpress.git ╰─➤ cd qpress ╰─➤ make g -O3 -o qpress -x c quicklz.c -x c qpress.cpp aio.cpp utilities.cpp -lpthread -Wall -Wextra -Werror ╰─➤ sudo make install …

k8s deployment(k8s经典版)|PetaExpress

Deployment是什么? Deployment是指在软件开发中将应用程序或系统部署到目标环境中的过程。它包括将代码编译、配置、打包并安装到目标服务器或设备上的步骤。k8s deployment是(k8s经典版)中用来管理发布的控制器,在开发的过程中使…

Ubuntu18.04系统安装视频剪辑软件shotcut

Snap Store安装 使用的是最新的Ubuntu 18.04 LTS(Bionic Beaver),其本身已安装Snap 如果没有安装,则可以使用以下命令安装SNAP $ sudo apt-get install snapd安装shotcut $ sudo snap install shotcut --classic启动shotcut $…

读kafka生产端源码,窥kafka设计之道(下)

背景 在上一篇文章《读kafka生产端源码,窥kafka设计之道(上)》 留下了kafka设计上比较优秀的一个点;内存的循环使用。本篇文章准备盘盘它。 好奇 为什么 kafka减少发送消息时向JVM频繁申请内存,就可以降低JVM GC的执…

【深度学习之YOLO8】视频流推断

官方V8模型下载 需要准备两个东西 simsun.ttc字体包YOLOv8官方模型成品 ScreenCapture屏幕图像类 import cv2 import mss import numpy as npclass ScreenCapture:"""parameters----------screen_resolution : Tuple[int, int]屏幕宽高,分别为x&a…

最新基于Citespace、vosviewer、R语言的文献计量学可视化分析技术及全流程文献可视化SCI论文高效写作方法

文献计量学是指用数学和统计学的方法,定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体,注重量化的综合性知识体系。特别是,信息可视化技术手段和方法的运用,可直观的展示主题的研究发展历程、研究现状、研究…

2023年Q2京东小家电市场数据分析(京东数据运营)

伴随人们对生活品质追求的提高,以及拥有新兴消费理念的年轻人逐渐成为消费主力,功能新潮、外观精致的小家电经常在电商平台销售榜单里“榜上有名”。本期我们便一起来分析Q2京东小家电市场中,一些较为热门的精致生活小电的行业大盘变动情况。…

使用node内置test runner,和 Jest say 拜拜

参考 https://nodejs.org/dist/latest-v20.x/docs/api/test.html#test-runner 在之前,我们写单元测试,必须安装第三方依赖包,而从node 20.0.0 版本之后,可以告别繁琐的第三方依赖包啦,可直接使用node的内置test runner…

js实现窗口的左右及上下拖拽

<template><div class"Drag2"><div class"box" ref"box"><div class"left"><!--左侧div内容--></div><div class"resize" title"左右侧边栏" draggable"true" …

Jupyter 安装、简单操作及工作路径更换

一、Jupyter下载安装 pip install jupyterAnaconda是Python另一个非常流行的发行版&#xff0c;它之后有着自己的叫做“conda”的安装工具。用户可以使用它来安装很多第三方包。然而&#xff0c;Anaconda会预装很多包&#xff0c;包括了Jupyter Notebook,所以若已经安装了Anac…

QT项目打包成软件进行发布的三种方式

目录 一、打包成绿色便携版 二、打包成单文件版 三、打包成可安装版本 本教程对应的IDE是Qt Creater。 保证绿色便携版能正常运行才能够打包成单文件版本和可安装版本。 一、打包成绿色便携版 特点&#xff1a;给别人发送的时候需要先制作成一个压缩包文件&#xff0c;解…

低代码未来的发展方向

&#x1f482; 个人网站:【办公神器】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 大的未来都是AI &#x…

vue element select下拉框回显展示数字

vue element select下拉框回显展示数字 问题截图&#xff1a; 下拉框显示数字可以从数据类型来分析错误&#xff0c;接收的数据类型是字符串&#xff0c;但是value是数字类型 <el-form-item prop"classifyLabelId" :label"$t(item.classifyLabelId)"…

Ceph版本

每个Ceph的版本都有一个英文的名称和一个数字形式的版本编号 第一个 Ceph 版本编号是 0.1&#xff0c;发布于2008 年 1月。之后是0.2,0.3....多年来&#xff0c;版本号方案一直没变。 2015年 4月0.94.1 (Hammer 的第一个修正版) 发布后&#xff0c;为了避免 0.99 (以及 0.100…

vue预览和下载txt、PDF、execl等在线文件

因为浏览器默认能直接打开TXT、PDF等文件索引默认就是点击链接打开文件。但是浏览器却又不能在线打开execl、world等文件。 现在我们可以统一的实现文件的预览以及下载。 下载文件 downloadfile方法 downloadfile(url,fileName){const newUrl url;const x new XMLHttpRequ…

解决报错:Can‘t connect to HTTPS URL because the SSL module is not available.

本人今天准备打开安装一个label-studio包&#xff0c;试了很多次&#xff0c;接连报如下错误&#xff0c;因此我就去找了一些解决方案&#xff0c;现在总结如下&#xff1a; 1、报错信息如下 2、解决方案如下&#xff1a; github上有对应的解决方案&#xff0c;链接&#xff…

干货分享 | TSMaster图形模块功能详解(一)—— 以CAN信号为例

“ 本文目录&#xff1a; 1、信号的导入与删除 1.1 CAN信号的导入 1.2 添加系统变量 1.3 自定义信号 1.4 信号的删除 1.5 清除信号数据 2、图形分栏 2.1 添加分栏 2.2 平均分配分栏高度 2.3 分栏上移与下移 2.4 删除分栏 3、暂停与启动和禁止图形 4、高亮信号相关操…
最新文章