【数组】练习题

 其实求的就是A[7][4]地址,故位置为(7*10 + 4)* 4 = 296


数组静态分配内存,并在内存中连续,链表动态分配内存,但不连续查询时,数组下标查询的时间

复杂度为O(1),数组元数查询的时间复杂度为O(n),链表查询的时间复杂度为O(n) 

插入或删除时,链表的时间复杂度为O(1),数组为O(n)

数组元素在栈区,链表元素在堆区


数组下标从0开始, a[i][j]实际上是第i+1行,第j+1列的元素, 求它前面的元素个数只需先算出它前面的i行元素总个数i*m,然后再加上它所在行的前j个元素。 也就是i*m+j


逻辑上连续物理上不连续 


队列中,队列满的条件是:(rear+1)%QueueSize=front;

                                      队列长度公式是:(rear-front+QueueSize)%QueueSize。

有一个用数组C[1..m]表示的环形队列,m为数组的长度。假__牛客网 (nowcoder.com)


设有一个10阶对称矩阵A[10][10],采用压缩存储方式按__牛客网 (nowcoder.com)


 

 A[5][5]前面有1、2、3、4共四行,有1、2、3、4共四列,
 所以它的共有4*100+4=404个元素,又因为每个元素占2个存储单元,所以这404个元素共占存储
          404*2=808个存储单元,又因为数组A的起始地址(就是题目说的基地址)是10,所以
          A[5][5]d的起始地址就是808+10=818.  

数组A=array[1..100,1..100]以行序为主序__牛客网 (nowcoder.com)


二维数组k[1..7,1..9],每元素大小占2个字节,而且_顺丰集团笔试题_牛客网 (nowcoder.com)


主对角线都存:10个,剩下的90个只存一半45个,共55个 

将10阶对称矩阵压缩存储到一维数组A中,则数组A的长度最少为_搜狐笔试题_牛客网 (nowcoder.com)


jdk8以及之后是数组+链表/红黑树,8之前是数组+链表的方式啊

HashMap的数据结构是怎样的?_360公司笔试题_牛客网 (nowcoder.com)


 假设该数组的内存起始位置为 200 , aver__牛客网 (nowcoder.com)


x如此定义会在后面添加\0,所以x比y多一个结束符号 

给出以下定义: Char x[]=”abcdefg”; Ch__牛客网 (nowcoder.com)


若有语句__牛客网 (nowcoder.com)


倒数第n个是从1开始数,第n个的下标如果从后数就是n-1,因为是倒数所以用99-(n-1) = 100-n已知数组char a[100],以下哪个选项可以访问数组的倒__牛客网 (nowcoder.com) 


根据题目得出:数组名s为字符数组的首地址,并且将ps指针指向数组的首地址。

  • A选项,ps+2指针向后移动2个单位指向字符'o'的地址,并不是地址中的值。所以A错误
  • B选项,s[2]采用数组下标的方式表示,从0开始的字符,刚好是'o'
  • C选项,ps[2]采用指针下标的方式表示,从0开始的字符,刚好是'o'
  • D选项,对ps+2的地址进行取存放的值,刚好是'o'

 若定义:char s[20]="programming",*__牛客网 (nowcoder.com)


 

实际存储为{'H','e','l','l','o','\0'},所以是6个 

char str[]="Hello", sizeof(str_迅雷笔试题_牛客网 (nowcoder.com)

数组指针和指针数组的区别 - jack_Meng - 博客园 (cnblogs.com)


 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正__牛客网 (nowcoder.com)


下列叙述中正确的是(  )。__牛客网 (nowcoder.com)


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

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

 在定义 int a[3][4][2]; 后,第 20 个元素__牛客网 (nowcoder.com)


C语言中,字符串默认每个占用1字节,末尾还有'\0',所以一共是4字节在C语言中,顺序存储长度为3的字符串,需要占用( )个__牛客网 (nowcoder.com) 


'e'-s == 'e'-'a' == 4 而数组a[4] == 5 

已知定义如下代码段 ,则以下哪个选项结果为5。() int __牛客网 (nowcoder.com)



在定义字符串的时候,会有一个'\0'作为字符串的结束标志,所以完整的字符串应为"a0\0a0\0\0",使用sizeof()函数计算数组a的占用的空间大小应为7,strlen()函数计算字符串长度是碰到第一个字符串结束符'\0'为止,且不包含'\0',所以strlen(a)为2 

执行以下代码段(程序已包含所有必需的头文件)会输出什么结果。__牛客网 (nowcoder.com)


已知一稀疏矩阵的三组元表为:(1,2,3),(1,6,1),__牛客网 (nowcoder.com)


一维:LOC(ai)=LOC(a0)+i*L  (0<=i<n)
二维 A【0..m-1】【0..n-1】
二维行开始:LOC(ai,j)=LOC(a0,0)+[i*(列+1)+j]*L
二维列开始:LOC(ai,j)=LOC(a0,0)+[j*(行+1)+i]*L

设二维数组A[0..m-1][0..n-1]按行优先顺序存储__牛客网 (nowcoder.com)


数组 A[0…5 , 0…6] 的每个元素占 5 个字节,将__牛客网 (nowcoder.com)


 数组Q[0..m-1]用来表示一个循环队列, 用front指__牛客网 (nowcoder.com)


线性表是________。__牛客网 (nowcoder.com)


两个栈的栈顶

一个在数组第一个元素,朝着数组索引增加方向增加

一个栈顶在数据最后一个元素,朝着数组索引减少方向增加

当两个栈的栈顶位置相差1时,数组被写满

 若数组S[1..n]作为两个栈S1和S2的存储空间,对任何一__牛客网 (nowcoder.com)


已知定义数组 char a[3];,以下哪个选项不能代表数组__牛客网 (nowcoder.com)


对称矩阵,只需要存一半就行了, 第一行:1个 第二行:2个 第三行:3个 ………… ………… 第八行:1~5,前5个 所以:1+2+3+4+5+6+7 再加 5 总共得:33 

设有一个 10 阶的对称矩阵 A ,采用压缩__牛客网 (nowcoder.com)


这是一个三行四列的数组

*(a+1)表示第二行的首地址,和a[1]一样。

*(a+1)+2第二行第三个数字的地址

*(*(a+1)+2)就是第二行第三个数字的值

 已知int a[3][4];则下列能表示a[1][2]元素值_迅雷笔试题_牛客网 (nowcoder.com)



先看未定义标识符p,p的左边是*,*p表示一个指针,跳出括号,由于[]的结合性大于*,所以*p指向一个大小为10的数组,即(*p)[10]。左边又有一个*号,修释数组的元素,*(*p)[10]表示*p指向一个大小为10的数组,且每个数组的元素为一个指针。跳出括号,根据右边(int *)可以判断(*(*p)[10])是一个函数指针,该函数的参数是int*,返回值是int。 

声明一个指向含有10个元素的数组的指针,其中每个元素是一个函_阿里巴巴笔试题_牛客网 (nowcoder.com)


1、int(*p)[4];------ptr为指向含4个元素的一维整形数组的指针变量(是指针)
2、int *p[4];-------定义指针数组p,它由4个指向整型数据的指针元素组成(是数组)
3、int(*)[4];--------实际上可以看作是一种数据类型。也就是第一个(int(*p)[4];)

 int (*p)[3] 中p的含义是什么?_迅雷笔试题_牛客网 (nowcoder.com)


代码段中定义了数组a,a每列三个元素,a[1][1]为5,所以指针b应指向数组中5所在地址。

由于数组中地址是连续的,b[2]应为7。

 执行以下代码段会输出什么结果。() int a[][3] =__牛客网 (nowcoder.com)



插入排序的原理:始终定义第一个元素为有序的,将元素逐个插入到有序排列之中,其特点是要不断的移动数据,空出一个适当的位置,把待插入的元素放到里面去。
选择排序的原理:每次在无序队列中“选择”出最小值,放到有序队列的最后,并从无序队列中去除该值(具体实现略有区别)。
在第 i 次排序中,前 i - 1 个元素始终是有序的,此时只需把第i个元素插入到有序的序列中即可,故代码中体现的是插入排序的思想。代码中对当前 a[i]>a[j](0<=k<i-1)是否成立进行判断,若成立则将 a[j] 往后移(即大的数排在前面,小的数排在后面),故代码中的排序原则为降序排。

插入排序:
printline("before sort:", v);
        for (int i=1; i<v.size(); i++){
                int key = v[i];
                int j = i-1;
                while (j >= 0 && v[j] > key){
                        v[j+1] = v[j];
                        j--;
                }
                v[j+1] = key;

        }
        printline("after sort:", v);
选择排序:
for(int i=0; i<v.size(); i++){
                int min = v[i]; 
                int temp;
                int index = i;
                for(int j=i+1;j<v.size();j++){
                    if(v[j] < min){ 
                        min = v[j]; 
                        index = j;
                    }       
                }       
        
                temp = v[i]; 
                v[i] = min;
                v[index]= temp;
        } 

若有以下程序段,则该程序段的功能是?_迅雷笔试题_牛客网 (nowcoder.com)


数组定义为”int a[4][5];”, 引用”*(a+1)__牛客网 (nowcoder.com)


线性结构是一个有序数据元素的集合。 其中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。

常用的线性结构有:线性表,栈,队列,双队列,数组,串。

非线性结构中各个数据元素不再保持在一个线性序列中,每个数据元素可能与零个或者多个其他数据元素发生联系。根据关系的不同,可分为层次结构和群结构。

二维数组就是一种非线性结构(因为是一对多的关系了:a[0]对应两个:a[0][0]、a[0][1])

二维数组和多维数组均不是线性结构。( )__牛客网 (nowcoder.com)


下列叙述中正确的是( )。__牛客网 (nowcoder.com)


 

 数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位__牛客网 (nowcoder.com)


实现机理是这样的:
有一组数据A=[29,6,28,20,2,24]
①第一次先排前俩,第二次排前三。。。。以此类推
②先获取A[j]的值存入一个变量中
③每次循环判断大小的目的就是为了找到A[j-1]小于e的情况
④当出现前大于e的情况,那就把大的值后移,也就是赋值给A[j]
⑤当出现前不大于e的时候(A[j-i]<e),break跳出,此时j不减减,此时j的位置就是需要e来填充的
第一趟的结果为6 29 28 20 2 24
第二趟为6 28 29 20 2 24
第三趟:  j为3,e为A[3] = 20,那么先比较的就是A[3-1]和e,其结果为A[3]被赋值为A[3-1],
而后j-- 进入A[2-1]和e的判断,同样是A[2]被赋值为A[1],
然后再判断A[0]和e,发现A[0]小于e,break退出,此时j=1,A[1]=e;end;

 经过三趟排序后,数组 A 的排列状态将是()__牛客网 (nowcoder.com)


A选项,应该是a[10]="abcdefg"
B选项,a是数组首地址不能这样赋值
C选项,*p=a,也是指针地址变量,不能这样赋值

在 C/C++ 中,若有定义 char a [10], *p__牛客网 (nowcoder.com)


  • 第0行,一个元素
  • 第1行,两个元素
  • 第2行,三个元素
  • ……第i行,i+1个元素

等差数列求和公式:Sn=na1+n(n-1)d/2    经过代入整理得出:i(i+3)/2+1个元素,由于从0开始存储,所以i(i+3)/2

将一个n×n的对称矩阵A的下三角部分按行存放在一个一维数组B__牛客网 (nowcoder.com)


二维数组在内存中也是连续存储的,他可以通过 arr[i][j]寻址是因为我们定义了这个数组有多少列,

加入有N列,这样数组寻址的时候编译器会自动得到 *(arr+(j*N)+i)所以传参数的时候列数必须指定。

所以D正确A不正确。B表示有8个指向int指针的数组,不对,而C中(*s)等价于s[]

 已知数组D的定义是int D[4][8];,现在需要把这个数_迅雷笔试题_牛客网 (nowcoder.com)


在java 中,声明一个数组时,不能直接限定数组长度,只有在创建实例化对象时,才能对给定数组长度.。

如下,1,2,3可以通过编译,4,5不行。而String是Object的子类,所以上述BCF均可定义一个存放50个String类型对象的数组。

1. String a[]=new String[50];

2. String b[];

3. char c[];

4. String d[50];

5. char e[50];


指针数组( * stings[] ):可以说成是”指针的数组”,首先这个变量是一个数组,其次,”指针”修饰这个数组,意思是说这个数组的所有元素都是指针类型,在32位系统中,指针占四个字节。

数组指针( (*strings)[] ):可以说成是”数组的指针”,首先这个变量是一个指针,其次,”数组”修饰这个指针,意思是说这个指针存放着一个数组的首地址,或者说这个指针指向一个数组的首地址。

定义语句"double * array [8]&q__牛客网 (nowcoder.com)


第一个是转移字符,第二个表示在次数输出字符串,第三个表示换行

以下程序段的运行结果是(   )。__牛客网 (nowcoder.com)


若有定义: int c[4][5],( *pc)[5]; p__牛客网 (nowcoder.com)


定义了数组s,s为数组名,代表数组的首地址,不能直接赋值,所以编译出错

 执行以下代码段会输出什么结果。() char s[5]; s__牛客网 (nowcoder.com)


循环队列的相关条件和公式: 
队尾指针是rear,队头是front,其中QueueSize为循环队列的最大长度 
1.队空条件:rear==front 
2.队满条件:(rear+1) %QueueSIze==front 
3.计算队列长度:(rear-front+QueueSize)%QueueSize 
4.入队:(rear+1)%QueueSize 
5.出队:(front+1)%QueueSize 

假设以数组Data[0..m-1]存放循环队列的元素,其头尾__牛客网 (nowcoder.com)


 

假设以行序为主序存储二维数组A=array[100][100__牛客网 (nowcoder.com) 


二维数据就是以数组为元素的数组,外面的大括号表示这个数组,里面的大括号表示数组形式的元素,只有一个数字说明元素只赋了A[0][0],A[1][0],A[2][0],其余元素都没赋值或者赋值为0,据实验表明dev和codeblock都是把其余元素赋值为0 

c中,二维数组初始化的方法是:int a[3][3]={{1__牛客网 (nowcoder.com)


下列选项中,能正确定义数组的语句是(   )。__牛客网 (nowcoder.com) 


若稀疏矩阵采用三元组表形式进行压缩存储,若要完成对三元组表进__牛客网 (nowcoder.com) 


以下选项中,正确定义二维数组的是哪个选项。()__牛客网 (nowcoder.com) 


若 GetHead 【 GetTail 【 GetHead __牛客网 (nowcoder.com) 


数组常用的两种基本操作是(    )。__牛客网 (nowcoder.com) 


在面向对象的程序设计中,关于数组,下列说法正确的有()_斐讯笔试题_牛客网 (nowcoder.com)


数组A[1..5,1..6]的每个元素占5个单元,将其按行优__牛客网 (nowcoder.com) 


执行以下代码段(程序已包含所有必需的头文件)会输出什么结果。__牛客网 (nowcoder.com) 


在下列语句中,正确的是( )。__牛客网 (nowcoder.com) 


设有下面的程序段:  char s[ ]=”china”;__牛客网 (nowcoder.com)


 

Array对象常用方法中:

不改变原数组:

1、 concat()

  • 连接两个或多个数组
  • 不改变原数组
  • 返回被连接数组的一个副本

2、join()

  • 把数组中所有元素放入一个字符串
  • 不改变原数组
  • 返回字符串

3、 slice()

  • 从已有的数组中返回选定的元素
  • 不改变原数组
  • 返回一个新数组

4、 toString()

  • 把数组转为字符串
  • 不改变原数组
  • 返回数组的字符串形式

改变原数组:

5、 pop()

  • 删除数组最后一个元素,如果数组为空,则不改变数组,返回undefined
  • 改变原数组
  • 返回被删除的元素


6、 push()

  • 向数组末尾添加一个或多个元素
  • 改变原数组
  • 返回新数组的长度

7、 reverse()

  • 颠倒数组中元素的顺序
  • 改变原数组
  • 返回该数组

8、 shift()

  • 把数组的第一个元素删除,若空数组,不进行任何操作,返回undefined
  • 改变原数组
  • 返回第一个元素的值

9、 sort()

  • 对数组元素进行排序(ascii)
  • 改变原数组
  • 返回该数组

10、 splice()

  • 从数组中添加/删除项目
  • 改变原数组
  • 返回被删除的元素

11、 unshift()

  • 向数组的开头添加一个或多个元素
  • 改变原数组
  • 返回新数组的长度

 将数组 var a=[1,2,3] 变成数组 [4,3,2,_阿里巴巴笔试题_牛客网 (nowcoder.com)


线性表的顺序存储结构是一种(  &nbs__牛客网 (nowcoder.com) 


以下能对一维数组 a 进行正确初始化的语句是()__牛客网 (nowcoder.com) 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值