C 链表稀疏矩阵之间的矩阵积

C 链表稀疏矩阵之间的矩阵积,c,matrix,linked-list,sparse-matrix,C,Matrix,Linked List,Sparse Matrix,我用C语言以这种形式表示了稀疏矩阵: typedef struct node { int column; int value; int row; struct node *next; } element; 我有一个插入函数,在矩阵中添加一个元素,下面是声明: void Insert(element *x[], int row, int column, int value) 我的问题是:如何实现一个函数来计算两个稀疏矩阵的乘积 以下是我的初步设想: void

我用C语言以这种形式表示了稀疏矩阵:

typedef struct node
{
    int column;
    int value;
    int row;
    struct node *next;
} element;
我有一个插入函数,在矩阵中添加一个元素,下面是声明:

 void Insert(element *x[], int row, int column, int value)
我的问题是:如何实现一个函数来计算两个稀疏矩阵的乘积

以下是我的初步设想:

void dotProduct( element * ptrA , element * ptrB ) {
    element* initB = ptrB;
    int sum = 0;
    while( ptrA!=NULL ) {
        ptrB = initB;
        int column, int row;
        while( ptrB!=NULL ) {
            if( ptrA->row == ptrB->column ) {
                column = ptrb->column;
                sum = sum + ptra->value*ptrB->value;
                row = ptrA->row;
            }
            ptrB = ptr->next;
        }
        ptrA = ptrA->next;
    }
    insert( row, column, sum )
}

你有一个好的开始。但是您的
sum
变量正在计算结果矩阵中所有元素的总和。那不是你想要的

这是我要改变的

1) 使用稀疏矩阵代替标量整数
int sum=0
。您希望将值添加到矩阵的特定元素,而不是标量和

2) 添加一个函数,将矩阵元素(行、列)的值增加一个int值

void Add(element *x[], int row, int column, int value){
    element *ptr = x;
    while (ptr != NULL) {
        if (ptr->row == row && ptr->column == column) {
            ptr->value += value;
            return;
        }
    }

    /* We could not find an existing element with given row and column
       Create a new one */
    Insert(x, row, column, value)
 }
3) 替换
sum=sum+ptra->value*ptrB->value
添加(结果、行、列、ptra->value*ptrB->value)


4) 您可以取消最后的插入(行、列、和)
。它不会编译,因为它只有3个参数。当外部
循环完成时,稀疏矩阵
结果中会有一个计算出的乘积。

有助于了解元素是否按特定顺序排列。不,不是按特定顺序排列。这是一种糟糕的方法。您应该在X和Y方向链接节点。并更好地格式化您的代码。空格不仅仅用于缩进。特别是:不要将循环步骤缩进到与块的其余部分不同的级别。缩进的目的是使块可视化。看起来很奇怪——这应该是点积还是矩阵积。您的问题说明了一件事,但您的函数名说明了另一件事。还有,计算一些东西却把它扔掉有什么意义?我不明白您为什么希望
dotProduct
返回
void