数组的压缩存储(数据结构学习笔记)


数组

数组的存储结构

在设计数组的存储结构时,通常将数组的所有元素存储到存储器的一块地址连续的内存单元中,即数组特别适合采用顺序存储结构来存储。

一维数组的存储结构

对于一维数组(a1,a2,···,ai,···,an),按元素顺序存储到一块地址连续的内存单元中,假设第一个元素a1的存储地址用LOC(a1)表示,每个元素占用k个存储单元,则任一数组元素ai的存储地址LOC(ai)可用以下公式求出:

LOC(ai) = LOC(a1) + ( i - 1 ) * k    (i>=2&&i<=n)

二维数组的存储结构

对于一个m行n列的二维数组A[m][n]:

在这里插入图片描述

一、二维数组按行优先存放

即先存储第1行,紧接着存储第2行······依此类推,最后存储第m行

在这里插入图片描述

最终的存储示意图:

在这里插入图片描述

按照行优存放时,任一一个元素a[i][j]的存储地址可以得出:
(假设第一个元素a[1][1]的存储地址为LOC(a[1][1])表示,每个元素占用k个存储单元)

在这里插入图片描述

LOC(a[i][j]) = LOC(a[1][1]) + [( i - 1) * n + ( j - 1 )] * k

二、二维数组按列优先存放

即先存储第1列,紧接着存储第2列······依此类推,最后存储第m列
同理如“按行优先存放的推导过程”

按照列优存放时,任一一个元素a[i][j]的存储地址可以得出:
(假设第一个元素a[1][1]的存储地址为LOC(a[1][1])表示,每个元素占用k个存储单元)

LOC(a[i][j]) = LOC(a[1][1]) + [( j - 1 ) * m + ( i - 1 )] * k

特殊矩阵的压缩存储

一、对称矩阵的压缩存储

若一个n阶方阵A[n][n]中的元素满足a[i][j]=a[j][i](0≤i,j≤n-1),则称其为n阶对称矩阵

在这里插入图片描述

以行序为主序存储其下三角+主对角线的元素。

在这里插入图片描述

下三角+主对角线的元素存储的下标k与二维数组中的下标i,j的对应关系:

在这里插入图片描述

上三角的元素存储(上三角元素值与下三角值对称相等):

在这里插入图片描述

整个对称矩阵的压缩存储:

在这里插入图片描述

二、上、下三角矩阵的压缩存储

上三角矩阵

上三角矩阵的特点是:下三角为一个固定的常数c。

在这里插入图片描述

上三角的压缩存储示意图:

在这里插入图片描述

上三角+主对角线的元素存储的下标k与二维数组中的下标i,j的对应关系:

在这里插入图片描述

下三角矩阵

下三角矩阵的特点是:上三角为一个固定的常数c。

在这里插入图片描述

上三角的压缩存储示意图:

14

上三角+主对角线的元素存储的下标k与二维数组中的下标i,j的对应关系:

在这里插入图片描述

三、对角矩阵的压缩存储

在这里插入图片描述

对称矩阵的压缩存储示意图以及对应关系:

在这里插入图片描述

  • 学习数据结构教程(第五版)——李春葆教授主编
  • 图片来源于MOOC,数据结构——武汉大学——李春葆教授
  • (如若侵权可联系QQ删除)
  • 6
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值