目录
下一篇:串的定义和基本操作
一、一维数组的存储结构
ElemType a[10]
内存
各数组元素大小相同,且物理上连续存放
存放地址=LOC+i*sizeof(ElemType) (0<=0<=10)
注:除非题目说明,则数组下标默认从0开始
二、二维数组
逻辑视角
计算地址b[i][j]
行优先
b[i][j]的存储地址=LOC+(i*N+j)*sizeof(ElemType)
列优先
LOC+(j*M+i)*sizeof(ElemType)
三、普通矩阵的存储
注意:描述矩阵元素时,行号和列号通常从1开始:而描述数组时通常下标从0开始(具体看题目条件)
四、对称矩阵的压缩存储
对称矩阵:若n阶方阵中任意一个元素aij都有aij=aji,则该矩阵为对称矩阵
压缩策略:只存储主对角线+下三角区
按行有限原则将各元素存入以为数组中
数组大小为(1+n)*n/2
?=(1+n)*n/2 -1
如何方便使用?
可以实现一个映射函数
矩阵下标------->一维数组下标
根据行优先,计算aij
首先第i行有i个元素,计算出前i-1行有多少个元素就是i(i-1)/2,再加上j,由于数组下标从0开始所以最后要减一
i>j的情况
i<j的情况
当访问aij的时候访问aji即可
汇总
列优先
等差求和
五、三角矩阵
下三角矩阵:除了主对角线和下三角区,其余的元素都相同
上三角矩阵:除了主对角线和上三角区,其余的元素都相同
下三角矩阵
压缩策略:
按行有限原则将橙色区域存入一维数组,并在最后一个位置存储常量c
映射关系:
下三角矩阵
六、三对角矩阵的压缩存储
三对角矩阵又称带状矩阵
当𝑖=𝑗>1时,有𝑎𝑖𝑗=0
压缩策略
按行优先(或列优先),只存储带状部分
一共要存储3n-2个元素,最后一个元素下标3n-3
映射关系
当|i-j|>1时访问的元素都是0
按行优先
前i-1行共有3(i-1)-1个元素,aij是第i行第j-i+2个元素
相加为2i+j-2,数组下标从0开始则还需要-1
已知数组下标k得到i,j
第k+1个元素,在第几行第几列?
前i-1行共3𝑖−1−1个元素
𝑖=𝑘+23向上取整
七、稀疏矩阵的压缩存储
稀疏矩阵:非零元素远远少于元素的个数
压缩策略:三元组
<行,列,值>
struct{
int I,j,v;
}
十字链表法
小结