第五章 数组和广义表

第五章数组和广义表

5.1多维数组

a11,a12,a13,。。。,a1n

Amn= a21,a22,a23,。。。,a2n

…………

a m1,a m2,a m3,。。。,a mn

两种顺序存储方式:

(1)

a11,a12,。。。,a1n,a21,a22,。。。,a2n,……a m1,a m2,。。。,a mn

a ij的地址计算函数:

Loc(a ij)= Loc(a11)+[(i-1)*n+j-1]*d

在C语言中,a ij的地址计算函数:

Loc(a ij)= Loc(a00)+[ i*(n+1)+j]*d

(2)列优先顺序:

a11, a21,。。。, a m1 ,a12, a22,。。。, a m2,……,a1n, a2n,。。。,a mn

5.2矩阵的压缩存贮

5.2.1特殊矩阵

1.对称矩阵

a ij = a ji 0<=i,j<=n-1

1 5 1 3 7

5 0 8 0 0

1 8 9

2 6

3 0 2 5 1

7 0 6 1 3

在下三角阵中,元素总数为:

n(n+1)/2

可用一个向量sa[n(n+1)/2]存储。

k=i*(i+1)/2+j

或 k=j*(j+1)/2+i

令 I=max(i,j)L=max(i,j)

则 k=I*(I+1)/2+J

因此a ij地址为:

Loc(a ij)=LOC(sa[k])=LOC(sa[0])+k*d= LOC(sa[0])+[I*(I+1)/2+J]*d

5.2.2稀疏矩阵

1.三元组表

三元组表的类型描述:

#define smax 16

int datatype;

typedef struct

{int i,j;

datatype v;

}node;

typedef struct

{int m,n,t; /*行数,列数,非零元素个数*/ node data[smax]; /*三元组表*/

} /*稀疏矩阵类型*/

例:A45

0 5 0 0 8

1 0 3 0 0

0 2 0 0 0

6 0 0 0 0

i j v

5.3广义表的概念

广义表(Lists)是n个数据元素a1,a2,a3,。。。,a n的有限序列,其中a i或是原子项或者是一个广义表。记作:LS=(a1,a2,a3,。。。,a n),LS是广义表的名字。

a1是LS的表头,(a2,a3,。。。,a n)是LS的表尾。

例:

E=()

L=(a,b)

A=(x,L)=(x,(a,b))

B=(A,y)=( (x,(a,b)),y)

C=(A,B)=( (x,(a,b)), ( (x,(a,b)),y))

D=(a,D)=(a,(a,(a,(…))))

对于非空广义表,有两个基本运算:

取表头head(LS)

取表尾tail(LS) /*必定是表*/

例:head(L)=a, tail(L)=(b)

head(B)=A, tail(B)=(y)

head(tail(L))=b, tail(tail(L))=()

第五章 数组和广义表

第五章数组和广义表 一.选择题 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. 473 4.在稀疏矩阵的十字链接存储中,每个列单链表中的结点都具有相同的_____。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.53 11.数组通常具有的两种基本操作是________。 A.建立与删除 B.索引和修改 C.查找和修改 D.查找与索引12.二维数组M 的成员是 6 个字符(每个字符占一个存储单元)组成的串,行下标 i 的范围从0 到 8,列下标j 的范围从1到10,则存放M 至少需要________个字节。 A.90 B.180 C.240 D.540 13.二维数组M 的元素是4 个字符(每个字符占一个存储单元)组成的串,行下标 i 的范围从0 到 4 ,列下标j 的范围从0 到 5,M 按行存储时元素M[3 Ⅱ5]的起始地址与M 按列存储时元素________的起始地址相同。

数据结构 第五章数组和广义表

第五章数组和广义表:习题 习题 一、选择题 1.假设以行序为主序存储二维数组A[1..100,1..100],设每个数据元素占两个存储单元,基地址为10,则LOC(A[5,5])=( )。 A. 808 B. 818 C. 1010 D. 1020 2.同一数组中的元素( )。 A. 长度可以不同B.不限C.类型相同 D. 长度不限 3.二维数组A的元素都是6个字符组成的串,行下标i的范围从0到8,列下标j的范圈从1到10。从供选择的答案中选出应填入下列关于数组存储叙述中( )内的正确答案。 (1)存放A至少需要( )个字节。 (2)A的第8列和第5行共占( )个字节。 (3)若A按行存放,元素A[8]【5]的起始地址与A按列存放时的元素( )的起始地址 一致。 供选择的答案: (1)A. 90 B. 180 C. 240 D. 270 (2) A. 108 B. 114 C. 54 D. 60 (3)[8][5] B. A[3][10] [5][8] [O][9] 4.数组与一般线性表的区别主要是( )。 A.存储方面 B.元素类型方面 C.逻辑结构方面 D.不能进行插入和删除运算 5.设二维数组A[1..m,1..n]按行存储在数组B[1..m×n]中,则二维数组元素A[i,j]在一维数组B中的下标为( )。 A. (i-l)×n+j B. (i-l)×n+j-l C.i×(j-l) D. j×m+i-l 6.所谓稀疏矩阵指的是( )。 A.零元素个数较多的矩阵 B.零元素个数占矩阵元素中总个数一半的矩阵 C.零元素个数远远多于非零元素个数且分布没有规律的矩阵 D.包含有零元素的矩阵 7.对稀疏矩阵进行压缩存储的目的是( )。 A.便于进行矩阵运算 B.便于输入和输出 C.节省存储空间 D. 降低运算的时间复杂度 8.稀疏矩阵一般的压缩存储方法有两种,即( )。 A.二维数组和三维数组 B.三元组和散列 C.三元组和十字链表 D.散列和十字链表 9.有一个100×90的稀疏矩阵,非0元素有10个,设每个整型数占两字节,则用三元组表示该矩阵时,所需的字节数是( )。 A. 60 B. 66 C.18000 D.33 10. A[N,N]是对称矩阵,将下面三角(包括对角线)以行序存储到一维数组T[N(N+I)/2] 中,则对任一上三角元素a[i][j]对应T[k]的下标k是( )。 A. i(i-l)/2+j B. j(j-l)/2+i C. i(j-i)/2+1 D. j(i-l)/2+1 11.已知广义表L=((x,y,z),a,(u,t,w)),从L表中取出原子项t的运算是( ) A. head(tail(tail(L))) B. tail(head(head(taiI(L)))) C. head(tail(head(taiI(L)))) D. head(tail(head(tail(tail(L)))))

(完整word版)数据结构第五章数组和广义表习题及答案

习题五数组和广义表 一、单项选择题 1.常对数组进行的两种基本操作是() A.建立与删除 B. 索引与修改 C. 查找与修改 D. 查找与索引2.对于C语言的二维数组DataType A[m][n],每个数据元素占K个存储单元,二维数组中任意元素a[i,j] 的存储位置可由( )式确定. A.Loc[i,j]=A[m,n]+[(n+1)*i+j]*k B.Loc[i,j]=loc[0,0]+[(m+n)*i+j]*k C.Loc[i,j]=loc[0,0]+[(n+1)*i+j]*k D.Loc[i,j]=[(n+1)*i+j]*k 3.稀疏矩阵的压缩存储方法是只存储 ( ) A.非零元素 B. 三元祖(i,j, aij) C. aij D. i,j 4. 数组A[0..5,0..6]的每个元素占五个字节,将其按列优先次序存储在起始地址为1000的内存单元中,则元素A[5,5]的地址是( )。 A. 1175 B. 1180 C. 1205 D. 1210 5. A[N,N]是对称矩阵,将下面三角(包括对角线)以行序存储到一维数组T[N(N+1)/2]中,则对任一上三角元素a[i][j]对应T[k]的下标k是()。 A. i(i-1)/2+j B. j(j-1)/2+i C. i(j-i)/2+1 D. j(i-1)/2+1 6. 用数组r存储静态链表,结点的next域指向后继,工作指针j指向链中结点,使j 沿链移动的操作为( )。 A. j=r[j].next B. j=j+1 C. j=j->next D. j=r[j]-> next 7. 对稀疏矩阵进行压缩存储目的是()。 A.便于进行矩阵运算 B.便于输入和输出 C.节省存储空间 D.降低运算的时间复杂度 8. 已知广义表LS=((a,b,c),(d,e,f)),运用head和tail函数取出LS中原子e的运算是( )。 A. head(tail(LS)) B. tail(head(LS)) C. head(tail(head(tail(LS))) D. head(tail(tail(head(LS)))) 9. 广义表((a,b,c,d))的表头是(),表尾是()。 A. a B.() C.(a,b,c,d) D.(b,c,d) 10. 设广义表L=((a,b,c)),则L的长度和深度分别为()。 A. 1和1 B. 1和3 C. 1和2 D. 2和3 11. 下面说法不正确的是( )。 A. 广义表的表头总是一个广义表 B. 广义表的表尾总是一个广义表 C. 广义表难以用顺序存储结构 D. 广义表可以是一个多层次的结构 二、填空题 1.通常采用___________存储结构来存放数组。对二维数组可有两种存储方法:一种是以___________为主序的存储方式,另一种是以___________为主序的存储方式。 2. 用一维数组B与列优先存放带状矩阵A中的非零元素A[i,j] (1≤i≤n,i-2≤j≤i+2),B 中的第8个元素是A 中的第_ _行,第_ _列的元素。

第5章 数组和广义表 自测题含答案

第5章 数组和广义表 自测题含答案 一、单选题 1. 假设有二维数组A 6×8,每个元素用相邻的6个字节存储,存储器按字节编址。已知A 的起始存储位置(基地址)为1000,则数组A 的体积(存储量)为 288 B ;末尾元素A 57的第一个字节地址为 1282 ;若按行存储时,元素A 14的第一个字节地址为 (8+4)×6+1000=1072 ;若按列存储时,元素A 47的第一个字节地址为 (6×7+4)×6+1000)=1276 。 2. 〖00年计算机系考研题〗设数组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 3. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的 行下标 、 列下标 和 元素值 。 4. 求下列广义表操作的结果: (1) GetHead 【((a,b),(c,d))】=== (a, b) ; //头元素不必加括号 (2) GetHead 【GetTail 【((a,b),(c,d))】】=== (c,d) ; (3) GetHead 【GetTail 【GetHead 【((a,b),(c,d))】】】=== b ; (4) GetTail 【GetHead 【GetTail 【((a,b),(c,d))】】】=== (d ) ; 二、单选题( A )1. 〖01年计算机系考研题〗假设有60行70列的二维数组a[1…60, 1…70]以列序为主序顺序存储,其基地址为10000,每个元素占2个存储单元,那么第32行第58列的元素a[32,58]的存储地址为 。(无第0行第0列元素) A.16902 B.16904 C.14454 D.答案A, B, C 均不对 答:此题与填空题第8小题相似。(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-1 B.i(i-1)/2+j C.i(i+1)/2+j-1 D.i(i+1)/2+j ??????????????=n n n n a a a a a a A ,2 ,1,2 ,21,21 ,1

第五章 数组和广义表

第5章数组和广义表习题 一、选择题 1.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为(B)。 i×(i-1)/2+j-1~~~~(i>=j) 8×7÷2+5=33因为a11从1开始所以要加1 A. 13 B. 33 C. 18 D. 40 2. 数组A[0..5,0..6]的每个元素占五个字节,将其按列优先次序存储在起始地址为1000的内存单元中,则元素A[5,5]的地址是( A)。 所求=a+(j*n+j)*l A. 1175 B. 1180 C. 1205 D. 1210 3. 若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B[1..(n(n+1))/2]中,则在B中确定aij(i

数据库系统l试题库及答案 第5章数组和广义表

第5章 数组和广义表 5.1数组 一、填空题 1. 假设有二维数组A 6×8,每个元素用相邻的6个字节存储,存储器按字节编址。已知A 的起始存储位置 (基地址)为1000,则数组A 的体积(存储量)为 ;末尾元素A 57的第一个字节地址为 。 2. 三元组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素 的 、 和 。 3. 设数组a[1…60, 1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则 元素a[32,58]的存储地址为 。 4. 设n 行n 列的下三角矩阵A 已压缩到一维数组B[1..n*(n+1)/2]中,若按行为主序存储,则A[i,j] 对应的B 中存储位置为 。 5. 设有一个10阶对称矩阵A 采用压缩存储方式(以行为主序存储:a 11=1),则a 85 的地址为 。 6. 设下三角矩阵A 如果按行序为主序将下三角元素A i j (i ≤j)存储在一个一维数组B[1..n(n+1)/2]中, 对任一个三角矩阵元素A ij ,它在数组B 中的下标为 。 二、选择题 1. ( )假设有60行70列的二维数组a[1…60, 1…70]以列序为主序顺序存储,其基地址为10000, 每个元素占2个存储单元,那么第32行第58列的元素a[32,58]的存储地址为 。 A .16902 B .16904 C .14454 D .答案A, B, C 均不对 2. ( )对特殊矩阵采用压缩存储的目的主要是为了 。 A .表达变得简单 B .对矩阵元素的存取变得简单 C .去掉矩阵中多余元素 D .减少不必要的存储空间 3. ( )对于n 阶对称矩阵,如果以行序或列序放入内存中,则需要 个存储单元。 A .n(n+1)/2 B .n(n-1)/2 C . n 2 D .n 2 /2 4. 有一个100*90的稀疏矩阵,非0元素有10个,设每个整型数占2字节,则用三元组表示该矩阵时, 所需的字节数是 。 A. 60 B. 66 C. 18000 D. 33 5. 对稀疏矩阵进行压缩存储目的是( )。 A .便于进行矩阵运算 B .便于输入和输出 C .节省存储空间 D .降低运算的时间复杂度 6. ( )设矩阵A 是一个对称矩阵,为了节省存储,将其下三角部分(如下图所示)按行序存放在一 维数组B[1, n(n-1)/2 ]中,对下三角部分中任一元素a i,j (i ≤j), 在一维数组B 中下标k 的值是 。 A .i(i-1)/2+j-1 B .i(i-1)/2+j C .i(i+1)/2+j-1 D .i(i+1)/2+j 三、判断题: 1.( )一个稀疏矩阵Am*n 采用三元组形式表示,若把三元组中有关行下标与列下标的值互换,并把 ?????? ? ???????=n n n n a a a a a a A ,2,1 ,2,21,21,1Λ Λ

第5章 数组和广义表答案

第五章答案 5.2设有三对角矩阵A n×n,将其三条对角线上的元素逐行的存于数组B[1..3n-2]中,使得 B[k]=a ij,求:(1)用i,j表示k的下标变换公式;(2)用k表示i、j的下标变换公式。【解答】(1)k=2(i-1)+j (2) i=[k/3]+1, j=[k/3]+k%3 ([ ]取整,%取余) 5.4在稀疏矩阵的快速转置算法5.2中,将计算position[col]的方法稍加改动,使算法只占用一个辅助向量空间。 【解答】算法(一) FastTransposeTSMatrix(TSMartrix A, TSMatrix *B) {/*把矩阵A转置到B所指向的矩阵中去,矩阵用三元组表表示*/ int col,t,p,q; int position[MAXSIZE]; B->len=A.len; B->n=A.m; B->m=A.n; if(B->len>0) { position[1]=1; for(t=1;t<=A.len;t++) position[A.data[t].col+1]++; /*position[col]存放第col-1列非零元素的个数, 即利用pos[col]来记录第col-1列中非零元素的个数*/ /*求col列中第一个非零元素在B.data[ ]的位置,存放在position[col]中*/ for(col=2;col<=A.n;col++) position[col]=position[col]+position[col-1]; for(p=1;pdata[q].row=A.data[p].col; B->data[q].col=A.data[p].row; B->data[q].e=A.data[p].e; Position[col]++; } } } 算法(二) FastTransposeTSMatrix(TSMartrix A, TSMatrix *B) { int col,t,p,q; int position[MAXSIZE]; B->len=A.len; B->n=A.m; B->m=A.n; if(B->len>0) { for(col=1;col<=A.n;col++) position[col]=0; for(t=1;t<=A.len;t++) position[A.data[t].col]++; /*计算每一列的非零元素的个数*/ /*从最后一列起求每一列中第一个非零元素在B.data[]中的位置,存放在position[col]中*/ for(col=A.n,t=A.len;col>0;col--) { t=t-position[col]; position[col]=t+1; } for(p=1;p

第五章数组和广义表

第五章数组与广义表 一.选择题 1.下面的说法不正确的是____________。 A.数组是一种线性结构B.数组是一种定长的线性表结构 C.除了插入与删除操作外,数组的基本操作还有存取、修改、检索和 排序等 D.数组的基本操作有存取、修改、检索和排序等,没有插入和删除操 作 分析:数组的主要操作是存取、修改、检索和排序。数组没有插入和修改 错误。答案应选择C。 2.一维数组A 采用顺序存储结构,每个元素占用6 个字节,第6 个元素的起始地址为100,则该数组的首地址是 。 A.64 B.28 C.70 D.90 分析:设数组元素的首地址为x,则存在关系x+5*6=100,因此x 为70,答案应选择C。 3.稀疏矩阵采用压缩存储的目的主要是______________ 。 A.表达变得简单B.对矩阵元素的存取变得简单 C.去掉矩阵中的多余元素D.减少不必要的存储空间的开销 分析:答案应选择D。 4.若对n 阶对称矩阵A 以行序为主序方式将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B[1..(n(n+1))/2]中,则在B 中确 定aij(i

第五章数组和广义表

第五章数组和广义表 一、单项选择题 1.一维数组A采用顺序存储结构,每个元素占用6个字节,第6个元素的存储地址为100,则该数组的首地址是()。 A.64 B.28 C.70 D.90 2.稀疏矩阵采用压缩存储的目的主要是()。 A.表达变得简单B.对矩阵元素的存取变得简单 C.去掉矩阵中的多余元素D.减少不必要的存储空间的开销 3.一个非空广义表的表头()。 A.不可能是原子B.只能是子表 C.只能是原子D.可以是子表或原子 4.常对数组进行的两种基本操作是()。 A.建立与删除B.索引与修改 C.查找和修改D.查找与索引 5. 设二维数组A[5][6]按行优先顺序存储在内存中,已知A[0][0] 起始地址为1000,每个数组元素占用5个存储单元,则元素A[4][4]的地址为()。 A.1140 B.1145 C.1120 D.1125 6.设有一个20阶的对称矩阵A,采用压缩存储的方式,将其下三角部分以行序为主序存储到一维数组B中(数组下标从1开始),则矩阵中元素a9,2在一维数组B中的下标是()。 A.41 B.32 C.18 D.38 7.稀疏矩阵的压缩存储方式通常有两种,即()。 A.二元组和三元组B.三元组和散列 C.三元组和十字链表D.散列和十字链表 8.广义表(a,(a,b),d,e,((I,j),k))的长度和深度分别是()。

A.5,3 B.5,5 C.6,4 D.6,6 9.广义表((a),a)的表头是()。 A.a B.(a)C.()D.((a)) 10.二维数组A[20][10]采用行序为主序方式存储,每个数据元素占4个存储单元,且A[10][5]的存储地址是1000,则A[18][9]的存储地址是()。 A.1208 B.1212 C.1368 D.1336 11.二维数组A中,每个数据元素占4个字节,行下标从0到4,列下标从0到5,按行优先存储时元素A[3][5]的地址域同按列优先存储时元素()的地址相同。 A.A[2][4] B.A[3][4] C.A[3][5] D.A[4][4] 二、问答题 1、简述广义表和线性表的区别与联系。 2、设广义表L=((),()),试问head(L)、tail(L)、L的长度、深度各为多少?

第五章数组与广义表(作业)

第四章数组与广义表(作业) 一、判断题 1.数组是同类型值的集合。 2.数组是一组相继的内存单元。 3.数组是一种复杂的数据结构,数组元素之间的关系,既不是线 性的,也不是树型的。 4.插入和删除操作是数据结构中最基本的两种操作,所以这两种 操作在数组中也经常使用。 5.数组的存储方式分为顺序和链式两种。 6.使用三元组表表示稀疏矩阵的元素,有时并不能节省存储空间。 7.广义表是由零或多个单元素或子表所组成的有序列,所以广义 表可能为空表。 8.线性表可以看成是广义表的特例,如果广义表中的每个元素都 是单元素,则广义表便成为线性表。 二、选择题 1.一个n*n的对称矩阵,如果以行或列为主序存入内存,则其容 量为()。 A.n*n B.n*n/2 C.n(n+1)/2 D.(n+1)*(n+1)/2 E.(n-1)*n/2 F.n(n-1) 2.在二维数组A[7][9]中,假定每个数据元素占4个存储单元,A00 的存储位置(基地址)为100,则A56的存储位置为()。 A.232 B.151 C.204 D.304

3.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主 存储,a11为第一个元素,其存储地址为1,每个元素占1个地址空间,则a85的地址为()。 A.13 B.33 C.18 D.40 4.二维数组a的每个元素是由6个字符组成的串,行下标i的范 围从0-8,列下标j的范围是从1-10。 (1)存放a至少需要( )个字节。 A.90 B.180 C.240 D.270 E.540 (2)A的第8列和第5行共占()字节。 A.108 B.114 C.54 D.60 E.150 (3)若a按行存放,元素a[8,5]的起始地址与当a按列存放的元素( )的起始地址一致。 A.a[8,5] B. a[3,10] C.a[5,8] D. a[0,9] 5.已知广义表LS=(a,(b,c,c),e),运用HEAD和TAIL函数取出LS中 的单元素b的运算是()。 A.HEAD(HEAD(LS)) B.TAIL(HEAD(LS)) C.HEAD(HEAD(TAIL(LS))) D.HEAD(TAIL(LS)) 6.已知广义表A=((a,b,c),(d,e,f)),从A中取出单元素e的运算是 ()。 A.TAIL(HEAD(A)) B.HEAD(TAIL(A)) C.HEAD(TAIL(TAIL(HEAD(A)))) D.HEAD(TAIL(HEAD(TAIL(A)))) E.HEAD(TAIL(TAIL(A)))

第5章 数组和广义表

1.广义表(((a)))的表头是(((a))),表尾是( ) 。 2.假设一个10阶的下三角矩阵A按列优先顺序压缩存储在一维数组B中,则B数组的大小应为55。(1+10)*10/2 3.假设三维数组A[10][9][8]按行优先顺序存储,若每个元素占3个存储单元,且首地址为100,则元素A[9][8][7]的存储地址是2257 。 4.对矩阵采用压缩存储是为了节省空间。 5.广义表(a,(a,b),d,e,((i,j),k))的长度为5。 ???1.二维数组A[12][18]采用列优先的存储方法,若每个元素各占3个存储单元,且第1个元素的地址为150,则元素A[9][7]的地址为( A ) A.429 B.432 C.435 D.438 ???2.二维数组A[8][9]按行优先顺序存储,若数组元素A[2][3]的存储地址为1087,A[4][7]的存储地址为1153,则数组元素A[6][7]的存储地址为(A)A.1207 B.1209 C.1211 D.1213 3.对广义表L=((a,b),(c,d), (e,f))执行操作tail(tail(L))的结果是(B)A.(e,f) B.((e,f)) C.(f) D.() 1.已知稀疏矩阵采用带行表的三元组表表示,其形式说明如下: #define MaxRow 100 //稀疏矩阵的最大行数 typedef struct { int i,j,v; //行号、列号、元素值 }TriTupleNode; typedef struct{ TriTupleNode data[MaxSize]; int RowTab[MaxRow+1]; //行表 int m,n,t; //矩阵的行数、列数和非零元个数 }RTriTupleTable; 下列算法f的功能是,以行优先的顺序输入稀疏矩阵的非零元(行号、列号、元素值),建立稀疏矩阵的带行表的三元组表存储结构。请在空缺处填入合适内容,使其成为一个完整的算法。(注:矩阵的行、列下标均从1起计) void f (RTriTupleTable *R)

第5章 数组和广义表

第五章数组和广义表 讲课提要 【主要内容】 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。若A以行为主序存储元素,A[8][5]的物理地址与当A按列为主序存

第五章数组和广义表习题_数据结构

习题五数组和广义表一、单项选择题)1.常对数组进行的两种基本操作是( D.查找与索引C.B.索引与修改建立与删除A. 查找与修改 K 个存储单元,二维数组中DataType A[m][n],2.对于 C 语言的二维数组每个数据元素占.( )a[i,j]的存储位置可由任意元素式确定 A.Loc[i,j]=A[m,n]+[(n+1)*i+j]*k B.Loc[i,j]=loc[0,0]+[(m+n)*i+j]*k C.Loc[i,j]=loc[0,0]+[(n+1)*i+j]*k D.Loc[i,j]=[(n+1)*i+j]*k 3.稀疏矩阵的压缩存储方法是只存储( ) A. 非零元素三元祖(i,j, aij)D. i,jC. aij B. 数组A[0..5,0..6]的每个元素占五个字节,将其按列优先次序存储在起始地址为10004. ( )的地址是A[5 ,5]的内存单元中,则元素。 A. 1175 B. 1180 C. 1205 D. 1210 A[N,N] 是对称矩阵,将下面三角(包括对角线)以行序存储到一维数组T[N (N+1)/2]5. 对应T[k] 的下标k是(中,则对任一上三角元素)。a[i][j] (i-1)/2+j(j-i)/2+1((j-1)/2+i i-1 )/2+1D. jB. jA. iC. i j 沿用数组r 存储静态链表,结点的next 域指向后继,工

作指针j 指向链中结点,使6. ( )链移动的操作为。 A. j=r[j].next B. j=j+1D. j=r[j]-> next C. j=j->next 对稀疏矩阵进行压缩存储目的是()。7. A.便于进行矩阵运算.便于输入和输出B .节省存储空间C.降低运算的时间复杂度D LS=((a,b,c),(d,e,f)),函数取出LS 中原子运用head 和tail e 的运算是已知广义表8. 。)( A. head(tail(LS)) B. tail(head(LS)) C. head(tail(head(tail(LS))) D. head(tail(tail(head(LS)))) 广义表((a,b,c,d),表尾是())的表头是()。9. (a,b,c,d(b,c,d)())D.C.A. aB. L=((a,b,c)),则L 的长度和深度分别为(设广义表)。10.和 3 1和和和3 2B. 1C. 1A. 1D. 211.下面说法不正确的是( )。 A. 广义表的表头总是一个广义表 B. 广义表的表尾总是一个广义表 C. 广义表难以用顺序存储结构 D.广义表可以是一个多层次的结构二、填空题 存储结构来存放数组___________1.通常采用。对二维数组可有两种存储方法:一种是以

数据结构课后习题答案第五章数组与广义表

第五章数组与广义表 一、假设有二维数组A6*8,每个元素用相邻的6个字节存储,存储器按字节 编址。已知A的起始存储位置(基地址)为1000。计算: 1、数组A的体积(即存储量); 2、数组A的最后一个元素a57的第一个字节的地址; 3、按行存储时,元素a14的第一个字节的地址; 4、按列存储时,元素a47的第一个字节的地址; 答案: 1、(6*8)*6=288 2、loc(a57)=1000+(5*8+7)*6=1282或=1000+(288-6)=1282 3、loc(a14)=1000+(1*8+4)*6=1072 4、loc(a47)=1000+(7*6+4)*6=1276 二、假设按低下标(行优先)优先存储整数数组A9*3*5*8时第一个元素的字节地址是100,每个整数占四个字节。问下列元素的存储地址是什么? (1)a0000(2)a1111(3)a3125 (4)a8247 答案:(1)100 (2)loc(a1111)=100+(1*3*5*8+1*5*8+1*8+1)*4=776 (3) loc(a3125)=100+(3*3*5*8+1*5*8+2*8+5)*4=1784 (4) loc(a8247)=100+(8*3*5*8+2*5*8+4*8+7)*4=4416 五、设有一个上三角矩阵(aij)n*n,将其上三角元素逐行存于数组B[m]中,(m 充分大),使得B[k]=aij且k=f1(i)+f2(j)+c。试推导出函数f1,f2和常数C(要求f1和f2中不含常数项)。 答: K=n+(n-1)+(n-2)+…..+(n-(i-1)+1)+j-i =(i-1)(n+(n-i+2))/2+j-i 所以f1(i)=(n+1/2)i-1/2i2 f2(j)=j c=-(n+1) 九、已知A为稀疏矩阵,试从空间和时间角度比较采用两种不同的存储结构(二

第5章 数组和广义表(习题)

第5章数组和广义表 习题 一. 选择题 1、数组A[0..5,0..6]的每个元素占五个字节,将其按列优先次序存储在起始地址为1000的内存单元中,则元素A[5,5]的地址是( )。 A. 1175 B. 1180 C. 1205 D. 1210 2、若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B[1..(n(n+1))/2]中,则在B中确定a ij(i

《数据结构》习题集:第5章 数组与广义表

第5章数组与广义表 一、选择题 1.在以下讲述中,正确的是(B )。 A、线性表的线性存储结构优于链表存储结构 B、二维数组是其数据元素为线性表的线性表 C、栈的操作方式是先进先出 D、队列的操作方式是先进后出 2.若采用三元组压缩技术存储稀疏矩阵,只要把每个元素的行下标和列下标互换,就完成了对该矩阵的转 置运算,这种观点(B )。 A、正确 B、错误 3.二维数组SA 中,每个元素的长度为3 个字节,行下标I 从0 到7,列下标J 从0 到9,从首地址SA 开始 连续存放在存储器内,该数组按列存放时,元素A[4][7]的起始地址为( B )。 A、SA+141 B、SA+180 C、SA+222 D、SA+225 4.数组SA 中,每个元素的长度为3 个字节,行下标I 从0 到7,列下标J 从0 到9,从首地址SA 开始连续 存放在存储器内,存放该数组至少需要的字节数是( C )。 A、80 B、100 C、240 D、270 5.常对数组进行的两种基本操作是(C )。 A、建立与删除 B、索引和修改 C、查找和修改 D、查找和索引 6.将一个A[15][15]的下三角矩阵(第一个元素为A[0][0]),按行优先存入一维数组B[120]中,A 中元素A[6][5] 在B 数组中的位置K 为(B )。 A、19 B、26 C、21 D、15 7.若广义表A 满足Head(A)=Tail(A),则A 为(B )。 A、() B、(()) C、((),()) D、((),(),()) 8.广义表((a),a)的表头是(C ),表尾是(C )。 A、a B、b C、(a) D、((a)) 9.广义表((a,b),c,d)的表头是(C ),表尾是(D )。 A、a B、b C、(a,b) D、(c,d) 10.广义表((a))的表头是(B ),表尾是(C )。 A、a B、(a) C、() D、((a)) 11.广义表(a,b,c,d)的表头是(A ),表尾是(D )。 A、a B、(a) C、(a,b) D、(b,c,d) 12.广义表((a,b,c,d))的表头是(C ),表尾是(B )。 A、a B、() C、(a,b,c,d) D、((a,b,c,d)) 13.下面结论正确的是(BC )。 A、一个广义表的表头肯定不是一个广义表 B、一个广义表的表尾肯定是一个广义表 C、广义表L=((),(A,B))的表头为空表 D、广义表中原子个数即为广义表的长度 14.广义表A=(A,B,(C,D),(E,(F,G))),则head(tail(head(tail(tail(A)))))=( D ) A、(G) B、(D) C、C D、D

相关文档
最新文档