用十字链表实现稀疏矩阵相加运算-数据结构的教程

时间:2021-04-26 09:15:02
【文件属性】:
文件名称:用十字链表实现稀疏矩阵相加运算-数据结构的教程
文件大小:5.3MB
文件格式:PPT
更新时间:2021-04-26 09:15:02
发的 (2)用十字链表实现稀疏矩阵相加运算 假设原来有两个稀疏矩阵A和B,如何实现运算A=A+B呢?假设原来A和B都用十字链表作存储结构,现要求将B中结点合并到A中,合并后的结果有三种可能:1)结果为aij+bij;2)aij(bij=0);3)bij(aij=0)。由此可知当将B加到A中去时,对A矩阵的十字链表来说,或者是改变结点的v域值(aij+bij≠0),或者不变(bij=0),或者插入一个新结点(aij=0),还可能是删除一个结点(aij+bij=0)。 于是整个运算过程可以从矩阵的第一行起逐行进行。对每一行都从行表头出发分别找到A和B在该行中的第一个非零元结点后开始比较,然后按上述四种不同情况分别处理之。若pa和pb分别指向A和B的十字链表中行值相同的两个结点,则4种情况描述为: 1)pa->j=pb->j 且pa->k.v+pb->k.v≠0,则只要将aij+bij的值送到 pa所指结点的值域中即可,其他所有域的值都不变化。 2)pa->j=pb->j且pa->k.v+pb->k.v=0,则需要在A矩阵的链表中删除pa所指的结点。这时,需改变同一行中前一结点的rptr域值,以及同一列中前一结点的cptr域值。 3)pa->jj且pa->j≠0,则只要将pa指针往右推进一步,并重新加以比较即可。 4)pa->j>pb->j或 pa->j=0,则需在A矩阵的链表中插入pb所指结点。

网友评论