欢迎来到天天文库
浏览记录
ID:22287491
大小:72.50 KB
页数:6页
时间:2018-10-28
《数据结构三元组完成版》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、c13稀疏矩阵应用要求:实现三元组,十字链表下的稀疏矩阵的加、转、乘的实现。(1)稀疏矩阵的存储(2)稀疏矩阵加法(3)矩阵乘法(4)矩阵转置1周考核耍求:本题侧重丁•数组的操作用三元组完成稀疏矩阵的加法乘法转置#include#includetypedefintElemType;//稀疏矩阵的三元组顺序表存储表示#defineMAXSIZE100//非零元个数的最人值typedefstruct{inti,j;//行下标,列下标ElemTypee;//非零元素值{Triple;typedefst
2、ruct{Tripledata[MAXSIZE+ll;//非零元三元组表,data[01未用intmu,nu,tu;//矩阵的行数、列数和非零元个数JTSMatrix;//创建稀疏矩阵MintCreateSMatrix(TSMatrix*M){inti,m,n;ElemTypee;intk;printf("请输入矩阵的行数,列数,非零元素个数:(逗号)”);scanf("%d,%d,%dM,&(*M).mu,&(*M).nu,&(*M).tu);(*M).data[0].i=0;//为以下比较顺序做准备for(i=1;i<=(*
3、M).tu;i++){do{printf(”请按行序顺序输入第%d个非零元素所在的行(1〜%d),"列(l〜%d),元素值:(逗号)",i,(*M).mu,(*M).nu);scanf("%d,%d,%d",&m,&n,&e);k=0;//行或列超出范围if(m<1
4、
5、m>(*M).mu
6、
7、n<1
8、
9、n>(*M).nu)k=l;if(m<(*M).data[i-l].i
10、
11、m==(*M).data[i-l].i&&n<=(*M).data[i-l].j)//行或列的顺序有错k=l;}while(k);(*M).data[i].i
12、=m;//行下标(*M).data[i].j=n;//列下标(*M).data[i].e=e;//该下标所对位的值}return1;}//销毀稀疏矩阵M,所有元素置空voidDestroySMatrix(TSMatrix*M){(*M).mu=0;(*M).nu=0;(*M).tu=0;}//输出稀疏矩阵MvoidPrintSMatrix(TSMatrixM){inti;printf(”%d行%(1列。/od个非零元素。",M.mu,M.nu,M.tu);printf("%4s%4s%8s","行■’,"列'"元素值")
13、;for(i=l;i<=M.tu;i++)printf(',%4d%4d%8d,,,M.data[i].i,M.data[i].j,M.data[i].e);}//由稀疏矩阵MS制得到TintCopySMatrix(TSMatrixM,TSMatrix*T){(*T)=M;return1;}//AddSMatrix函数要用到intcomp(intcl,intc2){inti;if(cl14、SMatrixM,TSMatrixN,TSMatrix*Q){Triple*Mp,*Me,*Np,*Ne,*Qh,*Qe;if(M.mu!=N.mu)return0;if(M.nu!=N.nu)return0;(*Q).mu=M.mu;(*Q).nu=M.nu;Mp=&M.data[l];//Mp的初值指向矩阵M的非零元素首地址Np=&N.data[lJ;//Np的初值指向矩阵N的非零元素首地址Me=&M.data[M.tu];//Me指向矩阵M的非零元素尾地址Ne=&N.data[N.tul;//Ne指矩阵N的非零元素尾地址Qh=15、Qe=(*Q).data;//Qh、Qe的初值指向矩阵Q的非零元素首地址的前一地址while(Mp<=Me&&Np<=Ne){Qe++;switch(comp(Mp->i,Np->i)){case1:*Qe=*Mp;Mp++;break;case0://M、N矩阵当前非零元素的行相等,继续比较列switch(comp(Mp-〉j,Np-〉j)){case1:*Qe=*Mp;Mp++;break;case0:*Qe=*Mp;Qe-〉e+=Np-〉e;if(!Qe->e)//元素值为0,不存入压缩矩阵Qe--;Mp++;Np++;bre16、ak;case-1:*Qe=*Np;Np++;}break;case-1:*Qe=*Np;Np++;}}if(Mp>Me)//矩阵M的元素全部处理完毕while(Np<=Ne){Qe++;*Qe=*Np;Np++;}if(Np>Ne)
14、SMatrixM,TSMatrixN,TSMatrix*Q){Triple*Mp,*Me,*Np,*Ne,*Qh,*Qe;if(M.mu!=N.mu)return0;if(M.nu!=N.nu)return0;(*Q).mu=M.mu;(*Q).nu=M.nu;Mp=&M.data[l];//Mp的初值指向矩阵M的非零元素首地址Np=&N.data[lJ;//Np的初值指向矩阵N的非零元素首地址Me=&M.data[M.tu];//Me指向矩阵M的非零元素尾地址Ne=&N.data[N.tul;//Ne指矩阵N的非零元素尾地址Qh=
15、Qe=(*Q).data;//Qh、Qe的初值指向矩阵Q的非零元素首地址的前一地址while(Mp<=Me&&Np<=Ne){Qe++;switch(comp(Mp->i,Np->i)){case1:*Qe=*Mp;Mp++;break;case0://M、N矩阵当前非零元素的行相等,继续比较列switch(comp(Mp-〉j,Np-〉j)){case1:*Qe=*Mp;Mp++;break;case0:*Qe=*Mp;Qe-〉e+=Np-〉e;if(!Qe->e)//元素值为0,不存入压缩矩阵Qe--;Mp++;Np++;bre
16、ak;case-1:*Qe=*Np;Np++;}break;case-1:*Qe=*Np;Np++;}}if(Mp>Me)//矩阵M的元素全部处理完毕while(Np<=Ne){Qe++;*Qe=*Np;Np++;}if(Np>Ne)
此文档下载收益归作者所有