第7章26题的关键程序

int value(spmatrix *M, int& i, int& j)

//计算出C的行号i和列号j处元素的值的函数

{

    int k = 0;

 

    while(k <= M->number && M -> data[k].row<=i) //因为是按行序排列,故不必扫描行号比i大的元素

    {

        if(M -> data[k].row == i && M -> data[k].col == j)

            return M->data[k].data;

        k ++;

    }

    return 0;

}

 

spmatrix*  MultpySpmatrix(spmatrix *A, spmatrix *B)

{

    int i, j, k, p, s;

 

    spmatrix *head = (spmatrix*)malloc(sizeof(spmatrix));

 

    if (head == NULL)

    {

        printf("内存分配出错!n");

        return NULL;

    }

 

    if(A->col != B->row)

    {

        return NULL;

    }

 

    if(A->number * B->number != 0)

    {

        p = 0;

        for(i = 1; i <= A->row; i++)

            for(j = 1; j <= B->col; j++)

            {

                s = 0;

                for(k = 1; k <= A->col; k++)

                {

                    s += value(A, i, k) * value(B, k, j);

                    //关键行,效率比较低,但是比较易懂。

                    //就是将两个矩阵相应位置的元素相乘

                }

 

                if(s != 0)

                {

                    head->data[p].row = i;

                    head->data[p].col = j;

                    head->data[p].data = s;

                    p++;

                }

            }

            head->row = A->row;

            head->col = B->col;

            head->number = p;

    }

    return head;

}

Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: