数据结构(清华严蔚敏版)第五章.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构(清华严蔚敏版)第五章

三 峡 大 学 经济与管理学院 * 第五章 数组和广义表 5.1 数组的定义和运算 数组是大家十分熟悉的一种数据类型,很多高级语言都 支持数组,数组可以看成是一般线性表的扩充。二维数 组可以看成是线性表的线性表。通常我们以二维数组座 位多维数组的代表来讨论。 5.2 数组的顺序存储和实现 typedef ElemType Array[n]; 操作和线性表的基本相同就不做讨论了。 另外一种第一方式见书P93 课堂练习: 1、将矩阵A转置得到矩阵B,写出算法。 2、将矩阵A乘以矩阵B得到矩阵C,写出算法。 5.3 矩阵的压缩存储 压缩存储:为多个值相同的元素只分配一个存储空间; 对零元素不分配存储空间。 特殊矩阵:若值相容的元素或者零元素在矩阵中的分布 有一定规律,则称作特殊矩阵。 反之,称作稀疏矩阵。 5.3.1 特殊矩阵 主要考察对称矩阵的压缩存储。 对称矩阵:aij=aji ; 只需要以行序为主序存储其下三角中的元素即可。 对于n*n的对称矩阵只需要存储1+2+3+……+n=n*(n+1)/2 个元素。 假设用一维数组B[]存储,则任给aij,怎样找出和B[K]对 应的K值? 5.3.2 稀疏矩阵 设在m*n矩阵中,有t个元素不为零,令ζ=t/(m*n),当 ζ小于等于0.05时,称为稀疏矩阵, ζ称为系数因子 。 存储方法: 1、三元组顺序表 2、十字链表 3、行逻辑链接的顺序表 1、三元组顺序表 #define MAXSIZE ? typedef struct { int i,j; //存储非零元素的行下标和列下标 ElemType e; }Triple; typedef union { Triple data[MAXSIZE+1]; //存储非零元,data[0]未用 int mu,nu,tu; //矩阵的行数、列数和非零元个数 }TSMatrix 矩阵的转置操作: 对于m*n矩阵M转置后是一个n*m矩阵T,且T[i,j]=M[j,i] 经典算法: void TransMatrix(ElemType source[n][m],ElemType dest[m][n]) {int j,k; for(j=0;jm;j++) for(k=0;kn;k++) dest[j][k]=source[k][j]; } 若用三元组实现矩阵转置,实现转置的简单方法是: (1)矩阵source的三元组表A的行、列互换就可以得到B中的元素。 (2)为了保证转置后的矩阵的三元组表B也是以“行序为主序”进行存放的,则需要对行、列互换后的三元组表B按照B的行下标大小重新排序。 我们可以看出,步骤(1)很容易实现,但步骤(2) 重新排序时势必要移动元素,从而影响算法的效率。 为了避免元素的移动,我们可以采用以下两种处理方 法: 方法一:为了避免行、列互换后重新排序,我们按照 三元组表A的列序(即转置后三元组表B的行序)进行 转置,并依次送入B中,这样转置后得到的三元组表恰 好是以“行序为主序”的。 我们附设一个计数器j,用于指向当前转置后元素应该 放入三元组表B中的位置,处理完一个元素后,j加1, j的初值为1。 void TransposeTSMatrix(TSMatrix A,TSMatrix 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++;}}} 方法二:依次按照三元组表A的次序进行转置,转置后 直接放到三元组表B的正确位置上。这种算法称为快速 转置算法。 为了能够将待转置三元组表A中元素一次定位到三元组 表B的正确位置上,需要预先计算一下的数据: (1)、待转置矩阵的每一列中非零元的个数。 (2)、待转置矩阵的每一列中第一个非零元在三元组表中的正确位置。 详细算法见书P99 2、行

文档评论(0)

qiwqpu54 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档