数据结构第五章数组与广义表_第1页
数据结构第五章数组与广义表_第2页
数据结构第五章数组与广义表_第3页
数据结构第五章数组与广义表_第4页
数据结构第五章数组与广义表_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 数据结构课程 本章内容 5.1 数组的定义 5.2 数组的顺序表示和实现 5.3 矩阵的压缩存储 5.4 广义表的定义 5.5 广义表的存储结构 5-3 数组和广义表简单描述 5-4 数组是我们最熟悉的数据类型,在早期的高 级语言中,数组是唯一可供使用的数据类型。 由于数组中各元素具有统一的类型,并且数组 元素的下标一般具有固定的上界和下界,因此 ,数组的处理比其它复杂的结构更为简单。多 维数组是向量的推广。例如,二维数组: 5.1 数组的定义 Amn= a11 a12 a1n a21 a22 a2n am1 am2 amn 5-5 5.1 数组的定义 二维数组 二维数组可以看成是由若干个行

2、向量组成的向量,也可以看成是若干个 列向量组成的向量。 在C语言中,一个二维数组类型可以定义为其分量类型为一维数组类型的 一维数组类型,也就是说,typedef elemtype array2mn; 等价于: typedef elemtype array1n; typedef array1 array2m; 多维数组:用一维顺序结构线性表实现多维数组 struct Array ElemType *buffer;/ 数据区 int dims;/ 维数 int *L;/ 各维长度 ; 5-6 5.2 数组的顺序表示和实现 设一3维数组 A423,存贮在一 个顺序线性表S中,结 构如下所示: A31

3、2A311A310 A302A301A300 A212A211A210 A202A201A200 A112A111A110 A102A101A100 A012A011A010 A002A001A000 A312A311A310 A302A301A300 A212A211A210 A202A201A200 A112A111A110 A102A101A100 A012A011A010 A002A001A000 01234567.2223 A000A001A002A010A011A012A100A101.A311A312 5-7 5.2 数组的顺序表示和实现 两种顺序存储方式: 行优先顺序将数组元素

4、按行排列,第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-

5、8 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-9 5.2 数组的顺序表示和实现 例:二维数组Ac1.d1,c2.d2的存取 分析:aij前一共有i-c1行,二维数组一共有

6、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,因此二维数组 Amn的地址计算公式为: LOC(aij) = LOC(a00)+(i*n+j)*L 5-10 5.3 矩阵的压缩存储 在高级语言编制程序时,将一个矩阵描述为一个 二维数组。 矩阵在这种存储表示之下,可以对其元素进行随 机存取,各种矩阵运算也非常简单,并且存储的 密度为1。但是在矩阵中非零元素呈某种规律分

7、布 或者矩阵中出现大量的零元素的情况下,看起来 存储密度仍为1,但实际上占用了许多单元去存储 重复的非零元素或零元素,这对高阶矩阵会造成 极大的浪费. 为了节省存储空间, 对这类矩阵进行压缩存储: 即为多个相同的非零元素只分配一个存储空间; 对零元素不分配空间。 5-11 5.3 矩阵的压缩存储 5.3.1 特殊矩阵 所谓是指非零元素或零元素的分布有 一定规律的矩阵,下面我们讨论几种特殊矩阵的 压缩存储。 1、对称矩阵 2、对角矩阵 5-12 5.3 矩阵的压缩存储 对称矩阵 在一个n阶方阵A中,若元素满足下述性质:aij=aji 0i,jn-1 则称A为对称矩阵。如下图是一个5阶对称矩阵。

8、对称矩阵中的元素关于主对角线对称,故只要 存储矩阵中上三角或下三角中的元素,让每两个 对称的元素共享一个存储空间,这样,能节约近 一半的存储空间。不失一般性,我们按“行优先 顺序”存储主对角线(包括对角线)以下的元素 ,其存储形式如上图示。 1 5 1 3 7 a00 5 0 8 0 0 a10 a 11 1 8 9 2 6 a20 a21 a23 3 0 2 5 1 . 7 0 6 1 3 an-1 0 a n-1 1 a n-1 2 a n-1 n-1 5-13 5.3 矩阵的压缩存储 对称矩阵的存储表示 在这个下三角矩阵中,第i行恰有i+1个元素,元素总 数为: (i+1) = n(n+

9、1)/2 因此,我们可以按行优先的次序将这些元素存放在一 个向量sa0.n(n+1)/2-1中。 aij和sak 之间对应关系 若ij,则ai j在下三角形中。 ai j之前的i行(从第0 行到第i-1行)一共有 1+2+i=i(i+1)/2 个元素,在 第i行上, ai j之前恰有j个元素(即 ai0,ai1,ai2,aij-1 ),因此有: k=i*(i+1)/2+j 0kn(n+1)/2 若ij,则aij是在上三角矩阵中。因为aij=aji,所以只 要交换上述对应关系式中的i和j即可得到: k=j*(j+1)/2+i 0 k1时,元素aij=0。 由此可知,一个k对角矩阵(k为奇数)A是

10、满足下述条件 的矩阵:若i-j(k-1)/2 ,则元素 aij=0。 对角矩阵可按行优先顺序或对角线的顺序,将其压缩 存储到一个向量中,并且也能找到每个非零元素和向 量下标的对应关系。 5-18 5.3 矩阵的压缩存储 在三对角矩阵里附满足条件i=0,j=0、1,或 i=n-1j=n-2、n-1或1in-1,j=i-1、i、i+1的元 素aij外,其余元素都是零。 对这种矩阵,我们也可按行优序为主序来存 储。除第0行和第n-1行是2个元素外,每行的非 零元素都是3个,因此,需存储的元素个数为3n- 2。 数组sa中的元素sak与三对角带状矩阵中的 元素aij存在一一对应关系,在aij之前有i行,共有 3*i-1个非零元素,在第i行,有j-i+1个非零元 素. a n-1 n-1a n-1 n-2a21 a12a11a10a01 a00 K=0 1 2 3 4 5 3n-2 3n-1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论