#includeiomanip.h#includeiostream.h#includeconio.h#includestdio.h#includestring.h#includestdlib.h#defineTRUE1#defineFALSE0#defineOK1#defineERROR0typedefintStatus;typedefintElemType;#defineMAXSIZE100//非零元个数的最大值#defineSIZENUM10typedefstruct{inti,j;//行下标,列下标ElemTypee;//非零元素值}Triple;typedefstruct{Tripledata[MAXSIZE+1];//非零元三元组表,data[0]未用intmu,nu,tu;//矩阵的行数、列数和非零元个数}TSMatrix;voidcreate(TSMatrix&TM);//创建矩阵voiddisp(TSMatrixTM);//通常形式输出稀疏矩阵StatusLocateELem(TSMatrixM,inti,intj,inte);//三元组表中是否存在非零元素A[i][j],若存在返回evoidInsertSortMatrix(TSMatrix&TM);//根据对矩阵的行列,三元组TM作直接插入排序StatusTransposeSMatrix(TSMatrixM,TSMatrix&T);//矩阵转置的算法StatusAddTSM(TSMatrixA,TSMatrixB,TSMatrix&C);//矩阵的加法运算:C=A+BStatusSubTSM(TSMatrixA,TSMatrixB,TSMatrix&C);//矩阵的减法运算:C=A-BStatusMultSMatrix(TSMatrixA,TSMatrixB,TSMatrix&C);//矩阵的乘法运算:C=A×BvoidNiMatrix(TSMatrix&TM);//矩阵求逆//--------------------创建矩阵----------------//voidcreate(TSMatrix&TM){inti,j,i1,j1,n,e;cout矩阵的行数、列数、非零元个数(mu,nu,tu):;cinijn;TM.mu=i;TM.nu=j;TM.tu=0;if(TM.mu1||TM.nu1)cout输入有误!!!!endl;for(intk=1;k=n;k++){cout第k个元素行、列、值(i,j,e):;cini1j1e;if(i1TM.mu||j1TM.nu||e==0){cout输入有误!!!!endl;k--;}elseif(LocateELem(TM,i1,j1,e)==1){cout元素已经存在!endl;k--;;}else{TM.data[k].i=i1;TM.data[k].j=j1;TM.data[k].e=e;TM.tu++;}}InsertSortMatrix(TM);}StatusLocateELem(TSMatrixM,inti,intj,inte)//三元组表中是否存在非零元素A[i][j],若存在返回e{intk;for(k=1;k=M.tu;k++)if(M.data[k].i==i&&M.data[k].j==j){e=M.data[k].e;returnTRUE;}returnFALSE;}voidInsertSortMatrix(TSMatrix&TM)//根据对矩阵的行列,三元组TM作直接插入排序{inti,j;for(i=2;i=TM.tu;i++)if(TM.data[i].iTM.data[i-1].i||TM.data[i].i==TM.data[i-1].i&&TM.data[i].jTM.data[i-1].j){TM.data[0].i=TM.data[i].i;TM.data[0].j=TM.data[i].j;TM.data[0].e=TM.data[i].e;for(j=i-1;TM.data[0].iTM.data[j].i||TM.data[0].i==TM.data[j].i&&TM.data[0].jTM.data[j].j;--j){TM.data[j+1].i=TM.data[j].i;TM.data[j+1].j=TM.data[j].j;TM.data[j+1].e=TM.data[j].e;}TM.data[j+1].i=TM.data[0].i;TM.data[j+1].j=TM.data[0].j;TM.data[j+1].e=TM.data[0].e;}}//----------------通常形式输出稀疏矩阵----------------//voiddisp(TSMatrixTM){inti,j,k,flag=1;for(i=1;i=TM.mu;i++){coutsetw(6);for(j=1;j=TM.nu;j++){for(k=1;k=TM.tu;k++)if(i==TM.data[k].i&&j==TM.data[k].j){coutTM.data[k].esetw(6);flag=0;}if(flag)cout0setw(6);flag=1;}coutendl;}}//--------------矩阵转置的算法---------------//StatusTransposeSMatrix(TSMatrixM,TSMatrix&T){intcol,p,q;T.mu=M.nu;T.nu=M.mu;T.tu=M.tu;if(M.tu){q=1;for(col=1;col=M.nu;col++)for(p=1;p=M.tu;p++)if(M.data[p].j==col){T.data[q].i=M.data[p].j;T.data[q].j=M.data[p].i;T.data[q].e=M.data[p].e;++q;}}returnOK;}//-------------------矩阵加算法----------------/StatusAddTSM(TSMatrixA,TSMatrixB,TSMatrix&C)/*三元组表示的稀疏矩阵加法:C=A+B*/{intn=1,m=1,k=1;ElemTypetemp;if(A.mu==B.mu&&A.nu==B.nu){while(m=A.tu&&n=B.tu)//若A当前元素的行号等于B当前元素的行号,则比较其列号,将较小列的元素//存入C中,如果列号也相等,则将对应的元素值相加后存入C中if(A.data[m].i==B.data[n].i){if(A.data[m].jB.data[n].j){C.data[k].i=A.data[m].i;C.data[k].j=A.data[m].j;C.data[k].e=A.data[m].e;k++;m++;}elseif(A.data[m].jB.data[n].j){C.data[k].i=B.data[n].i;C.data[k].j=B.data[n].j;C.data[k].e=B.data[n].e;k++;n++;}else{temp=A.data[m].e+B.data[n].e;if(temp!=0)//不为0才添加到C中{C.data[k].i=A.data[m].i;C.data[k].j=A.data[m].j;C.data[k].e=temp;k++;}m++;n++;}}//若A当前元素的行号小于B当前元素的行号,则将A的元素存入C中elseif(A.data[m].iB.data[n].i){C.data[k].i=A.data[m].i;C.data[k].j=A.data[m].j;C.data[k].e=A.data[m].e;k++;m++;}//若A当前元素的行号大于B当前元素的行号,则将B的元素存入C中else{C.data[k].i=B.data[n].i;C.data[k].j=B.data[n].j;C.data[k].e=B.data[n].e;k++;n++;}//把剩余部分元素存入C中if(mA.tu&&n=B.tu)for(;n=B.tu;n++){C.data[k].i=B.data[n].i;C.data[k].j=B.data[n].j;C.data[k].e=B.data[n].e;k++;}if(nB.tu&&m=A.tu)for(;m=A.tu;m++){C.data[k].i=A.data[m].i;C.data[k].j=A.data[m].j;C.data[k].e=A.data[m].e;k++;}C.mu=A.mu;C.nu=A.nu;C.tu=k-1;returnOK;}elsereturnERROR;}//------------------矩阵的减法运算----------------//StatusSubTSM(TSMatrixA,TSMatrixB,TSMatrix&C)/*三元组表示的稀疏矩阵减法:C=A+B*/{intn=1,m=1,k=1;ElemTypetemp;if(A.mu==B.mu&&A.nu==B.nu){while(m=A.tu&&n=B.tu)//若A当前元素的行号等于B当前元素的行号,则比较其列号,将较小列的元素//存入C中,如果列号也相等,则将对应的元素值相减后存入C中{if(A.data[m].i==B.data[n].i){if(A.data[m].jB.data[n].j){C.data[k].i=A.data[m].i;C.data[k].j=A.data[m].j;C.data[k].e=A.data[m].e;k++;m++;}elseif(A.data[m].jB.data[n].j){C.data[k].i=B.data[n].i;C.data[k].j=B.data[n].j;C.data[k].e=-B.data[n].e;k++;n++;}else{temp=A.data[m].e-B.data[n].e;if(temp!=0)//不为0才添加到C中{C.data[k].i=A.data[m].i;C.data[k].j=A.data[m].j;C.data[k].e=temp;k++;}m++;n++;}}//若A当前元素的行号小于B当前元素的行号,则将A的元素存入C中elseif(A.data[m].iB.data[n].i){C.data[k].i=A.data[m].i;C.data[k].j=A.data[m].j;C.data[k].e=A.data[m].e;k++;m++;}//若A当前元素的行号大于B当前元素的行号,则将B的元素存入C中else{C.data[k].i=B.data[n].i;C.data[k].j=B.data[n].j;C.data[k].e=-B.data[n].e;k++;n++;}}//把剩余部分元素存入C中if(m=A.tu)for(;m=A.tu;m++){C.data[k].i=A.data[m].i;C.data[k].j=A.data[m].j;C.data[k].e=A.data[m].e;k++;}if(n=B.tu)for(;n=B.tu;n++){C.data[k].i=B.data[n].i;C.data[k].j=B.data[n].j;C.data[k].e=-B.data[n].e;k++;}C.mu=A.mu;C.nu=A.nu;C.tu=k-1;returnOK;}elsereturnERROR;}intvalue(TSMatrixT,inti,intj)//得到T[i][j]的值{