数据结构—数组和广义表

4.2数组

数组:按一定格式排列起来的,具有相同类型的数据元素的集合。

**一维数组:**若线性表中的数据元素为非结果的简单元素,则称为一维数组。

**一维数组的逻辑结构:**线性结构,定长的线性表。

**声明格式:**数据类型 变量名称 [长度] ;

例如:int num[5] = {0,1,2,3,4};

**二维数组:**若一维数组中的数据元素又是一维数组结构,则称为二维数组。

二维数组的逻辑结构:

  1. 非线性结构:每一个数据元素既在一个行表中,又在一个列表中。
  2. 线性结构定长的线性表:该线性表的每个数据元素也是一个定长的线性表。

**声明格式:**数据类型 变量名称 [行数] [列数];

例如:int num [5] [8];

在C语言中,一个二维数组类型也可以定义为一维数组类型(其分量类型为一维数组类型),即:

  typedef int array2[m][n];
等价于:typedef int array1[n];typedef array1 array2[m];

**三维数组:**若二维数组中的元素又是一个一维数组,则称作三维数组。

**n维数组:**若 n - 1 维数组中的元素又是一个一维数组结构,则称作 n 维数组。

**结论:**线性表结构是数组结构的一个特例,而数组结构又是线性表结构的扩展。

**数组特点:**结构固定——定义后,维数和维界不再改变。

**数组基本操作:**除了结构的初始化和销毁之外,只有取元素和修改元素值的操作。

4.2.1数组的顺序存储结构

数组特点:结构固定——维数和维界不变。

一般都是采用顺序存储结构来表示数组。

**注意:**数组可以是多维的,但存储数据元素的内存单元地址是一维的,因此,在存储数组结构之前,需要解决将多维关系映射到一维关系的问题。

一维数组:

例:有数组定义:int a[5]

每个元素占用4字节,假设a[0]存储在2000单元,a[3]地址是多少?

LOC(0) = a = 2000 L=4

LOC(3) = 3*4+2000

LOC(i) = i*L + 首地址

存储单元是一维结构,而数组是个多维结构,则用一组连续存储单元存放数组的数据元素就有个次序约定问题。

二维数组可有两种存储方式:

  1. 以行序为主序;

    设数组开始存储位置LOC(0,0),存储每个元素需要L个存储单元

    数组元素a[i] [j]的存储位置是:LOC(i,j)=LOC(0,0) + (n * i + j) * L

  2. 以列序为主序。

**三维数组:**按页/行/列存放,页优先的顺序存储。

4.2.2特殊矩阵的压缩存储

**矩阵:**一个由 m*n 个元素排成的 m 行 n 列的表。

**矩阵的常规存储:**将矩阵描述为一个二维数组。

矩阵的常规存储的特点:

  1. 可以对其元素进行随机存取。
  2. 矩阵运算非常简单;存储的密度为1.

**不适宜常规存储的矩阵:**值相同的元素很多且呈某种规律分布;零元素多。

**矩阵的压缩存储:**为多个相同的非零元素只分配一个存储空间;对零元素不分配空间。

第四章 变 换 - 小专栏

1、什么是压缩存储

若多个数据元素的值都相同,则只分配一个元素值的存储空间,且零元素不占存储空间。

2、什么样的矩阵能够压缩?

一些特殊矩阵,如:对称矩阵,对角矩阵,三角矩阵,稀疏矩阵等。

3、什么叫稀疏矩阵?

矩阵中非零元素的个数较少(一般小于5%)

1.对称矩阵

10421 - 对称矩阵

**【特点】:**在 n*n 的矩阵 a 中,满足如下性质:aij=aji(1≤i , j≤n)

**【存储方法】:**只存储下(或者上)三角(包括主对角线)的数据元素。共占用 n(n+1)/2个元素空间。

**【存储结构】:**对称矩阵上下三角中的元素数均为:n(n+1)/2

​ 可以以行序为主序将元素存放在一个一维数组 sa[ n(n+1)/2 ]中。

2.三角矩阵

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6FofxLkg-1690537372616)(https://tse1-mm.cn.bing.net/th?id=OIF-C.uHr%2bn0jNJ2j8NRD2iircPA&pid=ImgDet&rs=1)]

**【特点】:**对角线以下(或者以上)的数据元素(不包括对角线)全部为常数c。

**【存储方法】:**重复元素c共享一个元素存储空间,共占用n(n+1)/2+1个元素空间:[1…n(n+1)/2+1]

上三角矩阵:

特殊矩阵的压缩存储_Faith_xzc的博客-CSDN博客

下三角矩阵:

三角矩阵压缩 的图像结果

3.对角矩阵(带状矩阵)

img

**【特点】:**在n*n的方阵中,所有非零元素都集中在以主对角线为中心的带状区域中,区域外的值全为0,则称为对角矩阵。常见的有三对角矩阵、五对角矩阵、七对角矩阵等。

数据结构和算法基础-听课摘抄8-串、数组和广义表 - 知乎

4.稀疏矩阵

**稀疏矩阵:**设在 m*n 的矩阵中有 t 个非零元素。

​ 令 δ = t / (m*n)

​ 当 δ ≤ 0.05 时称为稀疏矩阵。

(十五)稀疏矩阵和三元组稀疏矩阵压缩算法_靠谱的混蛋的博客-CSDN博客_稀疏矩阵压缩算法

**压缩存储原则:**存各非零元素的值,行列位置和矩阵的行列数。

4.1三元组顺序表

稀疏矩阵之基于数组形式实现COO和CSR_chenxina7314的博客-CSDN博客

注意:为更可靠描述,通常再加一个“总体”信息:即总行数、总列数、非零元素总个数。

三元组顺序表又称有序的双下标法。

三元组顺序表的优点:非零元素在表中按行序有序存储,因此便于进行依行顺序处理的矩阵运算。

三元组顺序表的缺点:不能随机存取。若按行号存取某一行中的非零元素,则需从头开始进行查找。

4.2十字链表
  • **优点:**它能够灵活地插入因运算而产生的新的非零元素,删除因运算而产生的新的零元素,实现矩阵的各种运算。

  • 在十字链表中,矩阵的每一个非零元素用一个结点表示,该结点除了(row,col,value)以外,还要有两个域:

    • right:用于链接同一行中的下一个非零元素。
    • down:用以链接同一列中的下一个非零元素。
  • 十字链表中结点的结构示意图:

    img

    十字链表法,十字链表压缩存储稀疏矩阵详解

4.3广义表

4.3.1广义表定义

广义表(又称列表Lists)是n≥0个元素 a0,a1,…,an-1的有限序列,其中每一个ai或者是原子,或者是一个广义表。

例如:中国举办的国际足球邀请赛,参赛队伍名单可表示如下:

(阿根廷,巴西,德国,法国,(),西班牙,意大利,英国,(国家队,山东鲁能,广州恒大))

在这个表中,叙利亚队应排在法国队的后面,但未能参加,成为空表。国家队,山东鲁队,广州恒大均作为东道主的参赛队参加,构成一个小的线性表,成为原线性表的一个数据元素。这种拓宽了的线性表就是广义表。

  • 广义表通常记作:LS=( a1,a2,…,an

  • 习惯上,一般用大写字母表示广义表小写字母表示原子

  • **表头:**若LS非空(n≥1),则其第一个元素a1就是表头。记作head(LS)=a1.

    注意:表头可以是原子,也可以是子表。

  • 表尾除表头之外的其他元素组成的表。记作tail(LS)=(a2,…,an)

    注意:表尾不是最后一个元素,而是一个子表。

    例如:(1) A=() 空表,长度为0

    ​ (2)B=(( )) 长度为1,表头、表尾均为()。

    ​ (3)C=(a,(b,c)) 长度为2,由原子a和子表(b,c)构成。表头为a,表尾为((b,c))

    ​ (4)D=(x,y,z) 长度为3,每一项都是原子。表头为x,表尾为(y,z)

    ​ (5)E=(C,D) 长度为2,每一项都是子表。表头为C,表尾为(D)

    ​ (6)F=(a,F) 长度为2,第一项为原子,第二项为它本身。表头为a,表尾为(F)。F=(a,(a,(a,…)))

4.3.2广义表的性质

  1. 广义表的数据元素有相对应次序;一个直接前驱和一个直接后继。

  2. 广义表的长度定义为最外层所包括元素的个数,如C=(a,(b,c))是长度为2的广义表。

  3. 广义表的深度定义为该广义表展开后所含括号的重数

    注意:“原子”的深度为0;“空表”的深度为1。

  4. 广义表可以为其他广义表共享:如:广义表B就共享表A。在B中不必列出A的值,而是通过名称来引用。B=(A)

  5. 广义表可以是一个递归的表。

    注意:递归表的深度是无穷值,长度是有限值。

  6. 广义表是一个多层次结构,广义表的元素可以是单元数,也可以是子表,而子表的元素还可以是子表。

    二叉树的存储方式_长颈鹿仙女的博客-CSDN博客_二叉树的存储方式

4.3.3广义表和线性表的区别

广义表可以看成是线性表的推广线性表是广义表的特例

广义表的结构相当灵活,在某种前提下,它可以兼容线性表、数组、数和有向图等各种常见的数据结构。

当二维数组的每行(或每列)作为子表处理时,二维数组即为一个广义表。

另外,数和有向图也可以用广义表来表示。

由于广义表不仅集中了线性表,数组,数和有向图等常见数据结构的特点,而且可有效地利用存储空间,因此在计算机的许多应用领域都有成功使用广义表的实例。

4.3.4广义表的基本运算

  1. 求表头GetHead(L):非空广义表的第一个元素,可以是一个单一元素,也可以是一个子表。
  2. 求表尾GetTail(L):非空广义表除去表头元素以外其他元素所构成的表,表尾一定是一个表。

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

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

相关文章

TD1850多用表校准系统参考标准

参考标准 分类 标准名称 国家标准 GB/T 13978-2008 数字多用表 GB/T 15637-2012 数字多用表校准仪通用规范 计量法规 JJF 1075-2015 钳形电流表校准规范 JJF 1284-2011 交直流电表校验仪校准规范 JJF 1587-2016 数字多用表校准规范 JJG 124-2005 电流表、电压表、功率表及…

【多模态】18、ViLD | 通过对视觉和语言知识蒸馏来实现开集目标检测(ICLR2022)

文章目录 一、背景二、方法2.1 对新类别的定位 Localization2.2 使用 cropped regions 进行开放词汇检测2.3 ViLD 三、效果 论文:Open-vocabulary Object Detection via Vision and Language Knowledge Distillation 代码:https://github.com/tensorflo…

三子棋(超详解+完整码源)

三子棋 前言一,游戏规则二,所需文件三,创建菜单四,游戏核心内容实现1.棋盘初始化1.棋盘展示3.玩家下棋4.电脑下棋5.游戏胜负判断6.game()函数内部具体实现 四,游戏运行实操 前言 C语言实现三子棋…

8.10 PowerBI系列之DAX函数专题-TopN中实现动态指标

需求 实现 建立一个辅助表供切片器选择 2 建立条件判断度量值top_measure swich(true(),selectedvalue(table[tope_type])"按数量top",sum(order_2[产品数量]),selectedvalue(table[tope_type])"按金额top",sum(order_2[订单金额]),selectedvalue(table…

aop实现方式及基本使用

aop实现方式 aspectj 编译器增强,直接修改源码可以不借助Spring实现 也没有用代理对象 (ajc编译器) aop 的原理并非代理一种, 编译器也能玩出花样(直接修改源码) 运行时需要在 VM options 里加入 -javaagent:D:/envir…

Matlab的SimuLink对FS32K144编程--内部数据存储Flash

​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ 前言 Flah擦写是由寿命的,应当减免无效的擦写,如数据值不变不进行擦写 1、新建工程完成后,拖出Flash的存储控制初始化…

ROS 2 — 托管(生命周期)节点简介

一、说明 这篇文章是关于理解ROS 2中托管(生命周期)节点的概念。我们描述了概念性的想法以及我们为什么需要它。所以让我们开始吧! 二、托管式节点 — 什么和为什么? 为了理解托管式节点,让我们从一个简单的问题陈述开…

串口通讯接口类型:TTL、RS232和RS485(电平标准)

串口通讯接口类型:TTL、RS232和RS485 在串口通信中,常用的接口类型包括TTL、RS-232和RS-485,TTL、RS-232、RS422、RS-485是指的电平标准(电信号)。 通信协议规定了数据传输的规则和格式,包括数据的起始位、停止位、数据位数、校…

内网穿透远程查看内网监控摄像头

内网穿透远程查看内网监控摄像头 在现代社会中,大家总是奔波于家和公司之间。大部分时间用于工作中,也就很难及时知晓家中的动态情况,对于家中有老人、小孩或宠物的(甚至对居住环境安全不放心的),这已然是…

Retrospectives on the Embodied AI Workshop(嵌入式人工智能研讨会回顾) 论文阅读

论文信息 题目:Retrospectives on the Embodied AI Workshop 作者:Matt Deitke, Dhruv Batra, Yonatan Bisk 来源:arXiv 论文地址:https://arxiv.org/pdf/2210.06849 Abstract 我们的分析重点关注 CVPR Embodied AI Workshop 上…

JiaYu说:如何做好IT类的技术面试?

IT类的技术面试 面试IT公司的小技巧IT技术面试常见的问题嵌入式技术面试嵌入式技术面试常见的问题嵌入式软件/硬件面试题 JiaYu归属嵌入式行业,所以这里只是以普通程序员的角度去分析技术面试的技巧 当然,也对嵌入式技术面试做了小总结,友友们…

vite / nuxt3 项目使用define配置/自定义,可以使用process.env.xxx获取的环境变量

每日鸡汤:每个你想要学习的瞬间,都是未来的你向自己求救 首先可以看一下我的这篇文章了解一下关于 process.env 的环境变量。 对于vite项目,在我们初始化项目之后,在浏览器中打印 process.env,只有 NODE_ENV这个变量&…

【组内工作】木马回联

文章目录 C2服务器安装和运行方法CrossC2运行方法sliver运行方法empire安装方法DeimosC2安装教程TrevorC2安装教程: C2服务器的流量特征CrossC21. 心跳包2. 命令3. ja3/ja3s Sliver1. http2. https empirehttphttps DeimosC2https TrevorC2 C2服务器安装和运行方法 …

iperf3 编译安装及网讯WX1860千兆网口测试

iperf3 编译安装及网讯1860千兆网口测试 编译安装 安装包下载地址:https://github.com/esnet/iperf/archive/refs/tags/3.8.tar.gz 将安装包iperf-3.8.tar.gz拷贝测试系统盘桌面,使用如下命令进行编译安装: tar zxvf iperf-3.8.tar.gz cd iperf-3.8 ./configure make s…

HDFS基本操作命令

这里写目录标题 HDFS Shell CLI客户端说明常用命令hadoop fs -mkdir [-p] <path>hadoop fs -ls [-h] [-R] [<path>...]上传文件到指定目录下方法一:hadoop fs -put [-f] [-p] <localsrc>.....<dst>方法二&#xff1a;hadoop fs -moveFromLocal <loc…

Vue源码学习 - 异步更新队列 和 nextTick原理

目录 前言一、Vue异步更新队列二、nextTick 用法三、原理分析四、nextTick 源码解析1&#xff09;环境判断2&#xff09;nextTick() 五、补充 前言 在我们使用Vue的过程中&#xff0c;基本大部分的 watcher 更新都需要经过 异步更新 的处理。而 nextTick 则是异步更新的核心。…

MacOS本地安装Hadoop3

金翅大鹏盖世英&#xff0c;展翅金鹏盖世雄。 穿云燕子锡今鸽&#xff0c;踏雪无痕花云平。 ---------------- 本文密钥&#xff1a;338 ----------------- 本文描述了在macbook pro的macos上安装hadoop3的过程&#xff0c;也可以作为在任何类linux平台上安装hadoop3借鉴。 …

4、Linux驱动开发:设备-设备号设备号注册

目录 &#x1f345;点击这里查看所有博文 随着自己工作的进行&#xff0c;接触到的技术栈也越来越多。给我一个很直观的感受就是&#xff0c;某一项技术/经验在刚开始接触的时候都记得很清楚。往往过了几个月都会忘记的差不多了&#xff0c;只有经常会用到的东西才有可能真正记…

Verilog语法学习——LV2_异步复位的串联T触发器

LV2_异步复位的串联T触发器 题目来源于牛客网 [牛客网在线编程_Verilog篇_Verilog快速入门 (nowcoder.com)](https://www.nowcoder.com/exam/oj?page1&tabVerilog篇&topicId301) 题目 题目描述&#xff1a; 用verilog实现两个串联的异步复位的T触发器的逻辑&#x…

【LeetCode】141.环形链表

题目 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&#…