基本要求\;
 以“带行逻辑链接信息”的三元组顺序表表示稀疏矩阵,实现两个矩阵相加,相减和相乘的运算,稀疏矩阵的输入形式采用三元组表示,而运算结果的矩形阵则以通常的阵列形式列!结果矩阵另生成,乘积结果可用二维出!输入按行优先!!!!数组表示。
void crt_matrix(a,b)/稀疏矩阵已三元组形式输入
smatrik a,b
{int i,j,k=1;
for(i=0;i<20;i++)
for(j=0;j<20;j++)
if(a[i][j]!=0)
{b[k][0]=i;
b[k][1]=j;
b[k][2]=a[i][j];
k++;
}
b[0][0]=20;
b[0][1]=20;
b[0][2]=k-1;
}
void matadd(A,B,C)/加法函数
smatrik A,B,C;
{int i=j=k=1;
while(i<=A[0][2]&&j<=B[0][2])
if(A[i][0]==B[j][0])
if(A[i][1]<B[j][1])
{C[k][0]=A[i][0];
C[k][1]=A[i][1];
c[k][2]=A[i][2];
k++;
i++;
}
else if(A[i][1]>B[j][1])
{C[k][0]=B[j][0];
C[k][1]=B[j][1];
C[k][1]=B[j][2];
k++;
i++;
}
else
{C[k][0]=B[j][0];
C[k][1]=B[j][1];
C[k][2]=A[i][2]+B[j][2];
k++;
j++;
i++;
}
else if(A[i][0]<B[j][0])
{C[k][0]=A[j][0];
C[k][1]=A[j][1];
C[k][2]=A[j][2];
k++;
i++;
}
else
{C[k][0]=B[j][0];
C[k][1]=B[j][1];
C[k][2]=B[j][2];
k++;
j++;
}
C[0][0]=A[0][0];
C[0][1]=A[0][1];
C[0][2]=k-1;
}
void matsub(A,B,C)/减法函数
smatrik A,B,C;
{int i=j=k=1;
while(i<=A[0][2]&&j<=B[0][2])
if(A[i][0]==B[j][0])
if(A[i][1]<B[j][1])
{C[k][0]=A[i][0];
C[k][1]=A[i][1];
c[k][2]=A[i][2];
k++;
i++;
}
else if(A[i][1]>B[j][1])
{C[k][0]=B[j][0];
C[k][1]=B[j][1];
C[k][1]=B[j][2];
k++;
i++;
}
else
{C[k][0]=B[j][0];
C[k][1]=B[j][1];
C[k][2]=A[i][2]-B[j][2];
k++;
j++;
i++;
}
else if(A[i][0]<B[j][0])
{C[k][0]=A[j][0];
C[k][1]=A[j][1];
C[k][2]=A[j][2];
k++;
i++;
}
else
{C[k][0]=B[j][0];
C[k][1]=B[j][1];
C[k][2]=B[j][2];
k++;
j++;
}
C[0][0]=A[0][0];
C[0][1]=A[0][1];
C[0][2]=k-1;
}int value(C,i,j)
smatrik C;
int i,j;
{int k=1;
while(k<=C[0][2]&&C[k][0]==i&&C[k][1]==j)
k++;
if(k<=C[0][2])
return(C[k][2]);
else return(0);
}
matmul(m,n,k,A,B,C)/乘法函数
int m,n,k;
smatrik A,B,C;
{int i,j,p,s;
p=1;
for(i=0;i<20;i++)
for(j=0;j<20;j++)
{s=0;
for(s=0;s<20;s++)
s=s+value(A,i,s)*value(B,s,j);
if(s!=0)
{C[k][0]=i;
C[k][1]=j;
C[k][2]=s;
k++;
}
}
C[0][0]=20;
C[0][1]=k;
C[0][2]=p-1;
}
。!!!!!!输出要通常的阵列形式。。谢谢!!!!!!