数据结构及STL_第4章_多维数组及广义表.pptVIP

数据结构及STL_第4章_多维数组及广义表.ppt

  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文档。上传文档
查看更多
《数据结构与STL》 第四章 多维数组与广义表 北京邮电大学 信息与通信工程学院 第四章 多维数组和广义表 学习内容: 4.1 多维数组 4.2 矩阵的压缩存储 4.3 广义表 4.4 实例分析 4.5 使用STL操作多维数组 4.1 多维数组 由类型相同的数据元素构成的有序集合。对于k维数组,每个元素都要受k个线性关系的约束。 行优先存储——基本思想是按行存储,即存完第i行再接着存储第i+1行。按行优先顺序存储二维数组Amn,线性序列为:a11,a12,…,a1n,a21,a22,…,a2n,…,am1,am2,…,amn 列优先存储——基本思想是按列存储,即存完第i列再接着存储第i+1列。例如存储二维数组Amn,按列优先顺序存储的线性序列为: a11,a21,…,am1,a12,a22,…,am2,…,a1n,a2n,…,amn 多维数组的存储 C++中设三维数组Amnp,第一个元素为a000,若按行优先存储,则aijk前面共有i×n×p+j×p+k个元素;若按列优先存储,则aijk前面共有i+m×j+m×n×k个元素 第四章 多维数组和广义表 学习内容: 4.1 多维数组 4.2 矩阵的压缩存储 4.3 广义表 4.4 实例分析 4.5 使用STL操作多维数组 4.2 矩阵的压缩存储 矩阵是一种常见的处理对象 矩阵可看作是二维数组 对于一些数据元素具有特殊规律的矩阵,常常采用一些特殊的存储方法以减少存储空间 对称矩阵 三角矩阵 三角矩阵分为上三角矩阵和下三角矩阵。设n阶方阵A,若其下三角的元素除对角线外均为常数c,即aij=c,0≤j<i<n,则称该方阵为上三角矩阵 按行优先存储n阶上三角矩阵,设aij存储到sa[k]中 思考 按行优先存储n阶下三角矩阵时,首先存储下三角的元素,最后存储上三角的常数项c。给出aij与sa[k]的对应关系。 对角矩阵 所有非零元素都集中在对角线附近的方阵 n维m对角矩阵A(m为奇数),设其对角线附近的元素aij存储到一维数组元素sa[k]中。由于aij在对角线附近,因此有: min(i-(m-1)/2,0)≤j≤min(i+(m-1)/2,n-1) aij之前共有i行,每行m个元素,因此首先要存储这mi个元素。在aij所在行上,aij之前共有j-i+(m-1)/2个元素。因此在存储aij之前,总共要存储mi+j-i+(m-1)/2个元素,即有: k=mi+j-i+(m-1)/2=(m-1)i+j+(m-1)/2 4.2.2 稀疏矩阵压缩存储 矩阵Amn中的非零元素个数s远远小于矩阵元素的总数m×n 稀疏矩阵的转置操作 稀疏矩阵简单转置算法 遍历n趟三元组表: 第一趟遍历找出列号为0的三元组,并将其行号和列号对调,添加到转置矩阵对应的三元组表中。 第二趟遍历找出列号为1的三元组并进行相同的操作, 依次类推,最后一趟遍历找出列号为n-1的三元组。 由于每趟遍历都需要比较所有的t个三元组的列号,因此算法的时间复杂度为O(nt)。 简单转置算法 快速的稀疏矩阵转置算法 时间复杂度为O(n+t) 引入两个数组作为辅助数据结构: number[n]:存储矩阵A中每列非零元素的个数; position[n]:初始值表示矩阵A中每列的第一个非零元素在B中的位置 算法的伪代码 1. 设置转置矩阵B的行数、列数和非零元素的个数; 2. 计算A中每一列的非零元素个数,存储到number数组; 3. 计算A中每一列的第一个非零元素在B中的下标,存储到position数组; 4. 依次取A中的每一个非零元素对应的三元组; 4.1 确定该元素在B中的下标pb; 4.2 将该元素的行号列号交换后存入B中pb的位置; 4.3 预置该元素所在列的下一个元素的存放位置; 十字链表 第四章 多维数组和广义表 学习内容: 4.1 多维数组 4.2 矩阵的压缩存储 4.3 广义表 4.4 实例分析 4.5 使用STL操作多维数组 4.3.1 广义表的逻辑结构 广义表(lists)也是n(n≥0)个元素a1,a2,…,an构成的有限序列,与线性表不同的是,ai可以是原子结点,也可以是一个广义表,因此广义表是递归定义的。 广义表记作LS=(a1,a2,…,an),LS是广义表的名称,n为广义表的长度 广义表的表示 广义表的两个基本操作: 取表头GetHead(LS) 取表尾GetTail(LS) 对于长度为n(n≥1)的广义表LS=(a1,a2,…,an),称a1为广义表LS的表头,子表(a2,…,an)

文档评论(0)

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

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

1亿VIP精品文档

相关文档