5数组和广义表
- 格式:ppt
- 大小:246.00 KB
- 文档页数:37
第5章:数组和广义表 1. 了解数组的定义;填空题:1、假设有二维数组A 6×8,每个元素用相邻的6个字节存储,存储器按字节编址。
已知A 的起始存储位置(基地址)为1000,则数组A 的体积(存储量)为 288 B ;末尾元素A 57的第一个字节地址为 1282 。
2、三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的 行下标 、 列下标 和 元素值 。
2. 理解数组的顺序表示方法会计算数组元素顺序存储的地址;填空题:1、已知A 的起始存储位置(基地址)为1000,若按行存储时,元素A 14的第一个字节地址为 (8+4)×6+1000=1072 ;若按列存储时,元素A 47的第一个字节地址为 (6×7+4)×6+1000)=1276 。
(注:数组是从0行0列还是从1行1列计算起呢?由末单元为A 57可知,是从0行0列开始!) 2、设数组a[1…60, 1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为 8950 。
答:不考虑0行0列,利用列优先公式: LOC(a ij )=LOC(a c 1,c 2)+[(j-c 2)*(d 1-c 1+1)+i-c 1)]*L 得:LOC(a 32,58)=2048+[(58-1)*(60-1+1)+32-1]]*2=8950选择题:( A )1、假设有60行70列的二维数组a[1…60, 1…70]以列序为主序顺序存储,其基地址为10000,每个元素占2个存储单元,那么第32行第58列的元素a[32,58]的存储地址为 。
(无第0行第0列元素)A .16902B .16904C .14454D .答案A, B, C 均不对 答:此题(57列×60行+31行)×2字节+10000=16902( B )2、设矩阵A 是一个对称矩阵,为了节省存储,将其下三角部分(如下图所示)按行序存放在一维数组B[ 1, n(n-1)/2 ]中,对下三角部分中任一元素a i,j (i ≤j), 在一维数组B 中下标k 的值是:A .i(i-1)/2+j-1B .i(i-1)/2+jC .i(i+1)/2+j-1D .i(i+1)/2+j3、从供选择的答案中,选出应填入下面叙述 ? 内的最确切的解答,把相应编号写在答卷的对应栏内。
数据结构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)数组地每个数据元素都与一组唯一地下标值对应。
图5-1 一维数组图5-2 二维数组(按列序)图5-3二维数组(按行序)5数组与广义表5.1 数组的顺序存储5.2 特殊矩阵的压缩存储5.3 广义表5.4 好玩贪吃蛇——数字矩阵5.5 数组与广义表学习秘籍5.1 数组的顺序存储数组是由相同类型的数据元素构成的有限集合。
一维数组可以看作一个线性表,如图5-1所示。
二维数组也可以看作一个线性表X=(X0, X1, X2, …, Xn−1),只不过每一个数据元素Xi 也是一个线性表,如图5-2所示。
于是,二维数组也可以看作一个线性表Y=(Y0, Y1, Y2, …, Ym−1),只不过每一个数据元素Yi 也是一个线性表,如图5-3所示。
数组一般采用顺序存储结构,因为存储单元是一维的,而数组可以是多维的,如何用一组连续的存储单元来存储多维数组呢?以二维数组为例,可以按行序存储,即先存第一行,再存第二行……也可以按列序存储,先存第一列,再存第二列……1.按行序存储如果按行序存储,怎么找到aij 的存储位置呢?先看看存储aij 之前,前面已经存储了多少个元素,如图5-4所示。
图5-4 二维数组(按行序存储)图5-5 二维数组(按列序存储)从图5-4可以看出,在aij 之前一共有i×n+j 个元素,如果每个元素占用L 字节,那么共需要(i×n+j)×L 字节,只需要用基地址加上这些字节就可以得到aij 的存储地址了。
按行序存储,aij 的存储地址为:LOC(a00)表示第一个元素的存储地址,即基地址,LOC(aij)表示aij 的存储地址。
2.按列序存储如果按列序存储,怎么找到aij 的存储位置呢?先看看存储aij 之前,前面已经存储了多少个元素,如图5-5所示。
从图5-5可以看出,在aij 之前一共有j×m+i 个元素,如果每个元素占用L 字节,那么共需要(j×m+i)×L 字节,只需要用基地址加上这些字节就可以得到aij 的存储地址了。