稀疏矩阵的存储方式
稀疏矩阵就是指一个矩阵中的大部分元素都是0或者是某一个相同的元素,而稀疏矩阵往往有一些有规律的形式,比如上三角、下三角等等,这种有规律的矩阵又称为特殊矩阵。
特殊矩阵的储存需要根据特殊矩阵哪点特殊,然后用数学的手段来进行存储,这里就不展开了。
我们只讲一般情况下的稀疏矩阵的储存方式。
存储方式常见的有两大类,大家也都知道,分别是顺序存储结构和链式存储结构。
对于稀疏矩阵,顺序存储结构中常用的方式有两种:三元组表示法,伪地址表示法
三元组表示法,就是定义一个数据结构,里面保存了该元素的横坐标、列坐标,以及该元素的值,这也是最简单的一种表示方法。
伪地址表示法比上面高级一点,略微省了一些空间。伪地址表示法呢也需要定义一个结构体,里面一个成员变量是保存的元素的值,另外只需要一个成员变量用于保存它的伪地址即可。
那么伪地址是什么呢?伪地址就是该元素相对于这个矩阵保存的首地址的偏移量,这样只要经过简单计算就可以知道其对应的横纵坐标了。
而链式存储也有两种常见的方法,分别是邻接表表示法和十字链表法。
领接表表示法如下图所示,具体细节请自行网络查询吧。邻接表也广泛用于图的存储中。
下图来自:https://blog.csdn.net/huangshuai147/article/details/50849476
而十字链表法可以说是邻接表的一个变形,它的链表结构就像“十”字一样,因此而得名。它用于访问数据比之邻接表要方便,但是每个节点多了两个地址指针。十字链表法也常用于有向图的存储。
如下图所示为十字链表的每个节点的结构:
(以下两张图片来自于:https://blog.csdn.net/xiuceliu/article/details/53358974)
下图为一个十字链表的例子: