牛客刷题-数据结构-数组30个选择题(1)-小结整理

写在前面:本人小白白白,白到透明,啥也不会,励志开启算法学习之路,浅浅记录错题本,因为不太懂,如果写错了,还请大家指正。

提问:这里的数据结构好像以c++和java的代码考核,不是python,但是我准备学的是python,不同语言这不一样怎么办呢,不过可能是我没搞清楚,希望友友帮助。

1、初始化数组问题

int a[][2] = {{1,2},{3,4},{5,6}} 
int a[10]={};
int a[]={0};

//这样写都是对的

/*
    用来创建数组的基本方式
    []用来选择哪个位置的数
    {}里写所有的数
    下角标都是从0开始的
*/

问题A:定义了一维 int 型数组 a[10] 后,下面错误的引用是(   )。答案:a[10] = 2;

inward:“我当时在犹豫什么?”

问题B:在java中,要表示10个学生的成绩,下列声明并初始化数组正确的是()答案:int score[]=new int[10]

问题C:int array[2][3]={1,2,3,4,5};  设以下c语句中,对数组array定义后,数组元素array[1][2]的值为:()   答案:0

int array[2][3]={1,2,3,4,5}; 

/*
    如果像上面写到一块了,那表示的数组意思是这样的
    1 2 3
    4 5 0

    初始化的时候就是0了,按照一行一行的放数字
*/

问题D:

定义字符型数组时不允许直接使用“字符常量”的方式赋初值,C语言规定,二维数组定义时不允许省略第二维的长度,所以选项A、B、C错误。二维数组定义时允许省略第一维的长度

2、将数据元素2,4,6,8, 10, 12, 14, 16, 18,20, 22依次存放于一个一维数组中,然后采用折半查找方法查找数组元素16,被比较过的数组元素的轨迹依次为()        答案:12,18,14,16   

这位牛客芙兰朵写的很清晰

3、顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的。

链式存储结构既可以针对线性结构也可以针对非线性结。

链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以链式存储结构比顺序存储结构节省存储空间这句话是错误的。

4、线性表L=(a 1 ,a 2 , … ,a n ),下列陈述正确的是______。

答案:除第一个和最后一个元素外,其余每个元素都有且仅有一个直接前驱和直接后继

5、将10阶对称矩阵压缩存储到一维数组A中,则数组A的长度最少为()答案:55

原来是这样,对称矩阵!对称矩阵!对角线10+(100-10)/2 = 10+45=55

6、定义数组char a[][3] = {1,2,3,4,5,6,7,8},则数组a的第一维的大小是多少。 ()  答案:3

char和array 不一样,这个没有说好初始化都是什么内容,是空的,所以这里,由题目知二维数组的列为3,一共有8个元素,所以行为3,第一维大小为3,第二维大小为3,第三维大小为2

7、

 8、执行以下代码段(程序已包含所有必需的头文件)会输出什么结果。()

char a[2][3] = {{'a', 'b', 'c'}‘1',‘\0', ‘2'}};
printf("%d", sizeof(a));

//sizeof 看的是大小,不是哪个数字

9、设有一个 10 阶的下三角矩阵 A (包括对角线),按照行优先的顺序存储到连续的 55 个存储单元中,每个数组元素占 1 个字节的存储空间,则 A[5][4] 地址与 A[0][0] 的地址之差为( )。

答案:19     下三角,从0开始,A[5][4] 的地址是1+2+3+4+5+5=20,A[0][0]地址为1。

/*
下三角是

1 
2 3
4 5 6
7 8 9 0
1 2 3 4 5
1 2 3 4 5 6  
        ↑
        [5][4]

上三角是

1 2 3 4
5 6 7
8 9
10

*/

10、从一个无序数组中挑选出其中前十个最大的元素,在以下的排序方法中最快的方法是()

答案:堆排序

一位牛客芙兰朵回答:

快速排序:选取一个基准数,序列最左边和最右边分别设置一个探针i,j。先从右往左找一个小于基准数的数,再从左往右找一个大于基准数的数,然后交换他们。继续从右向左重复以上过程,直至两探针相遇。最后基准数与两探针相遇位置的数进行交换。一轮排序结束后,基准数将序列分为两部分,左边的数都小于基准数,右边的数都大于基准数。平均复杂度为O(nlogn),最坏为O(n^2)。

堆排序:不稳定排序,复杂度O(nlogn)。升序采用大顶堆(每个结点的值都大于或等于其左右孩子结点的值),降序采用小顶堆。从最后一个非叶子结点开始,从左至右,从下至上调整成堆结构。一轮排序后,无序序列被构造成了一个堆,堆顶(根结点)元素为该趟排序序列最大或最小值,然后将堆顶元素与末尾元素进行交换。对剩余结点继续作上述调整。

归并排序:时间复杂度O(nlogn)。将待排序序列分成两组,只需使两组分别有序,然后将两组有序数列合并完成排序。采用递归分解数列,当分出来的组只有一个数据时认为该组有序,然后依次合并相邻小组。

基数排序:稳定排序。时间复杂度O(d(n+r))。r为基数,d为位数。依次对各个位进行排序,位数不足的补齐。分为最低位优先法(LSD)和最高位优先法(MSD)。分配: 先从个位开始,根据位值分别放入0-9号桶中。收集:将桶中的数据按顺序放到数组中。同一桶中按放入顺序取出(稳定排序)。

11、蒙圈ing

12、

13、稀疏矩阵一般的压缩存储方式有两种,即 ()答案:三元组和十字链表

14、数组就是矩阵,矩阵就是数组,这种说法( 错误!)

15、请问下面哪种方式可以在不改变原来数组的情况下,拷贝出数组 b ,且满足 b!=a 。例如数组 a 为 [1,2,3] 。

let b=a.slice();

let b=a.concat();

//这两种都可以

slice和concat方法均返回新数组,而let b=a.splice(0,0);方法的主要作用就是对原数组进行增删改操作,返回值为截取删除掉的子数组。

16、二维以上的数组其实是一种特殊的广义表。(对)

数组一旦建立,结构的元素个数和元素间的物理存储关系就不再变化。(对)

数组采用顺序存储方式表示。(对)

数组是一种线性结构,因此只能用来存储线性表(错)

17、已知数组D的定义是int D[4][8];现在需要把这个数组作为实参传递给一个函数进行处理。下列可以作为对应的形参变量说明的是(C、D)。

        C中(*s)等价于s[]

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bAdwoMan*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值