稀疏矩阵加法运算//用三元组表示稀疏矩阵,并且求和#includeStdio.h#defineMAXSIZE20/*假设非零元个数的最大值为10*/structTriple{inti,j;/*该非零元的行下标和列下标*/inte;};structTSMtrix{structTripledata[MAXSIZE+1];/*非零元三元组表,data[0]未用*/intmu,nu,tu;/*矩阵的行数、列数和非零元个数*/};CreateMtrix(structTSMtrix*M){/*创建一个稀疏矩阵*/inti,date,col,row,mu,nu,tu;printf(pleaseinputmatrixcol,row,unzeroednumbers:\n);scanf(%d,%d,%d,&mu,&nu,&tu);M-mu=mu;M-nu=nu;M-tu=tu;printf(请输入行列值:\n);for(i=1;i=tu;i++){scanf(%d,%d,%d,&col,&row,&date);if(mu0||nu0){printf(error!);}else{M-data[i].i=col;M-data[i].j=row;M-data[i].e=date;}}}intAddMtrix(structTSMtrixA,structTSMtrixB,structTSMtrix*C){intpa=1,pb=1,pc=1,x,ce;C-mu=A.mu;C-nu=A.nu;C-tu=0;for(x=0;x=A.mu;x++){while(A.data[pa].ix)pa++;while(B.data[pb].ix)pb++;while(A.data[pa].i==x&&B.data[pb].i==x){if(A.data[pa].j==B.data[pb].j){ce=A.data[pa].e+B.data[pb].e;if(ce!=0){C-data[pc].i=x;C-data[pc].j=A.data[pa].j;C-data[pc].e=ce;pa++;pb++;pc++;}else{pa++;pb++;}}elseif(A.data[pa].jB.data[pb].j){C-data[pc].i=x;C-data[pc].j=B.data[pb].j;C-data[pc].e=B.data[pb].e;pb++;pc++;}else{C-data[pc].i=x;C-data[pc].j=A.data[pa].j;C-data[pc].e=A.data[pa].e;pa++;pc++;}}while(A.data[pa].i==x)/*把A中剩下的元素传给C*/{C-data[pc].i=x;C-data[pc].j=A.data[pa].j;C-data[pc].e=A.data[pa].e;pa++;pc++;}while(B.data[pb].i==x)/*把B中剩下的元素传给C*/{C-data[pc].i=x;C-data[pc].j=B.data[pb].j;C-data[pc].e=B.data[pb].e;pb++;pc++;}}C-tu=pc;}ShowMtrix(structTSMtrixM){/*打印出矩阵*/inti=1,j=1,dir=1,flag;printf(Thematrixis:\n);for(i=1;i=M.mu;i++){for(j=1;j=M.nu;j++){flag=0;for(dir=1;dir=M.tu;dir++)if(M.data[dir].i==i&&M.data[dir].j==j)/*存在非零元*/{printf(%d,M.data[dir].e);flag=1;}if(flag==0)printf(0);}printf(\n);}}main(){structTSMtrixM,T,P;CreateMtrix(&M);CreateMtrix(&T);ShowMtrix(M);ShowMtrix(T);if(AddMtrix(M,T,&P)==1)printf(EERROR!!);else{AddMtrix(M,T,&P);ShowMtrix(P);}getch();