数据结构课件数据结构第5章.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文档。上传文档
查看更多
数 据 结 构 计算机科学与技术学院 曲立平 Email: quliping@hrbeu.edu.cn 第五章 数组和广义表 学习目标 理解多维数组类型的特点及其在高级编程语言中的存储表示和实现方法,并掌握数组在“以行为主”的存储表示中的地址计算方法。 掌握特殊矩阵的存储压缩表示方法。 理解稀疏矩阵的两类存储压缩方法的特点及其适用范围,领会以三元组表示稀疏矩阵时进行矩阵运算所采用的处理方法。? 重点和难点 重点是学习数组类型的定义及其存储表示。 知识点 数组的类型定义、数组的存储表示、特殊矩阵的压缩存储表示方法、随机稀疏矩阵的压缩存储表示方法。 5.1 数组的定义 数组是线性表的推广 数组可以看成是一种特殊的线性表,即线性表中数据元素本身也是一个线性表。 数组的抽象数据类型定义 ADT Array { 数据对象:ji=0,..., bi-1, i=1,2,..,n D={aj1,j2,...jn|n(0)为数组的维数,bi为数组第i维的长度, ji为数组元素的第i维下标, aj1,j2,...jn ∈ElemSet } 数据关系:R={R1, R2, ..., Rn} Ri={ aj1,…,ji, …,jn, aj1,…,ji+1, …,jn |          0≤jk≤bk-1, 1≤k≤n 且k?i,          0≤ji≤bi-2,          aj1,…,ji, …,jn, aj1,…,ji+1, …,jn ∈D, i=2,...,n } 基本操作 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.2 数组的顺序表示和实现 用一组连续的存储单元来表示数组。 有两种映象方法: “以行(序)为主(序)” :对二维数组进行按行切分,即将数组中的数据元素按行依次排放在存储器中; “以列(序)为主(序)”对二维数组进行按列切分,即将数组中的数据元素按列依次排放在存储器中。  5.3 矩阵的压缩存储 压缩存储 为多个值相同的矩阵元只分配一个存储空间;对零元不分配空间。 5.3.1 特殊矩阵 特殊矩阵 值相同的元素或者零元素在矩阵中的分布有一定规律。 特殊矩阵 值相同的元素或者零元素在矩阵中的分布有一定规律。 特殊矩阵 值相同的元素或者零元素在矩阵中的分布有一定规律。 压缩存储——对称矩阵 压缩存储——下三角矩阵 压缩存储——对角矩阵 5.3.2 稀疏矩阵 压缩存储——稀疏矩阵(三元组顺序表) 以顺序存储结构来表示三元组。 稀疏矩阵的三元组顺序表存储表示 #define MAXSIZE 12500 //假设非零元个数的最大值为12500 typedef struct{ int i,j; //该非零元的行下标和列下标 ElemType e; }Triple; typedef struct{ Triple data[MAXSIZE+1]; //非零元三元组表,data[0]未用 int mu,nu,tu; //矩阵的行数、列数和非零元个数 }TSMatrix ; 求转置矩阵 问题描述 已知一个稀疏矩阵的三元组表,求该矩阵转置矩阵的三元组表。 解决思路 将矩阵行、列维数互换; 将每个三元组中的i和j相互调换; 重排三元组次序。 方法一:按矩阵的列序转置 按T.data中三元组次序依次在M.data中找到相应的三元组进行转置。 算法5.1 方法二:按矩阵的行序转置 按M.data中三元组次序转置,转置结果放入T.data中恰当位置。 此法关键是要预先确定M.data中每一列第一个非零元在T.data中位置。 为确定这些位置,转置前应先求得M.data的每一列中非零元个数。 算法5.2 Status FastTransposeSMatrix(TSMatrix M, TSMatrix T){ //采用三元组表存储表示,求稀疏矩阵M的转置矩阵T。 T.mu=M.nu; T

文档评论(0)

开心农场 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档