文章目录
数组与矩阵
数组
数组的基本概念
数组是定长线性表在维度上的扩展,本质是线性表的嵌套结构(线性表中的元素本身又是一个线性表)。其核心特性包括:
- 同构性:所有数据元素类型相同、结构一致(如二维数组
int arr[3][4]
中每个元素均为整数)。 - 下标约束:每个维度的下标有明确上下界,且按顺序排列(通常从0开始)。
- 操作限制:数组元素数目固定,一般不支持插入/删除操作,更适合查询和修改,因此优先采用顺序存储结构。
数组的存储与地址计算
数组采用顺序存储时,可通过下标快速计算元素地址。以二维数组为例,假设每个元素占用len
字节,起始地址为a
,存储方式分为:
行优先存储
按行依次存储每一行元素,地址计算公式(从0开始编号):
a d d r ( i , j ) = a + ( i × n + j ) × l e n addr(i,j) = a + (i × n + j) × len addr(i,j)=a+(i×n+j)×len
(n
为列数,i
为行号,j
为列号)
列优先存储
按列依次存储每一列元素,地址计算公式:
a d d r ( i , j ) = a + ( j × m + i ) × l e n addr(i,j) = a + (j × m + i) × len addr(i,j)=a+(j×m+i)×len
(m
为行数,i
为行号,j
为列号)
地址计算图示
矩阵
矩阵的基本概念
矩阵是二维数组的应用形式,由m
行n
列元素组成。常见类型包括:
- 方阵:行数=列数(
m=n
)。 - 三角矩阵:上三角矩阵(
i>j
时元素为0)或下三角矩阵(i<j
时元素为0)。 - 稀疏矩阵:非零元素数目远少于零元素,且分布无规律。
稀疏矩阵的存储
为节省空间,稀疏矩阵采用压缩存储,仅记录非零元素信息:
三元组表(Triplet Table)
存储非零元素的(行号,列号,值)三元组,按行优先排列。
- 示例矩阵:
0 0 3 0 0 2 0 0 1 0 0 0
- 三元组表表示:
十字链表(Orthogonal List)
用链表存储非零元素,每个节点包含行指针、列指针、值,形成行列双向链表。
- 结构示意图:
特殊矩阵的压缩存储
对于有规律的矩阵(如对称矩阵、对角矩阵),可利用规律进一步压缩:
- 对称矩阵:满足
A[i][j] = A[j][i]
,仅存储上三角或下三角部分,节省一半空间。 - 对角矩阵:非零元素集中在主对角线附近,按对角线顺序存储元素,减少无效空间占用。
通过合理选择存储结构,可显著提升矩阵运算效率(如转置、乘法),并降低内存消耗。