2. 稀疏矩阵

当一个阶数较大的矩阵中的非零元素个数s相对于矩阵元素的总个数 t非常小时,即s<<t时,称该矩阵为稀疏矩阵(sparse matrix)。

数据结构(知识点碎片十三)_三元组


三元组表示法

若把稀疏矩阵的三元组线性表按顺序存储结构存储,则称为稀疏矩阵的三元组顺序表简称为三元组表(list of 3-tuples)。(三元组类型TupNode;三元组顺序表的类型TSMatrix)

第0行存储非零元素的个数、矩阵行数、矩阵列数(存值、行标、列标)

数据结构(知识点碎片十三)_三元组_02

typedef struct
{
float val; 
int i, j;
}Trimat;
Trimat trimat[maxSize + 1];

float val = trimat[k].val; 
int i = trimat[k].i; 
int j = trimat[k].j;

邻接表表示法

数据结构(知识点碎片十三)_广义表_03


十字链表表示法

十字链表(orthogonal list)是稀疏矩阵的一种链式存储结构(相应的,前面的三元组顺序表是稀疏矩阵的一种顺序存储结构)。

数据结构(知识点碎片十三)_十字链表_04

(四)、广义表的定义

广义表(generalized table / Glist)是线性表的推广,是有限个元素的序列,其逻辑结构采用括号表示法表示如下:
GL=(a1,a2,…,ai,…,an)
其中n表示广义表的长度,即广义表中所含元素的个数,n≥0。若n=0,称为空表。a,为广义表的第i个元素,如果ai属于原子类型(原子类型的值是不可分解的,如C/C++语言中的整型、实型和字符型等),称为广义表GL的原子(atom);如果ai又是一个广义表,称为广义表GL的子表(subgeneralized table)。

数据结构(知识点碎片十三)_稀疏矩阵_05