资源描述:
《稀疏矩阵快速转置 数据结构实验报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、南昌航空大学实验报告课程名称:数据结构实验名称:实验五稀疏矩阵的存储和快速转置班级:080611学生姓名:学号:08指导教师评定:签名:题目:假设稀疏矩阵A采用三元组表表示,编写程序实现该矩阵的快速转置要求:输入一个稀疏矩阵A,由程序将其转换成三元组表存储;转置后的三元组表,由程序将其转换成矩阵形式后输出。一、需求分析1.用户可以根据自己的需求输入任意一个稀疏矩阵,通过程序将其转换成三元组存储方式;2.并且能够完成矩阵的转置功能,要求需要使用的方法是快速转置的方法。3.最后要够显示原矩阵和转置后的矩阵让用户能进行比较。4.程序执行的命令包括:(
2、1)构造稀疏矩阵M(2)求转转矩阵T(3)显示(打印)矩阵二、概要设计⒈为实现上述算法,需要线性表的抽象数据类型:ADTSparseMatrix{数据对象:D={aij:
3、aij∈TermSet,i=1…m,m≥0,j=1…n,n≥0m和n分别成为矩阵的行数和列数}数据关系:R={Row,Col}Row={
4、1≤i≤m,1≤j≤n-1}Col={
5、1≤i≤m-1,1≤j≤n}基本操作:CreateSMtrix(&M)操作结果:创建稀疏矩阵M。DestroySMaix(&M)初始条件:稀疏矩阵M
6、已存在。操作结果:销毁稀疏矩阵M。PrintSMatrix(L)初始条件:稀疏矩阵M已经存在。操作结果:输出稀疏矩阵M。CopySMatrix(M,&T)初始条件:稀疏矩阵M已经存在。操作结果:由稀疏矩阵M复制得到T。TransposeSMatrix(M,&T)初始条件:稀疏矩阵M已经存在。操作结果:求稀疏矩阵M的转转矩阵T。7}ADTSparseMatrix2.本程序有三个模块:⑴主程序模块main(){初始化;{接受命令;显示结果;}}⑵矩阵压缩存储单元模块:实现链表抽象数据类型操作,即函数的定义模块;三、详细设计⒈元素类型,结点类型typ
7、edefstruct{inti,j;inte;}Triple;typedefstruct{Tripledata[MAXSIZE+1];intmu,nu,tu;}Tsmatrix;2.对抽象数据类型中的部分基本操作的伪码算法如下:Tsmatrix*creatarray(Tsmatrix*M){intm,n,p=1;intc;printf("pleaseinputthearrayA:");for(m=1;m<=a;m++)for(n=1;n<=b;n++){scanf("%d",&c);if(c!=0){M->data[p].e=c;M->da
8、ta[p].i=m;M->data[p].j=n;p++;}}M->tu=p;M->mu=a;M->nu=b;printf("yuanlaisanyuanzudebiaoshiwei:");for(m=1;m<=M->tu;m++)printf("%3d%3d%3dt",M->data[m].i,M->data[m].j,M->data[m].e);printf("");returnM;}/*三元组快速转置*/Tsmatrix*fasttrans(Tsmatrix*M,Tsmatrix*T)7{intp,col,q,t,m;int
9、num[100];intcpot[100];T->mu=M->nu;T->nu=M->mu;T->tu=M->tu;if(T->tu!=0){for(col=1;col<=M->nu;col++)num[col]=0;for(t=1;t<=M->tu;t++)++num[M->data[t].j];cpot[1]=1;for(col=2;col<=M->nu;col++)cpot[col]=cpot[col-1]+num[col-1];for(p=1;p<=M->tu;++p){col=M->data[p].j;q=cpot[col];T->d
10、ata[q].i=M->data[p].j;T->data[q].j=M->data[p].i;T->data[q].e=M->data[p].e;++cpot[col];}}printf("zhuanzhihoudesanyuanzubiaoshiwei:");for(m=1;m<=T->tu;m++)printf("%3d%3d%3dt",T->data[m].i,T->data[m].j,T->data[m].e);printf("");returnT;}/*输出三元组函数*/voidprint(Tsmatrix*T
11、,intx,inty){intm,n,p=1;intd;for(m=1;m<=x;m++){printf("");for(n=1;n<=y;n++