牛客网数组专项练习(二)

1、下面哪项不是链表优于数组的特点?

正确答案: D  

方便删除
方便插入
长度可变
存储空间小

链表的特点:

  1. 表方便删除和插入,只需知道结点和要插入的信息即可
  2. 长度可变,一般链表是动态分配内存空间
  3. 链表的结点信息至少包含数据域和指针域,相同数据下:数组的大小是链表大小的子集

 2、向一个长度为n的向量的第i个元素(1≤i≤n+1)之前插入一个元素时,需向后移动() 个元素

正确答案: B   你的答案: B (正确)

n-i
n-i+1
n-i-1
i

分析:

在前面i-1个元素不动,那么就要移动n-(i-1)个元素了


3、若有说明:int a[3][4];,则对 a 数组元素的正确引用是(   )

正确答案: C    你的答案: A (错误)

a[2][4]
a[1,3]
a[1+1][0]
a(2)(1)

分析

a[2][4]越界了,a[2][3]就可以,数组下标从0开始


4、若声明一个浮点数数组如下:

float average[]=new float[30];

假设该数组的内存起始位置为200, average[15]的内存地址是

正确答案: C   你的答案: C (正确)

214
215
260
256    

分析:

按字节个数计算。每个 float 占用 sizeof(float) 个字节,通常为 4。average[15] 地址是average[0]的地址加15 * sizeof(float) , 即加 15*4 = 60。起始位置为200,所以average[15] 的地址是 200 + 15 * sizeof(float) = 260。


5、在C语言中,若有定义:int a[4][10](其中0<=i<4,0<=j<10);则下列选项中对数组元素a[i][j]引用错误的是()

正确答案: A   

*(a+i)+j
*(&a[0][0]+10*i+j)
*(a[i]+j)
*(*(a+i)+j)

分析:

A是a[i][j]的地址

D是A再取*则是a[i][j]的值

C正确,a[i]为第i行第0个元素的值,加j后为a[i][j]地址,再取*就是a[i][j]

B正确,a[0][0]取地址是数组第一个元素的地址,加上10*i为第i行第0个元素的地址,在加j是a[i][j]地址,再取*是a[i][j]的值


6、线性表的顺序存储结构是一种() 的存储结构,线性表的链式存储结构是一种顺序存取 的存储结构。

正确答案: A   

随机存取
顺序存取
索引存取
散列存取

分析:

顺序存储结构中,数据元素存放在一组地址连续的存储单元中,每个数据元素地址可通过公式LOC(ai)=LOC(a1)+(i-1)L计算得到,从而实现了随机存取。对于链式存储结构,要对某结点进行存取,都得从链的头指针指向的结点开始,这是一种顺序存取的存储结构。注意区分“存储”和“存取”


7、有一个100*90的稀疏矩阵,非0元素有10个,设每个整型数占2字节,则用三元组表示该矩阵时,所需的字节数是()

正确答案: B   你的答案: A (错误)

60
66
18000
33

分析

将非零元素所在、非零元素的构成一个三元组(i,j,v) ;

对于该题:

每个非零元素占3*2=6个字节,共10个非零元素,需6*10 = 60 个字节;

此外,还一般要用三个整数来存储矩阵的行数、列数和总元素个数,又需要3*2 = 6个字节;

总共:60 + 6 = 66 个字节。


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

正确答案: B   你的答案: B (正确)

8

9

10

11

分析:这是一个考最优算法的下界问题。

选择问题的复杂度下界,已经有证明,可参考算法导论

对于选择问题,找最大问题的下界是:n-1

找第二大问题的下界是:n+logn-2

因此,本题,n=8,代入下界公式:8+3-2 = 9,所以选择B.


9、在一个长为33厘米的光滑凹轨上,在第3厘米、第6厘米、第19厘米、第22 厘米、第26厘米处各有一个钢珠,凹轨很细,不能同时通过两个钢珠,开始时,钢珠运动方向是任意的。两个钢珠相撞后,以相同速度反向运动。假设所有钢珠初 始速度为每秒运动1厘米,那么所有钢珠离开凹轨的最长可能时间是()

正确答案: A   你的答案: C (错误)

30

26

38

33

首先要理解为穿越问题。然后如下分析
所有球离开的最长时间,就可以等效为最后离开的那个球的时间,也就变成找哪个球离左边或右边出口的距离最远,显然5个球中,第一个球离右端出口(33-3)30是距离最远的,故最后答案是30


10、下列关于数组与指针的区别描述正确的是?

正确答案: B   

数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。
用运算符sizeof 可以计算出数组的容量(字节数)
指针可以随时指向任意类型的内存块。
用运算符sizeof 可以计算出指针所指向内容的容量(字节数)

分析

A.堆上创建动态数组

B.sizeof(数组名)就是数组的容量

C.const指针不可以

D. char* str = "hello"; sizeof(str)不能计算出内容的容量,只是指针的容量

发布了65 篇原创文章 · 获赞 3 · 访问量 1766

猜你喜欢

转载自blog.csdn.net/weixin_44077638/article/details/104456473