三元组表示法
若把稀疏矩阵的三元组线性表按顺序存储结构存储,则称为稀疏矩阵的三元组顺序表简称为三元组表(list of 3-tuples)。(三元组类型TupNode;三元组顺序表的类型TSMatrix)
第0行存储非零元素的个数、矩阵行数、矩阵列数(存值、行标、列标)
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;
邻接表表示法
十字链表表示法
十字链表(orthogonal list)是稀疏矩阵的一种链式存储结构(相应的,前面的三元组顺序表是稀疏矩阵的一种顺序存储结构)。
(四)、广义表的定义
广义表(generalized table / Glist)是线性表的推广,是有限个元素的序列,其逻辑结构采用括号表示法表示如下:
GL=(a1,a2,…,ai,…,an)
其中n表示广义表的长度,即广义表中所含元素的个数,n≥0。若n=0,称为空表。a,为广义表的第i个元素,如果ai属于原子类型(原子类型的值是不可分解的,如C/C++语言中的整型、实型和字符型等),称为广义表GL的原子(atom);如果ai又是一个广义表,称为广义表GL的子表(subgeneralized table)。
(五)、广义表的特性
- 广义表中的数据元素是有相对次序的。
- 广义表的长度定义为最外层包含元素的个数。
- 广义表的深度定义为所含括弧的重数,其中原子的深度为0,空表的深度为1。
- 广义表可以共享,一个广义表可以被其他广义表共享,这种共享广义表称为再入表。
- 广义表可以是一个递归的表,一个广义表可以是自己的子表,这种广义表称为递归表。递归表的深度是无穷值,而长度是有限值。
表头 (Head) 和表尾 (Tail) :当广义表非空时,第一个元素为广义表的表头,其余元素组成的表是广义表的表尾。
GetHead(B)=d GetTail(B)=(e) 加括号表示e的广义表
GetHead(D)=B GetTail(D)=(C) 加括号表示C的广义表
GetHead((a)) =(a) GetTail((a)) = ( )
(六)、广义表的存储结构
- 头尾链表存储结构
1代表广义表结点,0代表原子结点
- 扩展线性表存储结构