什么是稀疏矩阵
矩阵中有很多零,其中非零元素只是占了一小部分,大部分都是零,这种就叫稀疏矩阵。
稀疏矩阵概念没有严格的界定,0 的个数/在矩阵元素总数中占的百分比没有严格的规定,凭感觉的概念。
在严版数据结构中的定义,这里的零 可以是常数c 。
c是不是零 ,就是概念上的分歧。


三元组表示法:值、行、列(顺序存储结构)

三元组表示法
第一行(下标0):一般不存储任何一个元素
第一个代表非0元素个数,第二个代表行数,第三个代表列数
从下标1开始存储矩阵中的元素,一般按照行优先存储。
当然可以按照列优先,或者存储任意位置 也行,把所有元素存进去即可。


稀疏矩阵的两种链式存储结构

邻接表表示法
定义一个一维数组,数组的下标 对应于 要存储矩阵的行标
数组的元素 是一些指针,每个指针都指向一条链表,链表中的结点就保存了矩阵中的非零元素信息。
其中第一个信息 是非0元素的值,
第二个信息 是非0元素所在的列标

每条链表所在的行标保存了 这条链表中所有元素的行标信息。
每条链表中的结点保存了元素的值和列标信息。

每个十字链表都有一个 头节点,它一共有五个域
第一行:第一个域:行数,第二个域:列数,第三个域:非零元素个数
第二行:两个域引出两个指针,指向两个数组
第四个域:列数组,第五个域:行数组。
两个数组内存储了一些指针,指向表内的非零元素。

给表中的非零元素都申请一个结点
表元素结点类型 和表的头节点类型 是一样的,保存的信息不一样。
元素结点
第一个分量存的:行号
第二个分量存的:列号
第三个分量存的:元素值
第四、五个分量存的:指针

十字链表构造 和 二维数组 是类似的。
只不过是只给非零元素分配存储空间。
行方向上 结点之间的指针是从结点第五个域引出来的。

列方向上 结点之间的指针是从结点第四个域引出来的。

网友评论