牛客网专项练习总结(三)

时间:2024-04-11 18:57:50

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

A.方便删除                        B.方便插入
C.长度可变                        D.存储空间小

答案:D                      分析:

1: 数组内存空间少比链表少

2:数组支持随机访问,链表不具有随机访问的特性

3:插入和删除是链表优于数组,数组需要移动被删除或者插入位置之后的元素

牛客网专项练习总结(三)

3. 对于长度为n的线性表,建立其对应的单链表的时间复杂度为()。

A.O(1)
B.O(log2n)
C.O(n)
D.O(n^2)

答案:C                       分析:

我们使用头插式尾插式创建链表都只需要一次循环遍历就可实现,所以时间复杂度为O(n)。

4.在n个结点的线性表的数组实现中,算法的时间复杂性是O(1)的操作是()

A.访问第i个结点(1<=i<=n)和求第i个结点的直接前驱(2<=i<=n)
B.在第i个结点后插入一个新结点(1<=i<=n)
C.删除第i个结点(1<=i<=n)
D.以上都不对

答案:A                           分析:

注意题目强调的是用 数组 实现的线性表,所以A答案就是访问数组的第i和i-1个元素,B和C是对数组进行插入和删除,需要移动后面的元素,复杂度为O(n)

5.已知int a[3][4];则下列能表示a[1][2]元素值的是

A.  *(*(a+1)+2)
B.  *(a+1+2)
C.  (&a[0]+1)[2]
D.  *(a[0]+1)

答案:A                           分析:

A,   a 是一个二级指针,不是一级指针,*(a+1)表示的第二个数组的地址

B,  *(a+1+2)等于*(a+3),是一个int *, 表示的是 第4个数组a[3]的地址,而 **(a+3)表示a[3][0]的值, 

    *((int *)(a+3)) 也可以表示 a[3][0]的值

C. (&a[0]+1)表示的是第2个数组 a[1]的地址, (&a[0]+1)[2]其实是数组a[3]的地址,改成

    ((int *)(&a[0]+1))[2] 才是对的

D. *(a[0]+1) 是 a[0][1]的值

6.下列程序的功能是求两个 2 行 3 列的数组的和,即数组对应位置的元素—相加,请为横线处选择合适的程序()

牛客网专项练习总结(三)

牛客网专项练习总结(三)

牛客网专项练习总结(三)

A.  void M::                             B.  friend M
C.  M                                    D.  M M::

答案:D   分析:

M M::中,第一个M的表示返回值的类型,第二个M是类名,该函数最后return c,c又是类M的对象,所以返回值的类型是类M

7.int a[3][4][2]; 后,第 20 个元素是(   )

A.   a[2][1][1]
B.   a[1][0][1]
C.   a[2][0][1]
D.   a[2][2][1]

答案:A                  分析:

三维数组可以看成是一本书!

int a[3][4][2]; 就是有3页每页4行2列

 

总共有(0~2)3层,每层可以看成是一个二维数组(如b[4][2]),有4*2=8个元素。

前两层总共有16个元素,所以第20个元素应该在第三层(下标为2).

20-14=4还差4个元素,所以第三层中(例如二维数组b[4][2])第四个元素的位置为b[1][1]

所以第20个元素是a[2][1][1].  答案为A

8.以下程序段的运行结果是(   )。

1

2

char str[10] = "output";

printf("\"%s\"\n", str);

A.   output
B.   "output"
C.   \"output\"
D.   编译错误

答案:B                  分析:

\n     换行                   \r     回车
\f     换页符                \b     退格
\0     空格                  \s   字符串
\t     制表符

\”     双引号               \’     单引号
\ddd     八进制字符串(ddd)
\uxxxx     16进制unicode字符串(xxxx)

牛客网专项练习总结(三)

结点内部一般是连续的,但是如果当结点的data通过地址指针访问时,那么结点内部也不再连续。

10.下列关于线性表中的链表描述正确的是?

A.  适用于数据项数量不能预知的情况。
B.  逻辑相邻的2元素的存储空间可以是不连续的。
C.  链表节点一般有数据元素和指针域两部分组成。
D.  存储空间需要动态分配。

答案:       ABCD

链表可以动态增加,可以用malloc,在存储上可以不是连续的,但,逻辑上是连续的,链表的基本是要求有数据域和指针域,这是最基本的