《数据结构稀疏矩阵的表示和转置(共3页).doc》由会员分享,可在线阅读,更多相关《数据结构稀疏矩阵的表示和转置(共3页).doc(3页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上数据结构实验报告实验四 稀疏矩阵的表示和转置一、 实验目的1. 掌握稀疏矩阵的三元组顺序表存储结构2. 掌握稀疏矩阵的转置算法。二、 实验内容采用三元组表存储表示,求稀疏矩阵M的转置矩阵T。 (算法5.1) 三、 实验步骤:1. 构建稀疏矩阵M。2. 求稀疏矩阵M的转置矩阵T。3. 输出稀疏矩阵M和稀疏矩阵T。四、 算法说明首先要创建稀疏矩阵的三元组顺序表存储表示,定义mu,nu,tu分别表示矩阵的行数、列数和非零元个数。在进行稀疏矩阵的转置时要做到(1):将矩阵的行列值相互交换;(2):将每个三元组的i,j相互调换;(3):重排三元组之间的次序便可实现矩阵的转置。
2、五、测试结果六、 分析与探讨在此次程序中转置的方法称为快速转置,在转置前,应先求得M的每一列中非零元的个数,进而求得每一列的第一个非零元的位置。七、 附录:源代码数据结构实验报告源代码列在附录中,要求程序风格清晰易理解,有充分的注释。有意义的注释行不少于30%。 #include <stdio.h>#define MAXSIZE 5#define MAXMN 200typedef structint i,j;int e;Triple;typedef structTriple dataMAXSIZE;int rposMAXMN;int mu,nu,tu;/矩阵的行数、列数和非零元个数
3、TSMatrix; /行逻辑连接的顺序表int main()printf("矩阵Mn");TSMatrix M,T;printf("i j vn");int i;for(i=0;i<MAXSIZE;i+)scanf("%d %d %d",&M.datai.i, &M.datai.j, &M.datai.e);printf("请输入矩阵M的行数mu,列数nu,及非零元的个数tun");scanf("%d %d %d",&M.mu, &M.nu, &am
4、p;M.tu);/求稀疏矩阵M的转置矩阵TT.mu=M.nu; T.nu=M.mu; T.tu=M.tu;if(T.tu)int t, column, numMAXMN=0; /用来统计M中每列非零元的个数for(t=0;t<M.tu;t+)+numM.datat.j;T.rpos0=0; for(column=1;column<T.mu;column+) T.rposcolumn=T.rposcolumn-1+numcolumn-1; int p, q;for(p=0;p<M.tu;p+)column=M.datap.j;q=T.rposcolumn;T.dataq.i=M.datap.j;T.dataq.j=M.datap.i;数据结构实验报告T.dataq.e=M.datap.e;T.rposcolumn+; /转置矩阵T中同一行的非零元的起始位置自增1 /输出矩阵M及转置矩阵Tprintf("n矩阵T:n");printf("i j vn");for(i=0;i<T.tu;i+)printf("%d %d %dn",T.datai.i, T.datai.j, T.datai.e);printf("n");return 0;专心-专注-专业