数据结构课件C版第五章 严蔚敏.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构课件C版第五章 严蔚敏

第五章 数组和广义表 数组的定义 数组的顺序表示 矩阵的压缩存储 广义表的定义 广义表的存储结构 5.1数组的定义 数组和广义表可看成是一种特殊的线性表,其特殊在于,表中的数据元素本身也是一种线性表。 数组: 由一组名字相同、下标不同的变量构成。 数组的处理比其它复杂的结构要简单--特点 ① 数组中各元素具有统一的类型; ② 数组元素的下标一般具有固定的上界和下界,即数组一旦被定义,它的维数和维界就不再改变。 ③数组的基本操作比较简单,除了结构的初始化和销毁之外,只有存取元素和修改元素值的操作。 5.1数组的定义 一维数组的特点:1个下标,ai 是ai+1的直接前驱 二维数组的特点:2个下标,每个元素ai,j受到两个关系(行关系和列关系)的约束: N维数组的特点:n个下标,每个元素受到n个关系约束。一个n维数组可以看成是由若干个n-1维数组组成的线性表。 5.2 数组的顺序表示 问题:计算机的存储结构是一维的,而数组一般是多维的,怎样存放? 解决办法:事先约定按某种次序将数组元素排成一列序列,然后将这个线性序列存入存储器中。 以行序为主序 以列序为主序 注意: 若规定好了次序,则数组中任意一个元素的存放地址便有规律可寻,可形成地址计算公式; 约定的次序不同,则计算元素地址的公式不同; C和PASCAL中一般采用行优先顺序;FORTRAN采用列优先。 5.2 数组的顺序表示 以“行序为主序”的存储映象 5.2 数组的顺序表示 5.2 数组的顺序表示 推广到一般情况,可得到 n 维数组数据元素存储位置的映象关系 5.2 数组的顺序表示 例:一个二维数组A,行下标的范围是1到6,列下标的范围是0到7,每个数组元素用相邻的6个字节存储,存储器按字节编址。那么,这个数组的体积是 个字节。 设数组a[1…60, 1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为 。 5.3矩阵的压缩存储 什么是压缩存储? 若多个数据元素的值都相同,则只分配一个元素值的存储空间,且零元素不占存储空间。 什么样的矩阵具备压缩条件? 一些特殊矩阵,如:对称矩阵,对角矩阵,三角矩阵,稀疏矩阵等。 5.3矩阵的压缩存储 对称矩阵 在一个n阶方阵A中,若元素满足下述性质: aij=aji 1≤i,j ≤n 则称A为对称矩阵。 对称矩阵中的元素关于主对角线对称,故只要存储矩阵中上三角或下三角中的元素,让每两个对称的元素共享一个存储空间,这样,能节约近一半的存储空间。 5.3矩阵的压缩存储 5.3矩阵的压缩存储 三角矩阵 5.3矩阵的压缩存储 对角矩阵 5.3矩阵的压缩存储 什么叫稀疏矩阵? 假设 m 行 n 列的矩阵含 t 个非零元素,则称 为稀疏因子 通常认为 ? ? 0.05 的矩阵为稀疏矩阵。 稀疏矩阵的压缩存储方法: 三元组顺序表 行逻辑联接的顺序表 十字链表 5.3矩阵的压缩存储 --三元组顺序表 三元组顺序表 5.3矩阵的压缩存储--三元组顺序表 #define MAXSIZE 12500 typedef struct { int i, j; //该非零元的行下标和列下标 ElemType e; // 该非零元的值 } Triple; // 三元组类型 typedef struct{ Triple data[MAXSIZE + 1]; int mu, nu, tu; } TSMatrix; // 稀疏矩阵类型 5.3矩阵的压缩存储--三元组顺序表 如何求转置矩阵? 5.3矩阵的压缩存储--三元组顺序表 用常规的二维数组表示时的算法 for (col=1; col=nu; ++col) for (row=1; row=mu; ++row) T[col][row] = M[row][col]; 其时间复杂度为: O(mu×nu) 5.3矩阵的压缩存储--三元组顺序表 用“三元组”表示时如何实现? 解决思路: 将矩阵行、列维数互换 将每个三元组中的i和j相互调换 重排三元组次序 方法一: 对A中的每一列 col(1≤col ≤ n),通过从头至尾扫描三元组表a.data,找出所有列号等于col的那些三元组,将它们的行号和列号互换后依次放入b.data中,即可得到B的按行优先的压缩存储表示。 5.3矩阵的压缩存储--三元组顺序表 Status TransposeSMatrix(TSMatrix M, TSMatrix T) {

文档评论(0)

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

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

1亿VIP精品文档

相关文档