1、稀疏矩阵的存储和快速转置实验报告福 建 工 程 学 院课程设计课 程: 数据结构 题 目: 稀疏矩阵的快速转置 专 业: 运算机类 班 级: 座 号: 姓 名: 2021年6月25日 实验题目:稀疏矩阵的快速转置一、要解决的问题利用三元组表存储稀疏矩阵,利用快速转置算法进行转置,并输出转置之前和以后的三元组表和矩阵。二、算法大体思想描述:由于稀疏矩阵的非零元素较少,零元素较多,因此只需存储其非零元素。因此能够成立一个三元组表,别离保存稀疏矩阵的非零元素的行号、列号和元素值。对稀疏矩阵进行快速转置是能够引入两个向量numn+1,cpotn+1,别离标记矩阵中第col列的非零元素个数和第一个非零元
2、素在转置后的矩阵的位置;再扫描三元组表,找到非零元素,直接对其在转置后的矩阵所在的位置上进行修改,以节省时刻。三、详细设计元素类型,结点类型typedef struct int i,j; int e;Triple;typedef struct Triple dataMAXSIZE+1; int mu,nu,tu; Tsmatrix; 2.对抽象数据类型中的部份大体操作的伪码算法如下:Tsmatrix * creatarray(Tsmatrix *M) int m,n,p=1; int c; printf(please input the array A:n); for(m=1;m=a;m+)
3、for(n=1;ndatap.e=c; M-datap.i=m; M-datap.j=n; p+; M-tu=p; M-mu=a; M-nu=b; printf(yuan lai san yuan zu de biao shi wei :nn); for(m=1;mtu;m+) printf(%3d%3d%3dt,M-datam.i,M-datam.j,M-datam.e); printf(n); return M; /*三元组快速转置*/Tsmatrix * fasttrans(Tsmatrix *M,Tsmatrix *T) int p,col,q,t,m; int num100; int
4、 cpot100; T-mu=M-nu; T-nu=M-mu; T-tu=M-tu; if(T-tu!=0) for(col=1;colnu;col+) numcol=0; for(t=1;ttu;t+) +numM-datat.j; cpot1=1; 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-datap.e; +cpotcol; printf(n
5、nzhuan zhi hou de san yuan zu biao shi wei :nn); for(m=1;mtu;m+) printf(%3d%3d%3dt,T-datam.i,T-datam.j,T-datam.e); printf(n); return T;/*输出三元组函数*/void print(Tsmatrix *T,int x,int y) int m,n,p=1; int d; for(m=1;m=x;m+) printf(n); for(n=1;ndatap.i=m&T-datap.j=n) d=T-datap.e; p+; else d=0; printf(%6d,d
6、); 3.主函数和其他函数的伪码算法void main() Tsmatrix *M,*T; M=(Tsmatrix *)malloc(sizeof(Tsmatrix); T=(Tsmatrix *)malloc(sizeof(Tsmatrix); printf(please input arrays row and col:n); scanf(%d%d,&a,&b); /*输入行列数*/ M=creatarray(M); /*创建稀疏矩阵*/ printf(you had creat the array:n); print(M,a,b); /*输出创建好的三元组*/ T=fasttrans(M
7、,T); /*将三元组转置*/ printf(the trans array is:n); print(T,b,a); getch();4、模块结构及功能四、源程序清单:#include#define MAXSIZE 100typedef struct int i,j; int e;Triple;typedef struct Triple dataMAXSIZE+1; int mu,nu,tu; Tsmatrix;int a,b; /*概念全局变量数组的行数a和列数b*/*用数组创建三元组*/Tsmatrix * creatarray(Tsmatrix *M) int m,n,p=1; int
8、 c; printf(please input the array A:n); for(m=1;m=a;m+) for(n=1;ndatap.e=c; M-datap.i=m; M-datap.j=n; p+; M-tu=p; M-mu=a; M-nu=b; printf(yuan lai san yuan zu de biao shi wei :nn); for(m=1;mtu;m+) printf(%3d%3d%3dt,M-datam.i,M-datam.j,M-datam.e); printf(n); return M;/*三元组快速转置*/Tsmatrix * fasttrans(Ts
9、matrix *M,Tsmatrix *T) int p,col,q,t,m; int num100; int cpot100; T-mu=M-nu; T-nu=M-mu; T-tu=M-tu; if(T-tu!=0) for(col=1;colnu;col+) numcol=0; for(t=1;ttu;t+) +numM-datat.j; cpot1=1; 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-dat
10、aq.j=M-datap.i; T-dataq.e=M-datap.e; +cpotcol; printf(nnzhuan zhi hou de san yuan zu biao shi wei :nn); for(m=1;mtu;m+) printf(%3d%3d%3dt,T-datam.i,T-datam.j,T-datam.e); printf(n); return T;/*输出三元组函数*/void print(Tsmatrix *T,int x,int y) int m,n,p=1; int d; for(m=1;m=x;m+) printf(n); for(n=1;ndatap.i
11、=m&T-datap.j=n) d=T-datap.e; p+; else d=0; printf(%6d,d); void main() Tsmatrix *M,*T; M=(Tsmatrix *)malloc(sizeof(Tsmatrix); T=(Tsmatrix *)malloc(sizeof(Tsmatrix); printf(please input arrays row and col:n); scanf(%d%d,&a,&b); /*输入行列数*/ M=creatarray(M); printf(you had creat the array:n); print(M,a,b); T=fasttrans(M,T); printf(the trans array is:n); print(T,b,a); getch();五、测试数据及测试结果:(1)我输入的稀疏矩阵为:(2)回车显示的结果是:六、课程设计总结及心得体会:通过本次课程设计,我对有关稀疏矩阵及其三元组表的知识做了温习和巩固。在课程设计的进程中,碰到了很多问题,如稀疏矩阵操作中对矩阵信息统计犯错的问题。我为此在程序中加入printf语句,通过该语句是不是输出,找到致使运行犯错的位置,再进行改动调试,最终解决了问题,同时也加深了对两个程序的明白得。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1