数据结构课件第5章数组和广义表.ppt
《数据结构课件第5章数组和广义表.ppt》由会员分享,可在线阅读,更多相关《数据结构课件第5章数组和广义表.ppt(64页珍藏版)》请在三一办公上搜索。
1、1,第,5,章,数,组,和,广,义,表,5.1 数组的逻辑结构,5.2 数组的顺序存储结构5.3 矩阵的压缩存储5.4 广义表,数组(array)是最常用的数据结构之一。几乎所有的程序设计语言都把数组类型设定为固有类型。,数组的定义,线性结构中的数据都是非结构的原子类型,元素的值是不再分解的。而数组可以看成是线性表在下述含义上的扩展:,2,数组的基本操作,表中的数据元素本身也是一种数据结构。,数组是由下标和值组成的序对集合。在数组中,一旦给定下标,都存在一个与其相对应的值,这个值就称为数组元素。,也可以说,数组中的每个数据元素都对应于一组下标(j1,j2,jn),每个下标取值范围是 1jibi
2、,bi 称为第 i 维的长度(i=1,2,n)。显然,当 n=1 时,n 维数组就退化为定长的线性表。反之,n 维数组也可以看成是线性表的推广。,3,5.1.1 数组的定义,可以把二维数组看成是这样一个定长线性表:它的每个数据元素也是一个定长线性表。,Amn=,4,例如,下面是一个二维数组,且以 m 行 n 列的矩阵形式表示。,每个数据元素 j是一个列向量形式的线性表,Amn=,二维数组 A 还可以看成是一个线性表:,A=(1,2,n),j=(a1j,a2j,am,j)1 j n,每个数据元素是一个行向量形式的线性表 B=(123,m),Amn=(a11 a12 a1,n),(am,1am,2
3、 am,n),(a21 a22 a2,n),i=(ai 1,ai 2,ai,n)1 i m,5,6,5.1.2 数组的抽象类型定义,ADT Array D=aj1j2j3.jn|n0,称为数组的维数,ji是数组的第i维下标,1 ji bi,bi为数组第i维的长度,aj1j2j3.jnElementSet数据关系:=R1,R2,.Rn Ri=|1jk bk,1kn 且 ki,1ji bi-1,aj1j2.jn,aj1ji+1jnD,i=1,n,8,5.1.2 数组的抽象类型定义,由于内存储器的结构是一维的。一维数组可直接采用顺序存储。用一维的内存存储表示多维数组时,需按某种次序将数组中元素排成一
4、线性序列,再将这个线性序列存放在一维的内存中,即数组的顺序存储结构表示。,顺序存储的定位公式,9,数组的顺序存储表示,基本操作的算法描述,用顺序存储结构来存储数组中的元素,一定要按照某种次序将元素排成一个线性序列。有两种存储方式:,(1)以列为主序(column major order)的存储方式,即按列优先,逐列顺序存储。,(2)以行为主序(row major order)的存储方式,即按行优先,逐行顺序存储。,10,5.2.1 顺序存储的定位公式,11,列主次序存放,12,行主次序存放,13,()一维数组的地址计算:设一维数组为:=(a1,a2,ai,an),数组中每个元素占size个存储
5、单元,则元素ai的存储地址为:Loc(Ai)=Loc(A1)+(i-1)*size。,数组的地址计算,14,二维数组的地址计算 假设每个数据元素占 1 个存储单元,且以行序为主序的进行存储,则二维数组 A 中任一元素 aij 的存储位置可以由下面定位公式确定LOC(Ai,j)=LOC(A1,1)+n*(i-1)+(j-1),其中:,LOC(Ai,j)是 aij 的存储位置;,LOC(A1,1)是 a11 的存储位置,即二维数组 A 的起始存储位置,也称为基地址或基址;,n是数组第二维的长度。,15,假设每个数据元素占size个存储单元,则二维数组 A 中任一元素 aij 的存储位置可以由下面定
6、位公式确定LOC(Ai,j)=LOC(A1,1)+(n*(i-1)+(j-1)*size,三维数组的地址计算 三维数组A(1:r,1:m,1:n)。假设每个数据元素占size个存储单元,且以行序为主序的进行存储,首元素a111的地址为Loc(A111),求任意元素aijk的地址。显然,ai11地址为 oc(Ai11)=Loc(A111)+(i-1)*m*n,因为在该元素之前有i-1个m*n的二维数组。,16,不难得到三维数组任意元素aijk的地址:Loc(Aijk)=Loc(A111)+(i-1)*m*n+(j-1)*n+(k-1)*size,其中:ir,jm,kn。,矩阵(matrix)是很
7、多科学与工程计算问题中研究的数学对象。在数据结构中,我们感兴趣的不是矩阵本身,而是如何存储矩阵的元素而使矩阵的各种运算能够有效地进行。,特殊矩阵包括两个部份:元素分布有特殊规律的矩阵,找到规律对应的公式,实现压缩存储。非零元素很少的稀疏矩阵,可采用只存非零元素的方法实现压缩存储。,17,特殊矩阵的压缩存储,所谓压缩存储是指:为多个值相同的元素只分配一个存储空间;对零元不分配空间。,18,稀疏矩阵的逻辑结构,稀疏矩阵的存储结构,假若相同的元素或者零元素在矩阵中的分布有一定规律,则称特殊矩阵。特殊矩阵主要有 3 种:对称矩阵、三角矩阵、带状矩阵。,在所有这些统称为“特殊矩阵”的矩阵中,非零元的分布
8、都有一个明显的规律,从而都可以将其压缩存储到一维数组中,并且找到每个非零元在一维数组中的对应关系。,19,5.3.1 特殊矩阵的压缩存储,若一个 n 阶矩阵 M 中的元素满足下述性质,1.对称矩阵,aij=aji1 i,j n,则称为 n 阶对称矩阵。,20,对于对称矩阵,可以为每一对对称元只分配一个存储空间,这样就可以将 n2 个元压缩存储到 n(n+1)/2 个元的空间中。,假设以行序为主序存储对称矩阵的下三角(包括对角线)中的元。以一维数组 Bn(n+1)/2 作为 n 阶对称矩阵 M 的存储结构,,21,B,Loc(Aij=1,2,3,4,Loc(Aij)=Loc(A11)+i*(i-
9、1)/2+j-1(ij),三角矩阵分为下三角矩阵和上三角矩阵。所谓下(上)三角矩阵是指矩阵的上(下)三角(不包括对角线)中的元均为常数 c 或为零的 n 阶矩阵。,2.三角矩阵,22,三角矩阵除了和对称矩阵一样,只存储矩阵的下(上)三角中的元之外,再加上一个存储常数 c 的存储空间即可。,一个 n 阶方阵,若它的全部非零元素落在一个以对角线为中心的带状区域中,则称该矩阵为带状矩阵,或对角矩阵。这个带状区域若包含主对角线上下各 b 条对角线道上元素,那么,b 称为该带状矩阵的半带宽,或称该带状矩阵的带宽为(2b+1)。,3.带状矩阵,b 条,b 条,23,在带状矩阵中,当|i-j|b 时,aij
10、=0。该方阵共有(2b+1)n-(b+1)b 个非零元素。,D 矩阵是一个 5 阶、半带宽为 2 的带状矩阵,在其主对角线 a11、a22、a33、a44、a55 上下各有 2 条对角线,共有(2b+1)n-(b+1)b=19 个非零元素。,24,例如:,带状矩阵中最常见的是三对角带状矩阵。,25,特点:当 i=1 j=1,2 1in,j=i-1,i,i+1 i=n,j=n-1,n aij非零,其它元素均为零,1.确定存储该矩阵所需的一维向量空间的大小除第一行和最后一行只有两个元素外,其余各行均有3个非零元素,由此得到一维向量所需的空间大小为:n-2,2.确定非零元素在一维数组空间中的位置oc
11、(aij)=Loc(a11)+2(i-1)+j-1,26,三对角带状矩阵的压缩存储,以行序为主序进行存储,且只存储非零元素。其方法为,27,一般来说,当矩阵中非零元素的个数远远小于矩阵元素的总数时,称之为稀疏矩阵。假设在 mn 的矩阵中,若有 t 个元素不为零,令=t/(mn),则称 为矩阵的稀疏因子。通常认为 25%-30%时称为稀疏矩阵。,5.3.2 稀疏矩阵的逻辑结构,1.稀疏矩阵的定义,按照压缩存储的概念,只存储稀疏矩阵的非零元素。因此,除了存储非零元素的值 aij 之外,还必须同时记下非零元素所在矩阵的行 i 号和列 j号。反之,一个三元组(i,j,aij)唯一确定了矩阵的一个非零元
12、素。因此,稀疏矩阵可以由表示非零元的三元组及其矩阵的总的行列数唯一确定。,假设以顺序存储结构表示三元组表,则可以得到稀疏矩阵的一种压缩存储方式,这种方式称之为三元组顺序表。,28,5.3.3 稀疏矩阵的存储结构,1.三元组顺序表,M=,矩阵 M 可以由三元组表,(1,3,-3),(1,6,15),(2,1,12),(2,5,18),(3,1,9),(3,4,24),(4,6,-7),(6,3,14)再加上(7,6)这一对总的行列值来描述。,29,#define MAXSIZE1000/假设非零元个数的最大值为 1000,typedef struct/三元组顺序表的元素结构定义 int row,
13、;col/该非零元的行下标和列下标 ElementType e;/该非零元的值 Triple;,typedef struct/三元组顺序表存储结构定义 Triple data MAXSIZE+1;/非零元三元组表,data0 未用 int m,n,len;/矩阵的行数、列数和非零个数 TSMatrix;/三元组顺序表的类型名,30,(1)三元组顺序存储表示,M=,(a)稀疏矩阵,(b)三元组顺序表,31,(2)利用三元组顺序表实现矩阵的转置运算,将矩阵的行列值相互交互;,在这 3 点中,最关键的是第 3 条,即如何使 B.data 中的三元组以 的行(的列)为主序依次排列。,32,显然,一个稀
14、疏矩阵的转置矩阵仍是稀疏矩阵。假设 A 和 B 是 TSMatrix(三元组顺序表)类型变量,分别表示矩阵 和其转置矩阵。那么,只要做到下面 3 点就可以由 A 得到 B,实现矩阵的转置。,将每三元组中的 row 和 col 相互调换;,重排三元组之间的次序。,33,原始的三元组表,原矩阵,转置矩阵,转置的三元组表,使 b.data 中的三元组以 T 的行(M 的列)为主序依次排列的方法有如下两种:,34,方法一:按照 B.data 中三元组的次序,依次在 a.data 中找到相应的三元组进行转置。,方法二:按照 A.data 中三元组的次序进行转置,并将转置后的三元组置入 B.data 中恰
15、当的位置。,算法思想,在 A中按三元组的列域值(col)开始扫描,依序将三元组 A.data 的列域值(col)与行域值(row)进行对换,并且存入 B中。由于A是以M的行序为主序来存放每个非零元的,由此得到转置后矩阵的三元组表B恰是 以“行序为主序”。,35,按照方法一,即按照“被转置矩阵”M的三元组表A 的“列序”递增顺序进行转置。为了找到矩阵 M 的每一列中所有的非零元素,需要对其三元组 A.data 从第一行起进行扫描,方法如下:,转置的三元组表,B-data,原始的三元组表,A.data,1,2,12,1,3,9,3,1,-3,3,6,14,4,3,24,5,2,18,6,1,15,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课件 数组 广义

链接地址:https://www.31ppt.com/p-6296888.html