文章目录
- 前言
- 二、特殊矩阵的压缩存储
- 数组的存储结构和实现
- 按行优先存储
- 按列优先存储
- 矩阵的压缩存储
- 稀疏矩阵
- 广义表
- 总结
前言
数组,数组的压缩存储,广义表
二、特殊矩阵的压缩存储
数组的存储结构和实现
对于多维数组,可以分为按行优先存储和按列优先存储,但都是按顺序存放在一个连续的空间中
按行优先存储
aij:aij前有n*(i-1)个元素
在第i行的aij前共有(j-1)个元素
LOC(aij)=LOC(a11)+[(i-1)n+(j-1)]*L
例:二维数组M的每个元素含4个字符,每个字符占用一个存储单元,行下标i从1变到5,列下标从1到6,那么按行存储是元素M[4][6]的起始地址为()
M[4][6]=LOC(a11)+(3*6+5)4= LOC(a11)+234
按列优先存储
Loc(aij)=Loc(a11)+[(j-1)*m+(i-1)]*L
例:一个二维数组中,每个元素占用3个存储单元,行标从1到8,列从1到10,则A[8][5]的起始地址应该是?
按行:A[8][5]=(7*10+4)3+Loc(a11)=743+Loc(a11)
按列:A[8][5]=(4*8+7)*3+Loc(a11)=Loc(a11)+117
`例:设数组a[1…60,1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为_______
按行:(31*70+57)*2+2048
按列:(57*60+31)*2+2048
矩阵的压缩存储
压缩存储:为多个值相同的元素只分配一个存储空间,对0不分配存储空间
特殊矩阵:具有许多相同元素或0元素,分布有一定规律的矩阵(对称矩阵、上下三角矩阵、对角矩阵)
对称矩阵: n阶方阵中,按主对角线对称,只存放主对角线和下三角元素(或上三角元素,又或按行或者按列存储)(共n(n+1)/2)
三角矩阵: 上或下三角矩阵,其另外一角都为同一常数,存储完对角线和下三角元素后,紧接着存储上三角元素一次(共n(n+1)/2+1)
三对角矩阵: 所有元素集中在三条主对角线上,其余均为0;(i,j)元素在数组中的下标为k=2i+j-3,反之,若元素在数组中第k个位置,则 i=(k+1)/3+1向下取整,j=k-2i+3i 取下限
稀疏矩阵
定义:非零元较零元少,且分布没有一定规律的矩阵
压缩存储原则:只存矩阵的行列维数和每个非零元的行列下标及其值
三元组:一个稀疏矩阵所有非零元素三元组的集合,再增加一个表示矩阵行数,列数和非零元个数的特殊三元组,就可以唯一地确定一个稀疏矩阵,把这些三元组的总体,称为该稀疏矩阵的“三元组表”
广义表
- 定义:是一种特殊的线性表,表中的数据元素,既可以是原子,也可以是子表
- 广义表的表长:广义表中数据元素的个数
例:
A=( ) 表长n=0
B= (a) 表长n=1
C=(a,(b,c,d)) 表长n=2
D=(A,B,C)=(( ),(a),(a(b,c,d))) 表长n=3
- 广义表的深度:广义表中括号的重数
- 广义表的头和尾
A(e)
表头:Head(A)=e
表尾:Tail(A)=( ) - 广义表的表头:广义表中第一个数据元素,既可以是原子,也可以是子表
- 广义表的表尾:广义表中除了表头,剩下都是尾,必须是子表
``
总结
- 数组
- 矩阵的压缩存储
- 广义表