数据结构第5章节数组和广义表.pptVIP

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

5.1 数组类型 ;基本操作:   InitArray(A, n, bound1, ..., boundn) 操作结果:若维数 n 和各维长度合法则构造相应数组 A。 DestroyArray(A) 初始条件:数组 A 已经存在。 操作结果:销毁数组 A。 Value(A, e, index1, ..., indexn) 初始条件:A 是 n 维数组,e 为元素变量, n 个下标值。 操作结果:若各下标不超界,则e赋值为所指定的A的元 素值,并返回OK。 Assign(A, e, index1, ..., indexn) 初始条件:A 是 n 维数组,e 为元素变量,n 个下标值。 操作结果:若下标不超界,则将 e 的值赋给A中指定 下标的元素。 } ADT Array ;5.1.2 数组的顺序存储表示 通常有两种映象方法: “以行(序)为主(序)”的映象方法 “以列(序)为主(序)”的映象方法 如:二维数组:; 假设二维数组 R[m][n] 每个数据元素占L??存储地址 LOC(i,j) 表示下标为 (i,j) 的数据元素的存储地址, 则 LOC(i,j) 在“以行为主”的顺序映象中的存储地址为:     LOC(i,j) = LOC(0,0) + (i×n+j) ×L   在“以列为主”的顺序映象中的存储地址为: LOC(i,j) = LOC(0,0) + (j×m+i) ×L; 假设三维数组 R[p][m][n] 中每个数据元素占 L 个存储地址,并以 LOC(i,j,k) 表示下标为(i,j,k) 的数据元素的存储地址, 则该数组中任何一对下标(i,j,k) 对应的数据元素在“以行为主”的顺序映象中的存储地址为:     LOC(i,j,k) = LOC(0,0,0) + (i×m×n + j×n+k)×L     ;5.2 矩阵的压缩存储 ;三角矩阵;5.2.2 稀疏矩阵的压缩存储方法 如果矩阵中只有少量的非零值元,并且这些非零值元在矩阵中的分布没有一定规律,则称为随机稀疏矩阵,简称为稀疏矩阵 假设在 m n 的矩阵中有 t 个非零值元, 令 =t /(m×n), 称 为矩阵的稀疏因子,则通常认定 ≤0.05的矩阵为稀疏矩阵。 ; 如何存储稀疏矩阵中的非零值元? 仍然采用二维数组表示稀疏矩阵,它的弊病是    一、浪费空间 二、浪费时间 由此解决稀疏矩阵压缩存储的目标是: 1)尽可能减少或不存储零值元; 2)尽可能不作和零值元进行的运算; 3)便于进行矩阵运算,即易于从一对行列号 找到矩阵的元,易于找到同一行或同一列的非零值元。 ; 一个三元组 ??????? 唯一确定了矩阵A中的一个非零值元,由此可以其数据元素为上述三元组的线性表表示稀疏矩阵,并且非零元在三元组线性表中是以行为主有序排列的 ;一、三元组顺序表 以顺序存储结构作为三元组线性表的存储结构,由此得到的稀疏矩阵的一种压缩存储方法. 稀疏矩阵的三元组顺序表的结构定义 const MAXTERMS=12500; // 非零个数的最大值为12500   typedef struct {    int i, j;     // 该非零元的行号和列号    ElemType e;     // 该非零元的值   } Triple;        // 三元组   typedef struct { Triple data[MAXTERMS + 1]; // data[0] 未用 int rows, cols, terms;// 矩阵的行数、列数和非零元的个数   } TSMatrix;      // 三元组顺序表 ; 当以三元组顺序表表示稀疏矩阵时,是否仍然便于进行运算呢?在此以“转置”运算为例讨论算法。  ;M的三元组顺序表为: ;以下表格中的三行依次为: col M 的列号、 num[col] M 中各列非零元的总数 rpos[col] T 中每一行第一个非零元在 T.data 中的序号:;由此,转置算法的操作步骤为:  1.求 M 矩阵的每一列中非零元的个数;  2

文档评论(0)

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

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

1亿VIP精品文档

相关文档