C语言数据结构稀疏矩阵_第1页
C语言数据结构稀疏矩阵_第2页
C语言数据结构稀疏矩阵_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验十稀少矩阵#include#defineOK1#defineERROR0#defineTRUE1#defineFALSE0#defineMAXSIZE100typedefintStatus;typedeffloatElemType;typedefstructinti,j;/非零元素行下标和列下标ElemTypee;/非零元素值Triple;typedefstructTripledataMAXSIZE+1;/非零元三元组表,data0不用intmu,nu,tu;/矩阵的行数、列数和非零元素个数TSMatrix;TSMatrixNewMatrix(intm,intn);/新建一个三元组表示的稀

2、少矩阵StatusInsertElem(TSMatrix*M,introw,intcol,ElemTypee);在三元组表示的稀少矩阵M,第row行,第col列地点插入元素e插入成功,返回OK,不然返回ERRORStatusFindElem(constTSMatrix*M,introw,intcol,ElemType*e);查找三元组表示的稀少矩阵M中,第row行,第col列元素,若不为0,则用e返回其值,并返回TRUE,不然返回FALSEStatusTransposeSMatrix(constTSMatrix*M,TSMatrix*T);采纳三元组表储存表示,求稀少矩阵M的转置矩阵TStat

3、usFastTransposeSMatrix(constTSMatrix*M,TSMatrix*T);利用三元组次序表储存表示,求稀少矩阵M的转置矩阵TStatusMultSMatrix(constTSMatrix*M,constTSMatrix*T,TSMatrix*Q);稀少矩阵的乘法,假如切合乘法例则,Q返回M*T结果,并返回OK,不然返回ERRORvoidPrintSMatrix(constTSMatrix*M);打印稀少矩阵全部元素intmain()TSMatrixM=NewMatrix(3,4);TSMatrixT;TSMatrixQ;InsertElem(&M,3,2,3.65)

4、;InsertElem(&M,2,2,2.31);printf(nM:);PrintSMatrix(&M);FastTransposeSMatrix(&M,&T);printf(nT(TransposeofM):);PrintSMatrix(&T);MultSMatrix(&M,&T,&Q);printf(nM*T=);PrintSMatrix(&Q);return0;TSMatrixNewMatrix(intm,intn)/新建一个三元组表示的稀少矩阵TSMatrixM;M.mu=m;M.nu=n;M.tu=0;returnM;StatusInsertElem(TSMatrix*M,intr

5、ow,intcol,ElemTypee)/在三元组表示的稀少矩阵M,第row行,第col列地点插入元素e插入成功,返回OK,不然返回ERRORinti,t,p;if(M-tu=MAXSIZE)目前三元组表已满printf(nError:Thereisnospaceinthematrix;n);returnERROR;if(rowM-mu|colM-nu|row1|colmu=M-nu;if(M-tu=0)/插入前矩阵M没有非零元素T-nu=M-mu;T-tu=M-tu;if(T-tu)M-datap.i=row;M-datap.j=col;q=1;M-datap.e=e;for(col=1;c

6、olmu;col+)M-tu+;for(p=1;ptu;p+)returnOK;if(M-datap.j=col)for(t=1;ttu;t+)/找寻适合的插入地点T-dataq.i=M-datap.j;if(row=M-datat.i)&(col=M-datat.j)T-dataq.j=M-datap.i;p+;T-dataq.e=M-datap.e;if(row=M-datat-1.i&col=M-datat-1.j)q+;/插入前,该元素已经存在M-datat-1.e=e;returnOK;returnOK;for(i=M-tu;i=p;i-)/挪动p以后的元素StatusFastTra

7、nsposeSMatrix(constTSMatrixM-datai+1.i=M-datai.i;*M,TSMatrix*T)M-datai+1.j=M-datai.j;M-datai+1.e=M-datai.e;/利用三元组次序表储存表示,求稀少矩阵M的转/插入新元素置矩阵TM-datap.i=row;intcol,t,p,q,*num,*cpot;M-datap.j=col;T-mu=M-nu;M-datap.e=e;T-nu=M-mu;M-tu+;T-tu=M-tu;returnOK;if(T-tu)StatusFindElem(constTSMatrix*M,introw,intcol

8、,ElemType*e)num=(int*)malloc(sizeof(int)*M-tu);cpot=(int*)malloc(sizeof(int)*M-tu);/查找三元组表示的稀少矩阵M中,第row行,if(!(num&cpot)第col列元素,若不为0,/则用e返回其值,并返回TRUE,不然返回printf(Applyformemoryerror.n);FALSEexit(0);intp;for(p=1;ptu;p+)if(M-datap.i=row&M-datap.j=col)for(col=1;colnu;col+)numcol=0;/求M中每一列含有*e=M-datap.e;非

9、零元素的个数returnTRUE;for(t=1;ttu;t+)+numM-datat.j;returnFALSE;cpot1=1;/求第col列中第一个非StatusTransposeSMatrix(constTSMatrix零元素在b.data中的序号*M,TSMatrix*T)for(col=2;colnu;col+)cpotcol=cpotcol-1+numcol-1;for(p=1;ptu;p+)col=M-datap.j;q=cpotcol;T-dataq.i=M-datap.j;T-dataq.j=M-datap.i;T-dataq.e=M-dataq.e;+cpotcol;/f

10、or/ifreturnOK;StatusMultSMatrix(constTSMatrix*M,constTSMatrix*T,TSMatrix*Q)稀少矩阵的乘法,假如切合乘法例则,Q返回M*T结果,并返回OK,不然返回ERRORinti,j,k,p;ElemTypem,t,s;if(M-nu!=T-mu)printf(Sorry,thesetwomatricecantmultiply.n);returnERROR;Q-mu=M-mu;Q-nu=T-nu;Q-tu=0;p=1;for(i=1;imu;i+)for(j=1;jnu;j+)s=0;for(k=1;knu;k+)if(FALSE=FindElem(M,i,k,&m)continue;if(FALSE=FindElem(T,k,j,&t)continue;s+=m*t;if(s!=0)/Qij非零Q-datap.i=i;Q-datap.j=j;Q-datap.e=s;p+;Q-tu+;returnOK;voidPrintSMatrix(constTSMatrix*M)打印稀少矩阵全部元素inti,j,p=1;printf(nsize:%d%dn,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论