数据结构c语言版 稀疏矩阵的三元组顺序表存储表示和实现

数据结构c语言版 稀疏矩阵的三元组顺序表存储表示和实现

ID:18808460

大小:48.50 KB

页数:16页

时间:2018-09-25

数据结构c语言版 稀疏矩阵的三元组顺序表存储表示和实现_第1页
数据结构c语言版 稀疏矩阵的三元组顺序表存储表示和实现_第2页
数据结构c语言版 稀疏矩阵的三元组顺序表存储表示和实现_第3页
数据结构c语言版 稀疏矩阵的三元组顺序表存储表示和实现_第4页
数据结构c语言版 稀疏矩阵的三元组顺序表存储表示和实现_第5页
资源描述:

《数据结构c语言版 稀疏矩阵的三元组顺序表存储表示和实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、数据结构C语言版稀疏矩阵的三元组顺序表存储表示和实现数据结构C语言版稀疏矩阵的三元组顺序表存储表示和实现P98编译环境:Dev-C++4.9.9.2日期:2011年2月8日*/typedefintElemType;//稀疏矩阵的三元组顺序表存储表示#defineMAXSIZE100//非零元个数的最大值typedefstruct{inti,j;//行下标,列下标ElemTypee;//非零元素值}Triple;typedefstruct{Tripledata[MAXSIZE+1];//非零元三元组表

2、,data[0]未用intmu,nu,tu;//矩阵的行数、列数和非零元个数}TSMatrix;//创建稀疏矩阵MintCreateSMatrix(TSMatrix*M){inti,m,n;ElemTypee;intk;printf("请输入矩阵的行数,列数,非零元素个数:(逗号)");scanf("%d,%d,%d",&(*M).mu,&(*M).nu,&(*M).tu);(*M).data[0].i=0;//为以下比较顺序做准备for(i=1;i<=(*M).tu;i++){do{print

3、f("请按行序顺序输入第%d个非零元素所在的行(1~%d),""列(1~%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=1;if(m<(*M).data[i-1].i

10、

11、m==(*M).data[i-1].i&&n<=(*M).data[i-1].j)//行或列的顺序有错k=1;}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行%d列%d个非零元素。",M.mu,M.nu,M.tu);printf("%4s%4s%8s","

13、行","列","元素值");for(i=1;i<=M.tu;i++)printf("%4d%4d%8d",M.data[i].i,M.data[i].j,M.data[i].e);}//由稀疏矩阵M复制得到TintCopySMatrix(TSMatrixM,TSMatrix*T){(*T)=M;return1;}//AddSMatrix函数要用到intcomp(intc1,intc2){inti;if(c1

14、/求稀疏矩阵的和Q=M+NintAddSMatrix(TSMatrixM,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[1];//Mp的初值指向矩阵M的非零元素首地址Np=&N.data[1];//Np的初值指向矩阵N的非零元素首地址Me=&M.data[M.tu];//Me指向矩阵

15、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)){case1:*Qe=*Mp;Mp++;break;case0://M、N矩阵当前非零元素的行相等,继续比较列switch(comp(Mp->j,Np->j)){case1:*Qe=*Mp;Mp++;break;case0:*

16、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){Qe++;*Qe=*Np;Np++;}if(Np>Ne)//矩阵N的元素全部处理完毕while(Mp<=Me){Qe++;*Qe=*Mp;Mp++;}(*Q).tu=Q

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。