《数据结构详解》课件.ppt

  1. 1、本文档共60页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第5章 数组和广义表 5.1数组的定义 5.2数组的顺序表示和实现 5.3 矩阵的压缩存储 5·4广义表 5.5广义表的存储结构 Status TransposeSMatrix(TSMatrix M, TSMatrix T) { //采用三元组表存储表示,求稀疏矩阵M的转置疏矩T。 T.mu=M.nu; T.nu=M.mu; T.tu=M.tu; if(T.tu) { q=1; for(col=1; col=M.nu; ++col ) for(p=1; p=M.tu; ++p) if(M.data[p].j= =col) { T.data[q].i=M.data[p].j; T.data[q].j=M.data[p].i; T.data[q].e=M.data[p].e; ++q; } } return OK; }//TransposeMatrix 应确切知道转置前每一列的第一个非零元在T中的位置 用num[col]表示M中第col列中非零元的个数 cpot[col]表示M中第col列的第一个非零元在T的位置 按三元组的顺序进行转置 col 1 2 3 4 5 6 7 num[col] 2 2 2 1 0 1 0 cpot[col] 1 3 5 7 8 8 9 0 12 9 0 0 0 0 0 0 0 0 0 0 0 -3 0 0 0 0 14 0 0 0 24 0 0 0 0 0 18 0 0 0 0 0 15 0 0 -7 0 0 0 ( (1,3,-3), (1,6,15), (2,1,12), (2,5,18), (3,1,9), (3,4,24), (4,6,-7), (6,3,14)) ((1, 2,12), ( 1, 3, 9), ( 3, 1,-3), ( 3, 6,14), ( 4, 3,24), ( 5, 2,18), ( 6, 1,15), ( 6, 4,-7)) Status FastTransposeSMatrix(TSMatrix M,TSMatrix T) { //采用三元组表存储表示,求稀疏矩阵M的转置疏矩T。 T.mu=M.nu;T.nu=M.mu;T.tu=M.tu; if(T.tu) {q=1; for(col=1; col=M.nu; ++col ) num[col]=0; for(t=1; t=M.tu; ++t ) ++num[M.data[t].j]; //求M中每一列含非零元素个数 cpot[1]=1; for (col=2; col=M.nu; ++col ) //求第col列中第一个非零元素在T.data中的序号 cpot[col]=cpot[col-1]+num[col-1]; for (p=1; p=M.tu; ++p ) {col=M.data[p].j; q=cpot[col]; T.data[q].i=M.data[p].j; T.data[q].j=M.data[p].i; T.data[q].e=M.data[p].e ; ++cpot[col]; } } return OK; }//FastTransposeMatrix (2)行逻辑链接的顺序表 两个矩阵相乘的一般方法: for(i=1; i=m1; ++i ) for(j=1;j=n2;++j) { Q[i][j]=0; for(k=1;k=n1;++k) Q[i][j]+=M[i][k]*N[k][j]; } 若M和N都是稀疏矩阵, 则M[i][k]和N[k][j]中有一个是零,就不用相乘, 因此,实际是M中的三元组的j与 N中三元组的i相同才相乘 因而要记录N中每一行的第一个非零元和 最后一个非零元在三元组中的位置 行逻辑顺序表类型 typedef struct {

文档评论(0)

咪蒙 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档