资源描述:
《c语言数据结构数组和广义表.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、StatusCreateSMatrix(TSMatrix*M){/*创建稀疏矩阵M*/inti,m,n;ElemTypee;Statusk;printf("请输入矩阵的行数,列数,非零元素数:");scanf("%d,%d,%d",&(*M).mu,&(*M).nu,&(*M).tu);(*M).data[0].i=0;/*为以下比较顺序做准备*/for(i=1;i<=(*M).tu;i++){do{printf("请按行序顺序输入第%d个非零元素所在的行(1~%d),列(1~%d),元素值:",i,(*M).mu,(*M).nu)
2、;scanf("%d,%d,%d",&m,&n,&e);k=0;if(m<1
3、
4、m>(*M).mu
5、
6、n<1
7、
8、n>(*M).nu)/*行或列超出范围*/k=1;if(m<(*M).data[i-1].i
9、
10、m==(*M).data[i-1].i&&n<=(*M).data[i-1].j)/*行或列的顺序有错*/k=1;}while(k);(*M).data[i].i=m;(*M).data[i].j=n;(*M).data[i].e=e;}returnOK;}voidDestroySMatrix(TSMatrix*M){/*销毁稀
11、疏矩阵M*/(*M).mu=0;(*M).nu=0;(*M).tu=0;}voidPrintSMatrix(TSMatrixM){/*输出稀疏矩阵M*/inti;printf("%d行%d列%d个非零元素。",M.mu,M.nu,M.tu);printf("行列元素值");for(i=1;i<=M.tu;i++)printf("%2d%4d%8d",M.data[i].i,M.data[i].j,M.data[i].e);}StatusCopySMatrix(TSMatrixM,TSMatrix*T){/*由稀疏矩阵M复
12、制得到T*/(*T)=M;returnOK;}intcomp(intc1,intc2)/*另加*/{/*AddSMatrix函数要用到*/inti;if(c113、;(*Q).mu=M.mu;(*Q).nu=M.nu;Mp=&M.data[1];/*Mp的初值指向矩阵M的非零元素首地址*/Np=&N.data[1];/*Np的初值指向矩阵N的非零元素首地址*/Me=&M.data[M.tu];/*Me指向矩阵M的非零元素尾地址*/Ne=&N.data[N.tu];/*Ne指向矩阵N的非零元素尾地址*/Qh=Qe=(*Q).data;/*Qh、Qe的初值指向矩阵Q的非零元素首地址的前一地址*/while(Mp<=Me&&Np<=Ne){Qe++;switch(comp(Mp->i,Np->i))
14、{case1:*Qe=*Mp;Mp++;break;case0:switch(comp(Mp->j,Np->j))/*M、N矩阵当前非零元素的行相等,继续比较列*/{case1:*Qe=*Mp;Mp++;break;case0:*Qe=*Mp;Qe->e+=Np->e;if(!Qe->e)/*元素值为0,不存入压缩矩阵*/Qe--;Mp++;Np++;break;case-1:*Qe=*Np;Np++;}break;case-1:*Qe=*Np;Np++;}}if(Mp>Me)/*矩阵M的元素全部处理完毕*/while(Np<=Ne
15、){Qe++;*Qe=*Np;Np++;}if(Np>Ne)/*矩阵N的元素全部处理完毕*/while(Mp<=Me){Qe++;*Qe=*Mp;Mp++;}(*Q).tu=Qe-Qh;/*矩阵Q的非零元素个数*/returnOK;}StatusSubtSMatrix(TSMatrixM,TSMatrixN,TSMatrix*Q){/*求稀疏矩阵的差Q=M-N*/inti;for(i=1;i<=N.tu;i++)N.data[i].e*=-1;AddSMatrix(M,N,Q);returnOK;}StatusMultSMatrix
16、(TSMatrixM,TSMatrixN,TSMatrix*Q){/*求稀疏矩阵的乘积Q=M*N*/inti,j,h=M.mu,l=N.nu,Qn=0;/*h,l分别为矩阵Q的行、列值,Qn为矩阵Q的非零元素个数,初值为0*/Elem