#include
#include
int i,j;//i为非零元素在行,j为非零元所在列 int e;//非零元 }Tripe;
typedef struct{
Tripe data[maxsize];
int h,l,total;//稀疏矩阵的行数列数及非零元个数 }TSMatrix;
void Creat(TSMatrix &M){//创建一个稀疏矩阵 int a,b,c,x;
scanf(\
for(x=1;x<=M.total;x++) {
printf(\请输入第%d个稀疏矩阵的非零元素所在的行数列数用逗号隔开输完按回车键:\\n\
scanf(\ M.data[x].i=a; M.data[x].j=b;
M.data[x].e=c; } }
void Print(TSMatrix &S){//输出稀疏矩阵 int x;
int c,b,a[maxsize][maxsize]; for(c=1;c<=S.h;c++) for(b=1;b<=S.l;b++)
a[c][b]=0;//全部初始化为零
for(x=1;x<=S.total;x++) {
a[S.data[x].i][S.data[x].j]+=S.data[x].e;//在矩阵的相应位置附上非零元素 }
for(c=1;c<=S.h;c++) for(b=1;b<=S.l;b++) {
printf(\ if(b==S.l)printf(\ }
}
void Add(TSMatrix T,TSMatrix V,TSMatrix &M){//加法运算 int p=1,q=1; int b=1;
if(T.h!=V.h||T.l!=V.l)
{
printf(\两矩阵行数或列数不同无法进行相加:\\n\ exit(0); }
while(p<=T.total&&q<=V.total) {
if(T.data[p].i==V.data[q].i) {
if(T.data[p].j==V.data[q].j) {
M.data[b].i=T.data[p].i;
M.data[b].j=T.data[p].j; M.data[b].e=T.data[p].e+V.data[q].e; p++;b++;q++; }
else if(T.data[p].j M.data[b].i=T.data[p].i; M.data[b].j=T.data[p].j; M.data[b].e=T.data[p].e; b++;p++; } else if(T.data[p].j>V.data[q].j) { M.data[b].i=V.data[q].i; M.data[b].j=V.data[q].j; M.data[b].e=V.data[q].e; b++;q++; } } else if(T.data[p].i M.data[b].i=T.data[p].i; M.data[b].j=T.data[p].j; M.data[b].e=T.data[p].e; b++;p++; } else if(T.data[p].i>V.data[q].i) { M.data[b].i=V.data[q].i; M.data[b].j=V.data[q].j; M.data[b].e=V.data[q].e; b++;q++; } } //下面两个循环是把上面循环中未处理的数据添加到M中 while(p<=T.total) { M.data[b].i=T.data[p].i; M.data[b].j=T.data[p].j; M.data[b].e=T.data[p].e; b++;p++; } while(q<=V.total) { M.data[b].i=V.data[q].i; M.data[b].j=V.data[q].j; M.data[b].e=V.data[q].e; b++;q++; } M.h=T.h; M.l=T.l; M.total=b-1; //b最后要减一,因为上面处理最后一个数时b也增加1了 } void TransposTSMtrix(TSMatrix A,TSMatrix &B) //完成矩阵的转置,一次快速定位法 { int j,t,p,q; int num[maxsize],position[maxsize];//num矩阵某列非零元个数,position B.h=A.l; B.l=A.h; B.total=A.total; if(B.total) { for(j=1;j<=A.l;j++) num[j]=0; for(t=1;t<=A.total;t++) num[A.data[t].j]++; position[1]=1; for(j=2;j<=A.l;j++) position[j]=position[j-1]+num[j-1]; for(p=1;p<=A.total;p++) { j=A.data[p].j; q=position[j]; B.data[q].i=A.data[p].j; B.data[q].j=A.data[p].i; B.data[q].e=A.data[p].e; position[j]++; } } } void Jiansmatrix(TSMatrix M,TSMatrix N,TSMatrix &T){ int m=1,n=1,t=1; if(M.h!=N.h||M.l!=N.l) {printf(\两矩阵行数或列数不同无法进行相减\ T.h=M.h;T.l=M.l; while(m<=M.total&&n<=N.total){ { if(M.data[m].i==N.data[n].i) { if(M.data[m].j==N.data[n].j) { if(M.data[m].e==N.data[n].e) { T.data[t].i=M.data[m].i; T.data[t].j=M.data[m].j; m++;n++; } else { T.data[t].e=M.data[m].e-N.data[n].e; T.data[t].i=M.data[m].i; T.data[t].j=M.data[m].j; t++;m++;n++; } } else if(M.data[m].j T.data[t].e=M.data[m].e; T.data[t].i=M.data[m].i; T.data[t].j=M.data[m].j; t++;m++; } else if(M.data[m].j>N.data[n].j) { T.data[t].e=0-N.data[n].e; T.data[t].j=N.data[n].j; t++;n++; T.data[t].i=N.data[n].i; } } else{ if(M.data[m].i T.data[t].j=M.data[m].j; T.data[t].e=M.data[m].e; t++;m++; } else { T.data[t].e=0-N.data[n].e; T.data[t].i=N.data[n].i; T.data[t].j=N.data[n].j; t++;n++; } } } } while(M.total==(m-1)&&n<=N.total) { T.data[t].i=N.data[n].i; T.data[t].j=N.data[n].j; T.data[t].e=N.data[n].e; t++;n++; } while(N.total==(n-1)&&m<=M.total) { T.data[t].i=M.data[m].i; T.data[t].j=M.data[m].j; T.data[t].e=M.data[m].e; t++;m++; } T.total=t-1; } void Multsmatrix(TSMatrix M,TSMatrix N,TSMatrix &T) { int p,q,Qn=0; int a[200][200]; if(M.l!=N.h) {printf(\两矩阵无法相乘\T.h=M.h;T.l=N.l;