数据结构4(数组和广义表)

第4章  数组和广义表

【例4-1】二维数组A的每一个元素是由6个字符组成的串,其行下标i=0,1,…,8,列下标j=1,2,…,10。若A以行为主序存储元素,A[8][5]的物理地址与当A按列为主序存储时的元素(  )的物理地址相同。设每个字符占一个字节。

A.A[8][5]    B.A[3][10]    C.A[5][8]    D.A[0][9]

//作图

解:  二维数A是一个9行10列的矩阵,即A[9][10]。按行存储时,A[8][5]是第85个元素存储的元素。而按列存储时,第85个存储的元素是A[3][10]。即正确答案为B。

【例4-2】若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B[n(n+1)/2]中,则在B中确定的位置k的关系为(  )。

A.  B.  C.  D.

解:  如果a按行存储,那么它的前面有i-1行,其有元素个数为:

1+2+3+…+(i-1)=i(i-1)/2。同时它又是所在行的第j列,因此它排列的顺序还得加上j,一维数组B[n(n+1)/2]中的位置k与其下标的关系是:。

因此答案为A。

【例4-3】已知n阶下三角矩阵A,按照压缩存储的思想,可以将其主对角线以下所有元素(包括主对角线上元素)依次存放于一维数组B中。请写出从第一列开始以列序为主序分配方式时在B中确定元素a的存放位置的公式。

解:  如果a按列存储,那么它的前面有j-1列,共有元素:

n+(n-1)+(n-2)+ …+[n-(j-2)]    //j-1-1

=(j-1)*n-

而它又是所在列的第i行,因此在它前的元素个数还得加上i。因此它在一维数组B中的存储顺序为:

(j-1)*n-+i    //感觉不对,应该是+(i-n/2)

【例4-4】已知广义表L=((x,y,z),a,(u,t,w)),从L表中取出的原子项ASCII码最大的运算是(  )。//取z

A.head(tail(tail(L)))

B.tail(head(head(tail(L))))

C.head(tail(tail(head(L))))   //表尾一定是个表

D.head(tail(tail(tail(L))))

解:选项A的结果是字符串“u”;选项B的结果是空表,无字符;选项C的结果是字符“z”;选项D的结果是字符“t”。从所有选项的结果可以看出,ASCII码最大的是字符“z”。因此正确答案是C。

习题4

一、单项选择题

1. 设二维数组A[0…m-1][0…n-1]按行优先顺序存储在内存中,第一个元素的地址为p,每个元素占k个字节,则元素aij的地址为(  A)。

A.p +[i*n+j-1]*k             B.p+[(i-1)*n+j-1]*k

C.p+[(j-1)*n+i-1]*k          D.p+[j*n+i-1]*k

2. 已知二维数组A10×10中,元素a20的地址为560,每个元素占4个字节,则元素a10的地址为(  A)。

A.520          B.522          C.524          D.518

3. 若数组A[0…m][0…n]按列优先顺序存储,则aij地址为(3. A )。

A.LOC(a00)+[j*(m+1)+i+1]             B. LOC(a00)+[j*n+i]

C.LOC(a00)+[(j-1)*n+i-1]     D. LOC(a00)+[(j-1)*m+i-1]

4. 若下三角矩阵An×n,按列顺序压缩存储在数组Sa[0…(n+1)n/2]中,则非零元素aij的地址为(4. B)。(设每个元素占d个字节)

A. [(j-1)*n-+i-1]*d

B. [(j-1)*n-+i]*d    //日了特朗普了

C.[(j-1)*n-+i+1]*d

D.[(j-1)*n-+i-2]*d

5. 设有广义表D=(a,b,D),其长度为(B ),深度为(A )。

A.无穷大      B.3             C.2             D.5

6. 广义表A=(a),则表尾为(6. C  )。

A.a               B.(( ))        C.空表         D.(a)

7. 广义表A=((x,(a,B)),(x,(a,B),y)),则运算head(head(tail(A)))的结果为(7. A )。

A.x           B.(a,B)         C.(x,(a,B))    D.A

8. 下列广义表用图来表示时,分支结点最多的是(  8. A)。

A.L=((x,(a,B)),(x,(a,B),y))     B.A=(s,(a,B))

C.B=((x,(a,B),y))               D.D=((a,B),(c,(a,B),D)

9. 通常对数组进行的两种基本操作是(9. C)。

A.建立与删除                     B.索引和修改

C.查找和修改     //读和写                 D.查找与索引

10. 假定在数组A中,每个元素的长度为3个字节,行下标i从1到8,列下标j从1到10,从首地址SA开始连续存放在存储器内,存放该数组至少需要的单元数为(10. C)。

A.80             B.100          C.240           D.270

11. 数组A中,每个元素的长度为3个字节,行下标i从1到8,列下标j从1到10,从首地址SA开始连续存放在存储器内,该数组按行存放时,元素A[8][5]的起始地址为(11. C )。

A.SA+141         B.SA+144       C.SA+222       D.SA+225

12. 稀疏矩阵一般的压缩存储方法有两种,即(12. C )。

A.二维数组和三维数组          B.三元组和散列

C.三元组和十字链表            D.散列和十字链表

13. 若采用三元组压缩技术存储稀疏矩阵,只要把每个元素的行下标和列下标互换,就完成了对该矩阵的转置运算,这种观点(13. B  )。

A.正确                           B.不正确

14. 一个广义表的表头总是一个(14. D)。

A.广义表         B.元素         C.空表         D.元素或广义表

15. 一个广义表的表尾总是一个(  15.A)。

A.广义表          B.元素         C.空表          D.元素或广义表

16. 数组就是矩阵,矩阵就是数组,这种说法(16.B )。

A.正确                         B.错误

C.前句对,后句错                  D.后句对

二、填空题

1. 一维数组的逻辑结构是________线性结构______,存储结构是____顺序结构__________;对于二维或多维数组,分为_____以行为主序_________和____以列为主序__________两种不同的存储方式。

2. 对于一个二维数组A[m][n],若按行序为主序存储,则任一元素A[i][j]相对于A[0][0]的地址为_______ i×n+j个元素位置_______。

3. 一个广义表为(a,(a,b),d,e,((i,j),k))则该广义表的长度为__5___,深度为_3____。

4. 一个稀疏矩阵为                 ,则对应的三元组线性表为____((0,2,2),(1,0,3),(2,2,-1),(2,3,5))_________。

 
   

5. 一个n×n的对称矩阵,如果以行为主序或以列为主序存入内存,则其容量为__________
n(n+1)/2____。

6. 已知广义表A=((a,b,c),(d,e,f)),则运算head(tail(head((tail(A))))=____e _____。

7. 设有一个10阶的对称矩阵A,采用压缩存储方式以行序为主序存储,a为第一个元素,其存储地址为0,每个元素占有1个存储地址空间,则a的地址为_______41_______。

//压缩存储,以行为主序

8. 已知广义表Ls=(a,(b,c,d),e),运用head和tail函数取出Ls中的原子b的运算是__________ head(head(tail(Ls)))____。

9. 三维数组R[c1…d1,c2…d2,c3…d3]共含有________(d-c+1)×(d-c+1)×(d-c+1)______个元素。(其中:c1≤d1,c2≤d2,c3≤d3

10. 数组A[1…10,-2…6,2…8]以行优先的顺序存储,设第一个元素的首地址是100,每个元素占3个存储长度的存储空间,则元素A[5,0,7]的存储地址为________913______。

//该数组可以看做A[10][9][7]   
100+(5-1)*9*7*3+(0--2)*7*3+(7-2)*3=913

三、判断题

1. 数组可看作基本线性表的一种推广,因此与线性表一样,可以对它进行插入、删除等操作。(  ×
)//数组一旦固定后就不能插入或修改

2. 多维数组可以看作数据元素也是基本线性表的基本线性表。(√)

3. 以行为主序或以列为主序对于多维数组的存储没有影响。(√)

4. 对于不同的特殊矩阵应该采用不同的存储方式。(√)//特殊矩阵采用数组法,稀疏矩阵采用三元组法

5. 采用压缩存储之后,下三角矩阵的存储空间可以节约一半。(×)

6. 在一般情况下,采用压缩存储之后,对称矩阵是所有特殊矩阵中存储空间节约最多的。(×)//稀疏矩阵

7. 矩阵不仅是表示多维数组,而且是表示图的重要工具。(√)//图的邻接矩阵表示法

8. 距阵中的数据元素可以是不同的数据类型。(×)//通常用二维数组表示矩阵

9. 矩阵中的行列数往往是不相等的。(×)//没有往往

10. 广义表的表头可以是广义表,也可以是单个元素。(√)

11. 广义表的表尾一定是一个广义表。(√)

12. 广义表的元素可以是子表,也可以是单元素。(√)

13. 广义表不能递归定义。(×)//广义表是递归定义的

14. 广义表实际上是基本线性表的推广。(√)

15. 广义表的组成元素可以是不同形式的元素。(√)//可以是原子也可以是表


原文地址:https://www.cnblogs.com/-XiangBei-/p/11143512.html

时间: 2024-10-03 17:17:08

数据结构4(数组和广义表)的相关文章

【数据结构】数组和广义表

感觉数组这一段没讲什么太多的东西. 先是讲了下定义,就是每个维度上都有对应的前驱后继,首尾元素例外.操作只有初始化 销毁 取元素 修改元素.然后讲了下适合用顺序存储结构,多维情况下根据下标(j1 j2 j3 ... jn)找到对应像素的存储位置 cn = L, ci-1 = bi * ci,  LOC = LOC基址 + Σciji , L为每个元素存储的单位. 然后给了些实现代码. 新知识是: va_start( , ); va_arg( , ); va_end(); 这三个可以用来处理变长参

数据结构实践项目——数组和广义表

本文针对 [数据结构基础系列网络课程(5):数组和广义表] 1. 数组的基本概念与存储结构 2. 特殊矩阵的压缩存储 3. 稀疏矩阵的三元组表示 4. 稀疏矩阵的十字链表表示 5. 广义表 6. 广义表的存储结构及基本运算的实现 [项目1 - 猴子选大王(数组版)] 一群猴子,编号是1,2,3 -m,这群猴子(m个)按照1-m的顺序围坐一圈.从第1只开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,最后一只出圈的猴子为大王.输入m和n,输出猴子离开圈子的顺序,从中也可以看出最后为大王是几号

数据结构与算法系列研究四——数组和广义表

稀疏矩阵的十字链表实现和转置 一.数组和广义表的定义 数组的定义1:一个 N 维数组是受 N 组线性关系约束的线性表.           二维数组的逻辑结构可形式地描述为:           2_ARRAY(D,R)              其中 D={aij} | i=0,1,...,b1-1; j=0,1,...,b2-1;aij∈D0}              R={Row,Col}              Row={<aij,ai,j+1>|0<=i<=b1-1;

数据结构期末复习第五章数组和广义表

数据结构期末复习第五章 数组和广义表 二维数组A[m][n]按行优先 寻址计算方法,每个数组元素占据d 个地址单元.     设数组的基址为LOC(a11) :LOC(aij)=LOC(a11)+((i-1)*n+j-1)*d     设数组的基址为LOC(a00) :LOC(aij)=LOC(a00)+( i*n+j )*d    二维数组A[m][n]按列优先 寻址计算方法,每个数组元素占据d 个地址单元.     设数组的基址为LOC(a11) :LOC(aij)=LOC(a11)+((j

数组和广义表-第5章-《数据结构题集》答案解析-严蔚敏吴伟民版

习题集解析部分 第5章 数组和广义表 ——<数据结构题集>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑       本习题文档的存放目录:数据结构\▼配套习题解析\▼05 数组和广义表       文档中源码的存放目录:数据结构\▼配

5-5-广义表(头尾链表存储表示)-数组和广义表-第5章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第5章  数组和广义表 - 广义表(头尾链表存储表示) ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? Status.h.SequenceString.c    

5-6-广义表(扩展线性链表存储表示)-数组和广义表-第5章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第5章  数组和广义表 - 广义表(扩展线性链表存储表示) ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? Status.h.SequenceString.c  

5-3-行逻辑链接的顺序表(稀疏矩阵)-数组和广义表-第5章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第5章  数组和广义表 - 行逻辑链接的顺序表(稀疏矩阵) ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? Status.h.Scanf.c        相关测试

5-4-十字链表(稀疏矩阵)-数组和广义表-第5章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第5章  数组和广义表 - 十字链表(稀疏矩阵) ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? Status.h.Scanf.c        相关测试数据下载

5-2-三元组顺序表(稀疏矩阵)-数组和广义表-第5章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第5章  数组和广义表 - 三元组顺序表(稀疏矩阵) ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? Status.h.Scanf.c        相关测试数据下