C语言实现假设同阶的稀疏矩阵A和B均以三元组顺序表TSMatrix为存储结构:试写出矩阵相加的算法BOOL TSMatrix AddTSMatrix ATSMatrix BTSMatrix&C结果放在三元组顺序表C中
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;
}
``
原文地址: https://www.cveoy.top/t/topic/dxtR 著作权归作者所有。请勿转载和采集!