专项练习数组(4)

1.矩阵中的数据元素可以是不同的数据类型 ,这样的说法正确吗?(B)

A.正确

B.不正确

解析:矩阵中的数据元素可以是不同的数据类型;强调的是矩阵中的元素,而不是其中一个元素的构成,也就是说你举的这个例子中,data[0],data[n]的数据元素类型一定是相同的,而不是把其中一个元素拿出来研究其中是不是存在不相同的数据元素。

2.一个稀疏矩阵Am*n 采用三元组形式表示,若把三元组中有关行下标与列下标的值互换,并把m和n的值互换,则就完成了Am*n 的转置运算(B)。

A.对

B.错

解析:三元组转置: (1)将数组的行列值相互交换 (2)将每个三元组的i和j相互交换 (3)重排三元组的之间的次序便可实现矩阵的转置。

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

A.SA+141

B.SA+144

C.SA+222

D.SA+225

解析:首先,本题的数组是从A[1][1]开始的,也就是说和所谓的数组从零开始没什么关系。A[1][1]的起始地址为SA,那么A[1][2]为SA+3.....A[2][1]为SA+3*10.....A[i][j]为SA+((i-1)*10+(j-1))*3。那么A[8][5]的起始地址就是SA+ (7*10+4)*3=SA+222.

4.循环队列SQ的存储空间是数组d[m],队头、队尾指针分别是front和rear,则执行出队后其头指针front值是(D

A.front=front+1

B.front=(front+1)%(m-1)

C.front=(front-1)%m

D.front=(front+1)%m

解析:循环队列  进队:队尾指针(rear+1)%m;出队:对头指针(front+1)%m;m为数组容量。

5.有一随机数组(25,84,21,46,13,27,68,35,20),采用某种方法对它们进行排序,其每趟排序结果如下,则该排序方法是(A)。

初 始:25,84,21,46,13,27,68,35,20 

第一趟:20,13,21,25,46,27,68,35,84

第二趟:13,20,21,25,35,27,46,68,84 

第三趟:13,20,21,25,27,35,46,68,84

A.基数排序

B.插入排序

C.快速排序

D.起泡排序

解析:快速排序:关键节点前面的元素都比它小,后面的元素都比它大;选择排序:从剩余元素后面找最小元素和当前元素交换;插入排序:关键元素前面的元素已经排好序。

6.在一个有8个int数据的数组中,随机给出数组的数据,找出最大和第二大元素一定需要进行(B)次比较:

A.8

B.9

C.10

D.11

解析:选择问题的复杂度下界,已经有证明,可参考算法导论或屈婉玲的算法设计与分析技术这本书。对于选择问题,找最大问题的下界是:n-1;找第二大问题的下界是:n+logn-2。因此,本题,n=8,代入下界公式:8+3-2 = 9,所以选择B.

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

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

解析:(n - j + 2 +n) (j - 1) / 2 + i - j。

8.下列数组定义及赋值,错误的是(B

A.int intArray[ ];

B.int intArray=new int[3]; intArray[1]=1; intArray[2]=2;

C.int a[ ]={1, 2, 3, 4, 5};

D.int a[ ] [ ]=new int[2] [ ]; a[0]=new int[3]; a[1]=new int[3];

解析: A选项只能算是一个数组的声明,而非定义,也不是赋值。B选项三条语句都是赋值。C选项是定义。D选项是定义,然后两条语句是赋值。

9.已知一稀疏矩阵的三组元表为:(1,2,3),(1,6,1),(3,1,5)(3,2,-1),(5,4,5)(5,1,-3),则其转置矩阵的三元组表中第3个三元组为(A

A.(2, 1, 3)

B.(3, 1, 5)

C.(3, 2, -1)

D.(2, 3, -1)

解析:稀疏矩阵:矩阵中大多数元素为0元素,用一个三元组存放矩阵中的元素,形式为( i,j,e),其中i表示行号,j表示列号,e表示元素值。第三个三元组为(2[第二行],1[第一列],3[元素值为3])。

10.以下操作中,数组比链表速度更快的是(A、C、E)

A.原地逆序

B.头部插入

C.返回中间节点

D.返回头部节点

E.选择随机节点

解析:A选项,如果是数组只要遍历一半元素就可以了,翻转的思想类似于字符串逆序,但链表如果要完成逆序,就算只是修改指针也要把所有的元素遍历完,所以相比而言数组还是比链表快的。B链表只需插入一个节点,数组需移动n个元素C选项的访问中间节点,数组可以通过array[length/2]访问,链表需要依次查找到中间节点。D头结点都一样。E 数组是顺序存储的线性表,相对于链表而言主要的优点就是可以通过下标随机访问数组中的任意元素。

11.矩阵不仅是表示多维数组,而且是表示图的重要工具,这样的说法正确吗?(A

A.正确

B.不正确

解析:图的表示方法有邻接矩阵和邻接表。

12.下列哪些不是线性表?(C

A.队列

B.栈

C.关联数组

D.链表

解析:1. 队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表; 2. 栈(stack)在计算机科学中是限定仅在栈顶进行插入或删除操作的线性表。3. “关联数组”是一种具有特殊索引方式的数组。不仅可以通过整数来索引它,还可以使用字符串或者其他类型的值(除了NULL)来索引它。 关联数组和数组类似,由以名称作为键的字段和方法组成。 它包含标量数据,可用索引值来单独选择这些数据,和数组不同的是, 关联数组的索引值不是非负的整数而是任意的标量。这些标量称为Keys,可以在以后用于检索数组中的数值。 关联数组的元素没有特定的顺序,你可以把它们想象为一组卡片。每张卡片上半部分是索引而下半部分是数值。

13.下列叙述中正确的是( A )。

A.顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的

B.顺序存储结构只针对线性结构,链式存储结构只针对非线性结构

C.顺序存储结构能存储有序表,链式存储结构不能存储有序表

D.链式存储结构比顺序存储结构节省存储空间

解析: 1.顺序表的特点是逻辑上相邻的数据元素,其物理存储位置也相邻,并且顺序表的存储空间需要预先分配;2.链式存储中逻辑上相邻的数据元素其物理存储位置不一定相邻,是因为链表通过指针实现元素间的逻辑关系;3.顺序存储结构适合频繁的查询时使用,链式存储结构适合频繁的插入,删除和更新元素时使用。

14.假设要存储一个数据集,数据维持有序,对其的操作只有插入、删除和顺序遍历,综合存储效率和运行速度,下列哪种数据结构是最适合的是?(B

A.数组

B.链表

C.哈希表

D.队列

解析: 数组插入、删除需要移动数组元素,平均移动n/2。哈希表难以实现顺序遍历。队列插入删除效率低下。

15.判断下列说法是否正确:一个n阶对称矩阵,矩阵元为Aij将其下三角部分以行序为主序存放在一维数组M[0,n(n+1)/2-1]中,设矩阵最左上角矩阵元为A00,则矩阵元A64对应的位置为M[25]。( A)

A.正确

B.正确

解析:A00的n为1放在M[0] A11的n为2放在M[2] 以此类推A55的n为6放在M[20] A64为第七行的第5个数,所以在M[25] 或者A66放在M[27],往前数两个就是A64的位置。

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

A.二维数组和三维数组

B.三元组和散列

C.三元组和十字链表

D.散列和十字链表

解析:所谓三元组就是一个元素存放三个信息,矩阵中的行号,列号以及值,这样就可以不存放值为0的元素,实现压缩。 十字链表相当于是邻接表和逆邻接表的合集,在一个元素里面存放了值以及出度表和入度表,这样也不需要像邻接矩阵那样存放大量0元素,而且找一个节点的入节点和找出节点一样快。

17.有一个二维数组A[10][5],每个数据元素占1个字节,且A[0][0]的存储地址是1000,则A[i][j]的地址是多少 ?(A)

A.1000+10i+j

B.1000+i+j

C.1000+5i+j

D.1000+10i+5j

解析:因为是5列10行的数组,而且分配内存地址是连续的,如果按行存储的,则每增加1行地址就会增加5,然后加上所在的列就是当前的地址,所以就是1000+5i+j。

18.在定义 int a[3][4][2]; 后,第 20 个元素是(  A

A.a[2][1][1]

B.a[1][0][1]

C.a[2][0][1]

D.a[2][2][1]

解析:三维数组可以看成是一本书!int a[3][4][2]; 就是有3页每页4行2列.

19.若有定义:int c[4][5],( *pc)[5];pc=c;那么,下列对数组C的元素引用正确的是(D )。

A.pc+1

B.* (pc+3)

C.* (pc+1) +3

D.* (*pc+2)

解析:pc是一个数组指针(指向数组的指针),指向列数为5的二维数组,pc = c,表示pc指向二维数组的第一行,pc+1偏移一行,一行5个元素。*pc得到二维数组c的第一行数组的首地址,+2偏移到c[0][2]的地址,解引用就得到数据2。c[4][5]可以理解为4个长度为5的一位数组,这四个一维数组的地址要用数组指针存放。

20.二维数组和多维数组均不是线性结构。( A

A.正确

B.不正确

解析:线性结构是一个有序数据元素的集合。 其中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。常用的线性结构有:线性表,栈,队列,双队列,数组,串。非线性结构中各个数据元素不再保持在一个线性序列中,每个数据元素可能与零个或者多个其他数据元素发生联系。根据关系的不同,可分为层次结构和群结构。常见的非线性结构有:二维数组,***数组,广义表,树(二叉树等),图。(其中***数组是由多个一维数组组成的,所以不再是线性结构)。

 

 

 

 

 

 

 

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值