以下为功能函数的代码
#define MAXSIZE 12500 //最大非零元素
typedef int Elemtype;
typedef struct Triple{
Elemtype value;//元素值
int row,col; //下标值
}Triple; //三元组结点定义
typedef struct TSMatrix{
Triple data[MAXSIZE+1];//data[0]不用
int mu,nu,tu; //行数,列数,非零元素个数
}TSMatrix; //三元组顺序表定义
//将矩阵M和矩阵T相加的结果存储到新矩阵Q里
void AddMastrix(TSMatrix M,TSMatrix T,TSMatrix &Q){
int index_a,index_b,i=1,j=1,k=1;
Q.mu=M.mu; Q.nu=M.nu;
while (i<=M.tu&&j<=T.tu){
//按行优先遍历矩阵的非零元
index_a=(M.data[i].row)*(M.data[i].col)+M.data[i].col;
index_b=(T.data[j].row)*(T.data[j].col)+T.data[j].col;
if(index_a<index_b){ //M的非零元素下标值小于T的 直接令Q的对应元素等于M中元素
Q.data[k]=M.data[i];
i++;
k++;
}
else if(index_a>index_b){
Q.data[k]=T.data[j];
j++;
k++;
}
else if(index_a==index_b){
if((M.data[i].value+T.data[j].value)!=0){
Q.data[k]=M.data[i];
Q.data[k].value=M.data[i].value+T.data[j].value;
k++;
}
++i;
++j;
}
}
//当M和T有一个遍历结束时,复制另一个的剩余元素进Q
for(;i<=M.tu;++i){
Q.data[k]=M.data[i];
k++;
}
for(;j<=T.tu;++j)
Q.data[k++]=T.data[j];
Q.tu=k-1;
}