Status MultSMatrix(RLSMatrix M,RLSMatrix N,RLSMatrix &Q){
//求矩阵乘积Q=M*N,采用行逻辑链接存储表示。
if(M.nu!=N.mu)return ERROR;
Q.mu=M.mu;Q.nu=N.nu;Q.tu=0;
if(M.tu*N.tu!=0)
{//Q是非零矩阵
for(arow=1;arow<=M.mu;++arow){
//处理M的每一行
ctemp[]=0;
Q.rpos[arow]=Q.tu+1;
if(arow<M.mu)tp=M.rpos[arow+1];
else{tp=M.tu+1}
for(p=M.rpos[arow];p<tp;++p){
//对当前行中每一个非零元找到对应元在N中的行号
brow=M.data[p].j;
if(brow<N.mu)t=N.rpos[brow+1];
else{t=N.tu+1;}
for(q=N.rpos[brow];q<t;++q){
ccol=N.data[q].j;//乘积元素在Q中的列号
ctemp[ccol]+=M.data[p].e*N.data[q].e;
}
}
for(ccol=1;ccol<=Q.nu;++ccol)//压缩存储改行非零元
if(ctemp[ccol]){
if(++Q.tu>MAXSIZE)return ERROR;
Q.data[Q.tu]=(arow,ccol,ctemp[ccol])}
}
}
return ok;}
时间复杂度为O(M.mu*N.nu+M.tu*N.tu/N.mu)