数据结构第五章数组广义表.ppt

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

数据结构 第五章 数组与广义表 数组和广义表简单描述 数组和广义表可看成是一种特殊的线性表。表中的元素本身也是一种数据结构。 数组的的数据元素是数组;广义表的数据元素可以是原子类型,也可以是广义表,分别称为广义表的原子项和子表 5.1 数组的定义 数组是我们最熟悉的数据类型,在早期的高级语言中,数组是唯一可供使用的数据类型。由于数组中各元素具有统一的类型,并且数组元素的下标一般具有固定的上界和下界,因此,数组的处理比其它复杂的结构更为简单。多维数组是向量的推广。例如,二维数组: 5.1 数组的定义 二维数组 二维数组可以看成是由若干个行向量组成的向量,也可以看成是若干个列向量组成的向量。 在C语言中,一个二维数组类型可以定义为其分量类型为一维数组类型的一维数组类型,也就是说,typedef elemtype array2[m][n]; 等价于: typedef elemtype array1[n]; typedef array1 array2[m]; 多维数组:用一维顺序结构线性表实现多维数组 struct Array { ElemType *buffer; // 数据区 int dims; // 维数 int *L; // 各维长度 }; 5.2 数组的顺序表示和实现 设一3维数组A[4][2][3],存贮在一个顺序线性表S中,结构如下所示: 5.2 数组的顺序表示和实现 两种顺序存储方式: 行优先顺序——将数组元素按行排列,第i+1个行向量紧接在第i个行向量后面。以二维数组为例,按行优先顺序存储的线性序列为:a11,a12,…,a1n,a21,a22,…a2n,……,am1,am2,…,amn。在PASCAL、C语言中,数组就是按行优先顺序存储的。行优先顺序推广到多维数组,可规定为先排最右的下标。 列优先顺序——将数组元素按列向量排列,第j+1个列向量紧接在第j个列向量之后,A的m*n个元素按列优先顺序存储的线性序列为:a11,a21,…,am1,a12,a22,…am2,……,an1,an2,…,anm 。在FORTRAN语言中,数组就是按列优先顺序存储的。列优先顺序推广到多维数组,可规定为先排最左的下标。 5.2 数组的顺序表示和实现 二维数组元素的存取 二维数组Amn按“行优先顺序”存储在内存中,假设每个元素占用L个存储单元。 元素aij的存储地址应是数组的基地址加上排在aij前面的元素所占用的单元数。因为aij位于第i行、第j列,前面 i-1 行一共有(i-1) ×n 个元素,第i行上aij前面又有j-1个元素,故它前面一共有(i-1) ×n+j-1个元素,因此,aij的地址计算函数为: LOC(aij) = LOC(a11)+[(i-1)*n+j-1]*L 5.2 数组的顺序表示和实现 例:二维数组A[c1..d1,c2..d2]的存取 分析:aij前一共有i-c1行,二维数组一共有d2-c2+1列,故这i-c1行共有(i-c1)*(d2-c2+1)个元素,第i行上aij前一共有j-c2个元素,因此,aij的地址计算函数为: LOC(aij) = LOC(ac1c2)+[(i-c1)*(d2-c2+1)+j-c2)]*L 在C语言中,数组各维下标的下界是0,因此二维数组Am?n的地址计算公式为: LOC(aij) = LOC(a00)+(i*n+j)*L 5.3 矩阵的压缩存储 在高级语言编制程序时,将一个矩阵描述为一个二维数组。 矩阵在这种存储表示之下,可以对其元素进行随机存取,各种矩阵运算也非常简单,并且存储的密度为1。但是在矩阵中非零元素呈某种规律分布或者矩阵中出现大量的零元素的情况下,看起来存储密度仍为1,但实际上占用了许多单元去存储重复的非零元素或零元素,这对高阶矩阵会造成极大的浪费. 为了节省存储空间, 对这类矩阵进行压缩存储:即为多个相同的非零元素只分配一个存储空间;对零元素不分配空间。 5.3 矩阵的压缩存储 5.3.1 特殊矩阵 所谓特殊矩阵是指非零元素或零元素的分布有一定规律的矩阵,下面我们讨论几种特殊矩阵的压缩存储。 1、对称矩阵 2、对角矩阵 5.3 矩阵的压缩存储 对称矩阵 在一个n阶方阵A中,若元素满足下述性质:aij=aji 0≤i,j≤n-1 则称A为对称矩阵。如下图是一个5阶对称矩阵。 对称矩阵中的元素关于主对角线对称,故只要存储矩阵中上三角或下三角中的元素,让每两个对称的元素共享一个存储空间,这样,能节约近一半的存储空间。不失一般性,我们按“行优先顺序”存储主对角线(包

文档评论(0)

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

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

1亿VIP精品文档

相关文档