第五章 数组和广义表
- 格式:doc
- 大小:126.00 KB
- 文档页数:5
第五章数组、特殊矩阵和广义表本章介绍的数组与广义表可视为线性表的推广,其特点是数据元素仍然是一个表。
本章讨论多维数组的逻辑结构和存储结构、特殊矩阵、矩阵的压缩存储、广义表的逻辑结构和存储结构等。
5.1 多维数组5.1.1 数组的逻辑结构数组是我们很熟悉的一种数据结构,它可以看作线性表的推广。
数组作为一种数据结构其特点是结构中的元素本身可以是具有某种结构的数据,但属于同一数据类型,比如:一维数组可以看作一个线性表,二维数组可以看作“数据元素是一维数组”的一维数组,三维数组可以看作“数据元素是二维数组”的一维数组,依此类推。
图5.1是一个m行n 列的二维数组。
标识,因此,在数组上不能做插入、删除数据元素的操作。
通常在各种高级语言中数组一旦被定义,每一维的大小及上下界都不能改变。
在数组中通常做下面两种操作:(1)取值操作:给定一组下标,读其对应的数据元素。
(2)赋值操作:给定一组下标,存储或修改与其相对应的数据元素。
我们着重研究二维和三维数组,因为它们的应用是广泛的,尤其是二维数组。
5.1.2 数组的内存映象现在来讨论数组在计算机中的存储表示。
通常,数组在内存被映象为向量,即用向量作为数组的一种存储结构,这是因为内存的地址空间是一维的,数组的行列固定后,通过一个映象函数,则可根据数组元素的下标得到它的存储地址。
对于一维数组按下标顺序分配即可。
对多维数组分配时,要把它的元素映象存储在一维存储器中,一般有两种存储方式:一是以行为主序(或先行后列)的顺序存放,如BASIC、PASCAL、COBOL、C等程序设计语言中用的是以行为主的顺序分配,即一行分配完了接着分配下一行。
另一种是以列为主序(先列后行)的顺序存放,如FORTRAN语言中,用的是以列为主序的分配顺序,即一列一列地分配。
以行为主序的分配规律是:最右边的下标先变化,即最右下标从小到大,循环一遍后,右边第二个下标再变,…,从右向左,最后是左下标。
以列为主序分配的规律恰好相反:最左边的下标先变化,即最左下标从小到大,循环一遍后,左边第二个下标再变,…,从左向右,最后是右下标。
第五章数组和广义表讲课提要【主要内容】1.多维数组的顺序存储结构2.特殊矩阵的压缩存储3.广义表的定义及其与线性表的关系4.广义表的存储结构5.广义表运算实现中递归的应用【教学目标】1.掌握多维数组的顺序存储结构2.掌握特殊矩阵的压缩存储方法3.掌握广义表的定义及其与线性表的关系4.掌握广义表的存储结构5.了解广义表运算实现中递归的应用学习指导1.多维数组的顺序存储结构对于多维数组,有两种存储方式:一是以行为主序(或先行后列)的顺序存放,如BASIC、PASCAL、C等程序设计语言中用的是以行为主的顺序分配,即一行分配完了接着分配下一行。
另一种是以列为主序(先列后行)的顺序存放,如FORTRAN语言中,用的是以列为主序的分配顺序,即一列一列地分配。
以行为主序的分配规律是:最右边的下标先变化,即最右下标从小到大,循环一遍后,右边第二个下标再变,…,从右向左,最后是左下标。
以列为主序分配的规律是:最左边的下标先变化,即最左下标从小到大,循环一遍后,左边第二个下标再变,…,从左向右,最后是右下标。
不论按何种方式存储,只要确定了数组的首地址以及每个数组元素所占用的单元数,就可以将数组元素的存储地址表示为其下标的线性函数。
设有m×n二维数组A mn,以“以行为主序”的分配为例,按照元素的下标确定其地址的计算方法如下。
设数组的基址为LOC(a11),每个数组元素占据L个地址单元,计算a ij 的物理地址的函数为:LOC(a ij) = LOC(a11) + ( (i-1)*n + j-1 ) * L同理,对于三维数组A mnp,即m×n×p数组,对于数组元素a ijk其物理地址为:LOC(a ijk)=LOC(a111)+( ( i-1) *n*p+ (j-1)*p +k-1) )*L注意:在C语言中,数组中每一维的下界定义为0,则:LOC(a ij) = LOC(a00) + ( i*n + j ) * L【例4-1】二维数组A的每一个元素是由6个字符组成的串,其行下标i=0,1,…,8,列下标j=1,2,…,10。
第五章数组和广义表一.选择题1.在二维数组A 中引用A[i,j]的时间_________。
A.与i、j的大小有关B.与i、j的大小无关C.与i的大小有关,与j的大小无关D.与i的大小无关,与j的大小有关2.在稀疏矩阵的带行指针向量的链接存储中,每一行单链表中的结点都具有相同的________。
A.行号 B.列号 C.元素值 D.地址3.二维数组A 按行顺序存储,其中每个元素占1个存储单元。
若 A[1][1]的存储地址为420, A[3][3]的存储地址为446,则A[5][5]的存储地址为_______。
A.470 B.471 C.472 D. 4734.在稀疏矩阵的十字链接存储中,每个列单链表中的结点都具有相同的_____。
A.行号 B.列号 C.元素值 D.地址5.下面的说法中,不正确的是________。
A.对称矩阵中只须存放包括主对角线元素在内的下(或上)三角部分的元素即可B.对角矩阵中只须存放的非零元素即可C.稀疏矩阵中值为零的元素较多,因此可以采用三元组表方法存储D.稀疏矩阵中大量值为零的元素分布有规律,因此可以采用三元组表方法存储6.对一些特殊矩阵采用压缩存储的目的主要是为了________。
A.表达变得简单 B.对矩阵元素的存取变得简单C.去掉矩阵中的多余元素 D.减少不必要的存储空间的开销7.若将n 阶对称矩阵 A 按照行序为主序方式将包括主对角线元素在内的下三角形的所有元素依次存放在一个一维数组 B 中,则该对称矩阵在 B 中占用了________个数组元素。
A.n2 B.n*(n-1) C.n*(n+1)/2 D.n*(n-1)8. 稀疏矩阵的三元组顺序表表示的一个三元组中不包括________。
A. 行号B.列号C.元素值D.元素总数9.稀疏矩阵一般的压缩存储方法有两种,即________。
A.二维数组和三维数组 B.三元组和散列C. 三元组和十字链表 D.散列和十字链表10.有一个 10 阶对称矩阵 A,采用压缩存储方式(以行序为主存储,且A[0 Ⅱ0]=1),则A[8][5]的地址是________。
A.52 B.48 C.54 D.5311.数组通常具有的两种基本操作是________。
A.建立与删除 B.索引和修改 C.查找和修改 D.查找与索引12.二维数组M 的成员是 6 个字符(每个字符占一个存储单元)组成的串,行下标 i 的范围从0 到 8,列下标j 的范围从1到10,则存放M 至少需要________个字节。
A.90 B.180 C.240 D.54013.二维数组M 的元素是4 个字符(每个字符占一个存储单元)组成的串,行下标 i 的范围从0 到 4 ,列下标j 的范围从0 到 5,M 按行存储时元素M[3 Ⅱ5]的起始地址与M 按列存储时元素________的起始地址相同。
A.M[2][4] B.M[3][4] C.M[3][5] D.M[4][4]14.下面的说法中,不正确的是________。
A.数组是一种线性表结构B.数组是一种定长的线性表结构,C.除了插入与删除操作外,数组的基本操作还有存取、修改、检索和排序等D.数组的基本操作有存取、修改、检索和排序等,没有插入与删除操作15.数组的逻辑结构不同于下列________的逻辑结构。
A.线性表 B.栈 C.队列 D.树16.设有一个10阶的下三角矩阵A(包括对角线),按照从上到下、从左到右的顺序存储到连续的55个存储单元中,每个数组元素占1个字节的存储空间,则A[5][4]地址与A[0][0]的地址之差为________。
A.10 B.19 C.28 D.5517.将10阶对称矩阵压缩存储到一维数组A中,则数组 A的长度最少为________。
A.100 B.40 C.55 D.8018.设矩阵A是一个对称矩阵,为了节省存储空间,将其下三角部分按行序放在一维数组B[1,n(n+1)/2]中。
下三角部分中任一元素 Aij(i>=j),在一维数组 B 中的下标位置是 ________。
A.i(i-1)/2+j-1 B.i(i-1)/2+jC.i(i+1)/2+j-1 D. i(i+1)/2+j19.三维数组A[4][5][6]按行优先存储方法存储在内存中,若每个元素占2个存储单元,且数组中第一个元素的存储地址为120,则元素A[3][4][5]的存储地址为________。
A.356 B.358 C.360 D.36220.二维数组 Amn 按行序为主序存放在内 ,每个数组元素占 1 个存储单元 ,则元素Aij的地址计算公式是:________。
A.loc(Aij )=loc(A11)+[(i-1)*m+(j-1)]B.loc(Aij )=loc(A11)+[(j-1)*m+(i-1)]C.loc(Aij )=loc(A11)+[(i-1)*n+(j-1)]D. loc(Aij )=loc(A11)+[(j-1)*n+(i-1)]21.广义表(a,b,c,d)的表头是________。
.A.a B.(a) C.a,b,c D. (a,b,c)22.若广义表K满足head(K)=tail(K),则K为 ________。
A.( )B.( ( ) )C.(()),(())D. ((),(),())23.设一个广义表中结点的个数为n,则广义表深度算法的时间复杂度为________ 。
A.O(1)B.O(n)C. O(n2)D. O(log2n)24.下列广义表中,深度为 2的有________。
A.(a,b)B.((c,(a,b)),d)C.(c,(a,b))D.((a,b),(c,(a,b)))25.广义表 A=(a,b,(c,d),(e,(f,g))),则Head(Tail(Head(Tail(Tail(A )))))的值为________。
A. (g)B.(d)C.cD. d二.填空题1. 设有一个n 阶的下三角矩阵A,如果按照行的顺序将下三角矩阵中的元素(包括对角线上元素)存放在n(n+1)/2个连续的存储单元中,则A[i][j]与A[0][0]之间有_______个数据元素。
2.数组A 中,每个元素A 的长度为3 个字节,行下标i 从1 到8,列下标j 从1 到10,从首地址100 开始连续存放在存储器内,该数组若按行主序存放时,元素A[8][5]的起始地址为 ________;该数组若按列主序存放时,元素A[8][5]的起始地址为__________ 。
3. 假设有二维数组A[6][8],每个元素用相邻的6 个字节存储,存储器按字节编址。
已知A 的起始存储位置(基地址)为1000,则数组A 的体积(存储量)为________ ;末尾元素A57的第一个字节地址为________;若按行存储时,元素A14的第一个字节地址为_________ ;若按列存储时,元素A47的第一个字节地址为__________ 。
4. 若一个n 阶矩阵A 中的元素满足:Aij =Aji(0<=i ,j<=n-1)则称A 为________矩阵;若主对角线上方(或下方)的所有元素均为零时,称该矩阵为__________。
5. 已知广义表A=((a,b,c),(d,e,f)),则运算head(head (tail(A)))=________。
6. 一个广义表中的元素分为________元素和________元素两类。
7. 稀疏矩阵中第2 行3 列的元素值是5,它的三元组是 ________。
8. 在稀疏矩阵所对应的三元组线性表中,每个三元组元素按_________为主序、_________为辅序的次序排列。
9. 广义表A= (a,(a,b),((a,b),c)),则它的深度为____________,它的长度为____________。
10.设一个广义表中结点的个数为n,则求广义表深度算法的时间复杂度为____________。
11.设一个具有t个非零元素的m*n 大小的稀疏矩阵采用顺序存储,求其转置矩阵的普通转置算法的时间复杂度为___________ 。
12.二维数组在内存中存储可以有两种存储方式,一种是_____优先存储,一种是________优先存储。
13.设广义表L=((),(),(()))。
则head(L)是________;tail(L)是________;L的长度是________;L的深度是________。
14.设广义表L=((a),(b),((c)))则head(L)是______;tail(L)是___。
三.判断题1.在C语言中,多维数组的存储采取的是行优先的方式。
()2.广义表在本质上也是线性表。
()3.可以用三元组存储法来压缩存储稀疏矩阵。
()4.已知广义表A=((a,b,c),(d,e,f)),从A中取出原子e的运算是head(tail(head(tail(A))))。
()5. 二维数组和多维数组均不是特殊的线性结构。
()6. 数组是一种复杂的数据结构,数组元素之间的关系既不是线性的也不是树形的。
()7. 多维数组元素之间的关系是线性的。
()8. 数组可以看作是二元组<下标,值>的一个集合。
()9. 稀疏矩阵的压缩存储可以用一个三元组表来表示稀疏矩阵中的非0 元素。
()10. 一个广义表的表尾总是一个广义表。
()四.简答题1.什么叫二维数组的行序优先存储?什么叫二维数组的列序优先存储?2.什么样的矩阵叫特殊矩阵?特殊矩阵压缩存储的基本思想是什么?3.什么样的矩阵叫稀疏矩阵?稀疏矩阵压缩存储的基本思想是什么?4.已知稀疏矩阵如下:请写出该稀疏矩阵三元组表示。
5.请写出下面链表表示的广义表。
6.画出广义表list=(5,(3,2,(14,9,3),( ),4),2,(6,3,10))的链表表示。
五.程序设计题1.设计一个算法求广义表的深度。
是第i行中的最小值,同时又是第j列中的2.若矩阵A[m][n]中的某个元素aij最大值,则称此元素为该矩阵中的一个鞍点。
假设以二维数组存储矩阵,试编写算法求出矩阵中的所有鞍点。
3.对于二维数组A[m][n],其中m<=50,n<=50,先读入m和n ,然后读该数组的全部元素,对如下三种情况分别编写相应函数:(1)求数组A靠边元素之和;(2)求从A[0][0]开始的互不相邻的各元素之和;(3)当m==n时,分别求两条对角线上的元素之和,否则打印出m!=n的信息。