第5章 数组和广义表
- 格式:ppt
- 大小:1.80 MB
- 文档页数:56
《数据结构与算法》第五章数组和广义表本章介绍的数组与广义表可视为线性表的推广,其特点是数据元素仍然是一个表。
本章讨论多维数组的逻辑结构和存储结构、特殊矩阵、矩阵的压缩存储、广义表的逻辑结构和存储结构等。
5.1 多维数组5.1.1 数组的逻辑结构数组是我们很熟悉的一种数据结构,它可以看作线性表的推广。
数组作为一种数据结构其特点是结构中的元素本身可以是具有某种结构的数据,但属于同一数据类型,比如:一维数组可以看作一个线性表,二维数组可以看作“数据元素是一维数组”的一维数组,三维数组可以看作“数据元素是二维数组”的一维数组,依此类推。
图5.1是一个m行n列的二维数组。
5.1.2 数组的内存映象现在来讨论数组在计算机中的存储表示。
通常,数组在内存被映象为向量,即用向量作为数组的一种存储结构,这是因为内存的地址空间是一维的,数组的行列固定后,通过一个映象函数,则可根据数组元素的下标得到它的存储地址。
对于一维数组按下标顺序分配即可。
对多维数组分配时,要把它的元素映象存储在一维存储器中,一般有两种存储方式:一是以行为主序(或先行后列)的顺序存放,如BASIC、PASCAL、COBOL、C等程序设计语言中用的是以行为主的顺序分配,即一行分配完了接着分配下一行。
另一种是以列为主序(先列后行)的顺序存放,如FORTRAN语言中,用的是以列为主序的分配顺序,即一列一列地分配。
以行为主序的分配规律是:最右边的下标先变化,即最右下标从小到大,循环一遍后,右边第二个下标再变,…,从右向左,最后是左下标。
以列为主序分配的规律恰好相反:最左边的下标先变化,即最左下标从小到大,循环一遍后,左边第二个下标再变,…,从左向右,最后是右下标。
例如一个2×3二维数组,逻辑结构可以用图5.2表示。
以行为主序的内存映象如图5.3(a)所示。
分配顺序为:a11 ,a12 ,a13 ,a21 ,a22,a23 ; 以列为主序的分配顺序为:a11 ,a21 ,a12 ,a22,a13 ,a23 ; 它的内存映象如图5.3(b)所示。
数据结构05数组与广义表数组与广义表可以看做是线性表地扩展,即数组与广义表地数据元素本身也是一种数据结构。
5.1 数组地基本概念5.2 数组地存储结构5.3 矩阵地压缩存储5.4 广义表地基本概念数组是由相同类型地一组数据元素组成地一个有限序列。
其数据元素通常也称为数组元素。
数组地每个数据元素都有一个序号,称为下标。
可以通过数组下标访问数据元素。
数据元素受n(n≥1)个线性关系地约束,每个数据元素在n个线性关系地序号 i1,i2,…,in称为该数据元素地下标,并称该数组为n维数组。
如下图是一个m行,n列地二维数组A矩阵任何一个元素都有两个下标,一个为行号,另一个为列号。
如aij表示第i行j列地数据元素。
数组也是一种线性数据结构,它可以看成是线性表地一种扩充。
一维数组可以看作是一个线性表,二维数组可以看作数据元素是一维数组(或线性表)地线性表,其一行或一列就是一个一维数组地数据元素。
如上例地二维数组既可表示成一个行向量地线性表: A1=(a11,a12,···,a1n)A2=(a21,a22, ···,a2n)A=(A1,A2, ···,Am) ············Am=(am1,am2, ···,amn)也可表示成一个列向量地线性表:B1=(a11,a21,···,am1)B2=(a12,a22, ···,am2)A=(B1,B2, ···,Bm) ············Bn=(a1n,a2n, ···,amn)数组地每个数据元素都与一组唯一地下标值对应。
第五章数组与广义表一基本内容数组的类型定义和表示方式:特殊矩阵和稀疏矩阵的压缩存储方法及运算的实现;广义表的逻辑结构和存储结构、m元多项式的广义表表示以及广义表的操作的递归算法举例。
二学习要点1.了解数组两种存储表示方法,并掌握数组在以行为主的存储结构中的地址计算方法。
2.掌握对特殊矩阵进行压缩存储时的下标变换公式。
3.了解稀疏矩阵的两种压缩存储方法的特点和适用范围,领会以三元组表示稀疏矩阵时进行矩阵运算采用的处理方法。
4.掌握广义表的结构特点及其存储表示方法,读者可根据自己的习惯熟练掌握任意一种结构的链表,学会对非空广义表进行分解的两种分析方法:即可将一个非空广义表分解为表头和表尾两部分或者分解为n个子表。
5.学习利用分治法的算法设计思想编制递归算法的方法。
三重点与难点5.1.1 数组结构的基本概念1.数组的定义数组是由下标和值组成的有序对的集合。
在数组中对于每组有定义的下标,都存在一个与其相对应的值,该值通常称为数组元素值。
例如,一个形如m×n阶矩阵A[1,1] A[1,2]…A[1,n]A[2,1] A[2,2]…A[2,n]::::(5.1)A[m,1] A[m,2]…A[m,n]就是一个二维数组。
其中的每个元素A[I,j]都与一个二维空间的数(i,j)|(1<=i<=m,1<=j<=n)相对应。
类似的,一个N维数组中的每个元素都与一个N维空间的数(i,j,k,…)相对应。
若N=1 则为一维数组,变化成线性表即A[I]。
因此,数组可看成是线性表的最简单的推广,但这样一推就把数组结构由线性结构推到非线性结构了。
以式5。
1矩阵为例,每个元素A[i,j]属于两个线性队列,即第i行的队列A[i,1],A[i,2],…,A[i,n]共n个元素;第j列的队列A[1,j],A[2,j],…,A[m,j]共m个元素。
这些正交的行队列和列队列表示了数组的二维结构性质。
2.数组的性质数组结构中的每一个元素都与一组下标有关,一旦数组定义后,该结构就具有以下性质:(1)数据元素的数目固定,即一旦定义了数组结构,在其被操作的过程中,元素数目不再有增减变化。