矩阵
矩阵的基本概念
- 存取:给定一组下标,读出对应的数组元素;
- 修改:给定一组下标,存储或修改与其相对应的数组元素。
存取和修改操作本质上只对应一种操作——寻址。
矩阵应该采用何种方式存储?
矩阵没有插入和删除操作,所以,不用预留空间,适合采用顺序存储。
矩阵的存储结构?
设一维数组的下标的范围为闭区间[l, h],每个数组元素占用c个存储单元,则其任意元素ai的存储地址可由下式决定:
Loc(ai)=Loc(al)+(i-l)×c
常用的映射方法:
- 按行优先:先行后列,先存储行号较小的元素,行号相同者先存储列号较小的元素。
- 按列优先:先列后行,先存储列号较小的元素,列号相同者先存储行号较小的元素。
- 特殊矩阵:包括对称矩阵、三角矩阵、对角矩阵和稀疏矩阵等。
- 稀疏矩阵:矩阵中有很多零元素。
- 压缩存储的基本思想:
- 为多个值相同的元素只分配一个存储空间;
- 对零元素不分配存储空间。
对称矩阵
特点:aij = aji
–>只存储下三角部分的元素。
下三角的元素,在数组中下标与i、j的关系:k = i * (i-1)/2 +j -1
十字链表
typedef int ElemType;
typedef struct Node
{
ElemType data;
int i, j;
Node *down, *right;
}Node, *pNode;
typedef struct
{
pNode *rowHead, *colHead;//行列头指针
int mu, nu, tu;//行数 列数 非零元素个数
}CrossMatrix;