typedef struct{
    int i; //行下标
    int j; //列下标
    int e; //元素值
}Triple;

typedef struct{
    Triple data[MAXSIZE+1];
    int mu; //行数
    int nu; //列数
    int tu; //非零元个数
}TSMatrix;

BOOL TSMatrixAdd(TSMatrix A, TSMatrix B, TSMatrix &C){
    if(A.mu != B.mu || A.nu != B.nu){
        return false; //两个矩阵不同阶,无法相加
    }
    C.mu = A.mu;
    C.nu = A.nu;
    int i = 1, j = 1, k = 0;
    while(i <= A.tu && j <= B.tu){
        if(A.data[i].i < B.data[j].i){
            C.data[++k] = A.data[i++];
        }else if(A.data[i].i > B.data[j].i){
            C.data[++k] = B.data[j++];
        }else{
            if(A.data[i].j < B.data[j].j){
                C.data[++k] = A.data[i++];
            }else if(A.data[i].j > B.data[j].j){
                C.data[++k] = B.data[j++];
            }else{
                int sum = A.data[i].e + B.data[j].e;
                if(sum != 0){
                    C.data[++k].i = A.data[i].i;
                    C.data[k].j = A.data[i].j;
                    C.data[k].e = sum;
                }
                i++;
                j++;
            }
        }
    }
    while(i <= A.tu){
        C.data[++k] = A.data[i++];
    }
    while(j <= B.tu){
        C.data[++k] = B.data[j++];
    }
    C.tu = k;
    return true;
}
``
C语言实现假设同阶的稀疏矩阵A和B均以三元组顺序表TSMatrix为存储结构:试写出矩阵相加的算法BOOL TSMatrix AddTSMatrix ATSMatrix BTSMatrix&C结果放在三元组顺序表C中

原文地址: https://www.cveoy.top/t/topic/dxtR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录