数组的存储结构
一维数组
ElemType型一维数组:ElemType a[10];
起始位置:LOC
- 各数组元素大小相同,且物理上连续存放
- 数组元素
a[i]的存放地址 =LOC + i * sizeof(ElemType)
二维数组
2行4列的二维数组:ElemType b[2][4]
起始位置:LOC
- 两种不同存储策略:行优先、列优先。将非线性二维数组拉成线性的
- M行N列的二维数组
b[M][N]按行优先存储,则b[i][j]的存储地址为LOC+(i*N+j)*sizeof(ElemType) - M行N列的二维数组
b[M][N]按列优先存储,则b[i][j]的存储地址为LOC+(j*M+i)*sizeof(ElemType)
特殊矩阵
对称矩阵的压缩存储
压缩存储策略:只存储主对角线 + 下三角区/上三角区
按行优先原则将各元素存入一维数组中
三角矩阵的压缩存储
三对角矩阵(带状矩阵)
稀疏矩阵的压缩存储
稀疏矩阵:非零元素远远少于矩阵元素的个数
顺序存储--三元组<行,列,值>
链式存储--十字链表法:向下域down,向右域right
常见考题
- 矩阵的压缩存储需要多长的数组
- 由矩阵行列号<i,j>推出对应的数据下标号k
- 由k推出<i,j>
- 如何处理不等式中的“刚好大于等于/小于等于”
- 向上取整/向下取整
- 易错点
- 存储上三角?下三角
- 行优先?列优先?
- 矩阵元素的下标从0?1?开始
- 数组下标从0?1?开始