牛客网专项练习(二)——20道选择题

接着来看一些牛客网的专项练习题目,20道选择题。

分析:顺序存储的线性表不但逻辑上连续,物理上也连续,可以使用顺序查找法。

链式存储的线性表虽然物理上不一定连续,但逻辑上连续,也可以使用顺序查找法。

分析:特殊矩阵中如果元素有规律,一般采用数组存储。而像稀疏矩阵中元素没有规律的情况下,一般采用三元组或者伪地址表示法。

分析:无论采用什么方式建立单链表,都需要扫描这n个元素,边扫描边创建单链表中的结点并链接起来,其时间复杂度为O(n)。

分析:线性结构指的是数据元素之间存在一对一的线性关系,分线性结构中一个结点可能对应多个元素。

常见的线性结构有:线性表、栈、队列、双队列、一维数组、串等。

非线性结构有:树、图、多维数组等。

分析:

分析:

分析:见第6题的分析表。

分析:

二分查找因为每次都是从中间点开始查找,所以最坏情况是目标元素存在于最边缘的情况。
比如1~9,最坏情况就是1或者9,当然4,6这种也算是边缘(中心的边缘)。
因为二分查找每次排除掉一半的不适合值,所以对于n个元素的情况:
一次二分剩下:n/2
两次二分剩下:n/2/2 = n/4
m次二分剩下:n/(2^m)
在最坏情况下是在排除到只剩下最后一个值之后得到结果,所以为
n/(2^m)=1;
2^m=n;
所以时间复杂度为:log(n)

分析:在待排序数据大部分已经有序时,用直接插入排序更好。

分析:A选项的意思是将s2拼接到s1后面。

分析:不稳定的算法有希尔排序、快速排序、选择排序、堆排序。

分析:见第6题的分析表。

分析:定义一个数组使用[ ]确定其大小,[ ]中的值须为定值,define宏定义的值也为定值,可以用来定义数组。

分析:其他的排序时间复杂度在O(n^2),归并排序无论怎样时间复杂度还是O(nlog2n)。

分析:两个栈的栈顶,一个在数组第一个元素,朝着数组索引增加方向增加,一个栈顶在数据最后一个元素,朝着数组索引减少方向增加,当两个栈的栈顶位置相差1时,数组被写满。

分析:int型元素占4个字节,100个元素总共是100*4=400。

分析:

x(8)=x(6)+x(4)+1  递归计算x(8)第一次调用

x(6)=x(4)+x(2)+1  递归计算x(6)第二次调用

x(4)= x(2)+x(0)+1  递归计算x(4)第三次调用

x(4)= x(2)+x(0)+1   递归计算x(4)第四次调用

之后再调用x()计算黑体部分的结果(5次,加上前面4次,一共9次),最后x(8)返回值为9

接着计算x(9)

x(9)=x(7)+x(5)+1  递归计算x(9)第一次调用

x(7)=x(5)+x(3)+1  递归计算x(7)第二次调用

x(5)=x(3)+x(1)+1  递归计算x(5)第三次调用

x(5)=x(3)+x(1)+1  递归计算x(5)第四次调用

之后再调用x()计算黑体部分的结果(5次,加上前面4次,一共9次),最后x(8)返回值为9

所以总共调用x()的次数是9+9=18

分析:这道题题目问的是x(8)需要调用几次,最后答案应该是A,9次。

以8为根节点画出分支树 8个分支表明调用8次 再加上自身调用x(8)一次 共9次

                                       8

                              6                4

                       4          2      2         0

                 2         0

分析:

思想类似于两端向中间扫描

1、设定两个指针P1、P2,分别指向数组开始和结尾,即P1指向最小值,P2指向最大值;

2、计算 *P1+*P2 的值为 SUM,与 sum 比较,记录它们的差值 DIF 和 SUM,若 SUM<sum,P1++,若SUM>sum,P2--;

3、重复以上过程直到DIF最小。

分析:

数组元素在内存中是连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中。同样的道理,如果想删除一个元素,同样需要移动大量元素去填掉被移动的元素。如果应用需要快速访问数据,很少或不插入和删除元素,就应该用数组。

链表恰好相反,链表中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起。比如:上一个元素有个指针指到下一个元素,以此类推,直到最后一个元素。如果要访问链表中一个元素,需要从第一个元素开始,一直找到需要的元素位置。但是增加和删除一个元素对于链表数据结构就非常简单了,只要修改元素中的指针就可以了。如果应用需要经常插入和删除元素就需要用链表数据结构了。

好了,这次就说到这里。

猜你喜欢

转载自blog.csdn.net/Agonyq/article/details/104581155