数据结构之数组高阶

  • 数组是一种具体的存储数据的方式,它可以用来实现线性表,但不是只能用来表示线性表,还可以表示,也可以表示图
  • 线性表是一个抽象的概念,表里的每个元素都有唯一的前驱和唯一的后继,所以元素们排成一条线,叫“线性”表
  • 线性表(数据结构)的底层用数组 (存储结构) 来实现叫做顺序表

1.多维数组

一. 多维数组的概念

image.png
image.png

二.多维数组的运算

image.png

三. 顺序存储方法

image.pngimage.png
例1:一个二维数组A,行下标的范围是1到6,列下标的范围是0到7,每个数组元素用相邻的6个字节存储,存储器按字节编址。
那么,这个数组的体积是288个字节。
答: Volume=mnL=(6-1+1)*(7- 0 +1)6=486=288
1685103129960(1).png
2ae83f74b6cef11de9454e177bd7068.jpg
image.png

矩阵的压缩存储

image.png

对称矩阵

image.png
image.png

三角矩阵

image.png
image.png
image.png

对角矩阵

image.png

稀疏矩阵

  1. 基本概念
  • 稀疏矩阵:非零元素的个数远远少于矩阵元素的总数的矩阵(s<<m*n)。
  • 压缩存储:只存储非零元素
  • 压缩存储特点:由于非零元素的分布是无规律的,在进行压缩存储后,将破坏原采用二维数组存储时所具有的随机存储特性。

稀疏矩阵的压缩存储通常有两种方式:三元组表和十字链表。

稀疏矩阵的压缩存储

问题:

  • 如果只存储稀疏矩阵中的非零元素,那这些元素的位置信息该如何表示?

解决思路:

  • 对每个非零元素增开若干存储单元,例如存放其所在的行号和列号,便可准确反映该元素所在位置。

实现方法:

  • 将每个非零元素用一个三元组(i,j,aij)来表示,则每个稀疏矩阵可用一个三元组表来表示。

三元组表

定义:
用一个三元组(i,j,aij)来表示稀疏矩阵中的一个非零元素aij,将表示稀疏矩阵中所有非零元素的三元组按行优先的原则顺序排列,得到一个其结点均为三元组的线性表,该表称为三元组表(结构组)。

image.png
所以,为了唯一确定一个稀疏矩阵,还必须存储矩阵的行、列数。为了运算实现的方便,通常将稀疏矩阵的行、列数与三元组表存储在一起。
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

广义表

image.png
补充说明:对于LS=(a1,a2,…,an)
1)LS:广义表的名字
2)n: 广义表的长度。E=(a,E )
3)如果ai是广义表, 则称它为LS的子表
4)书写时,用大写字母表示广义表,小写字母表示原子
5)若LS非空(n>=1),则a1是LS的表头,(a2,a3,…,an)构成的表称为LS的表尾
6)表是递归定义的,一个表的深度定义为表展开后所含括号的层数.D=(A,B,C )
7)如果规定任何表都是有名字的,为了即表明每个表的名字,又说明它的组成,则可以在每个表的前面冠以该表的名称。 D (A( ),B ( b,c,d), C (a, B(b,c,d) ) );
image.png
image.png

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gremmie2003

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值