- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构--第五章数组和广义表教案
1. 稀疏矩阵的三元组表表示法 对于稀疏矩阵的压缩存储要求在存储非零元素的同时,还必须存储该非零元素在矩阵中所处的行号和列号。我们将这种存储方法叫做稀疏矩阵的三元组表示法。 row col value 该非零元素所在的行号 该非零元素所在的列号 该非零元素的值 每个非零元素在一维数组中的表示形式如图所示: * 三元组表的类型说明: #define MAXSIZE 1000 /*非零元素的个数最多为1000*/ typedef struct {int row, col; /*该非零元素的行下标和列下标*/ ElementType e; /*该非零元素的值*/ }Triple; typedef struct {Triple data[MAXSIZE+1]; /* 非零元素的三元组表 。data[0]未用*/ int m, n, len; /*矩阵的行数、列数和非零元素的个数*/ }TSMatrix; * 1)用三元组表实现稀疏矩阵的转置运算 矩阵转置:指变换元素的位置,把位于(row,col)位置上的元素换到(col ,row)位置上,也就是说,把元素的行列互换。 采用矩阵的正常存储方式时,实现矩阵转置的经典算法如下: Void TransMatrix(ElementType source[n][m], ElementType dest[m][n]) {/*Source和dest分别为被转置的矩阵和转置后的矩阵(用二维数组表示)*/ int i, j; for(i=0;im;i++) for (j=0;j n;j++) dest[i][ j]=source[j] [i] ; } * 实现转置的简单方法: ①矩阵source的三元组表A的行、列互换就可以得到B中的元素,如图 : ②为了保证转置后的矩阵的三元组表B也是以“行序为主序”进行存放,则需要对行、列互换后的三元组B,按B的行下标(即A的列下标)大小重新排序。 B (i,j,x)————(j,i,x) A 两种处理转置算法如下: * 算法一、 void TransposeTSMatrix(TSMatrix A, TSMatrix * B) { /*把矩阵A转置到B所指向的矩阵中去。矩阵用三元组表表示*/ int i , j, k ; B-m= A.n ; B-n= A.m ; B-len= A.len ; if(B-len0) { j=1; for(k=1; k=A.n; k++) for(i=1; i=A.len; i++) if(A.data[i].col==k) { B-data[j].row=A.data[i].col B-data[j].col=A.data[i].row; B-data[j].e=A.data[i].e; j++; } } } * 算法二、 FastTransposeTSMatrix (TSMatrix A, TSMatrix * B) { /*基于矩阵的三元组表示,采用快速转置法,将矩阵A转置为B所指的矩阵*/ int col , t , p,q; int num[MAXSIZE], position[MAXSIZE] ; B-len= A.len ; B-n= A.m ; B-m= A.n ; if(B-len) {for(col=1;col=A.n;col++) num[col]=0; for(t=1;t=A.len;t++) num[A.data[t].col]++; /*计算每一列的非零元素的个数*/ position[1]=1; for(col=2;colA.n;col++) /*求col列中第一个非零元素在B.data[ ]中的正确位置*/ position[col]=position[col-1]+num[col-1]; for(p=1;pA.len.p++) { col=A.data[p].col; q=position[col]; B-data[q].row=A.data[p].col; B-data[q]..col=A.data[p].row; B-data[q].e=A.data[p].e position[col]++; }} } * 用三元组表实现稀疏矩阵的乘法运算 设矩阵M是m1×n1矩阵,N是m2×n2矩阵;若可以相乘,则必须满足矩阵M的列数n1与矩阵N的行数m2相等,才能得到结
文档评论(0)