关于java:面试中常见的数据结构与算法题整理想当架构师数据结构与算法不过关可不行数组字符串共60题

43次阅读

共计 6372 个字符,预计需要花费 16 分钟才能阅读完成。

【Java 架构师面试网】收集整理了一些 Java 面试的常见问题,这些问题可能会在你下一次技术面试中遇到。想成为 Java 架构师,这些都是不可避免也是必须要把握的哦,对于其余模块的面试题,我后续也将独自分享面试问题和答案。成为 Java 架构师的这条路道阻且艰,然而既然抉择了远方就是抉择了风雨兼程,心愿大家都能早日圆本人的架构师梦,同样也心愿我本人能够~
网站近期在备案和迁徙服务器,临时无奈关上,先关注一波公众号吧~

数组(共 30 题,含答案)

1. 矩阵中的行列数能够是不相等的,这样的说法正确吗?A

A. 正确
B. 不正确

2. 对矩阵压缩存储是为了(D)

A. 不便运算
B. 不便存储
C. 进步运算速度
D. 缩小存储空间

3. 一维数组与线性表的区别是(A)。

A. 前者长度固定, 后者长度可变
B. 后者长度固定, 前者长度可变
C. 两者长度均固定
D. 两者长度均可变

4. 在以下的叙述中,正确的是。B

A. 线性表的顺序存储构造优于链表存储构造
B. 二维数组是其数据元素为线性表的线性表
C. 栈的操作形式是先进先出
D. 队列的操作形式是先进后出

5. 顺序存储形式插入和删除时效率太低,因而它不如链式存储形式好。B

A.T
B.F

6. 数组是一种线性构造, 因而只能用来存储线性表(B)

A. 对
B. 错

**7. 设有一个二维数组 Am,假如 A0 寄存地位在 644(10),A2 寄存地位在 676(10),每个元素占一个空间,问 A[3]3 寄存在什么地位?C
脚注 (10) 示意用 10 进制示意 **

A.688
B.678
C.692
D.696

8. 定义了一维 int 型数组 a[10] 后,上面谬误的援用是(C)

A.a[0] = 1;
B.a[0] = 5*2;
C.a[10] = 2;
D.a[1] = a[2] * a[0];

9. 在一个长度为 n 的程序表中删除第 i 个元素,要挪动_个元素。如果要在第 i 个元素前插入一个元素,要后移_个元素。(A)

A.n-i,n-i+1
B.n-i+1,n-i
C.n-i,n-i
D.n-i+1,n-i+1

10. 已知 10*12 的二维数组 A,以行序为主序进行存储,每个元素占 1 个存储单元,已知 A1 的存储地址为 420,则 A5 的存储地址为(C)

A.470
B.471
C.472
D.473

11. 取线性表的第 i 个元素的工夫同 i 的大小无关。(B)

A.T
B.F

12. 若要定义一个具备 5 元素的整型数组,以下谬误的定义语句是(D)。

A.int a[5] = {0};
B.int a[] = {0, 0, 0, 0, 0};
C.int a[2+3];
D.int i = 5, a[i];

13. 长度为 n 的非空程序表,若在第 i 个地位插入新的元素 X,则 i 的取值范畴是 1≤i≤n+1,须要挪动的元素个数为(D)。

A.i
B.n-i-1
C.n-i
D.n-i+1

14. 设有一个 10 阶的对称矩阵 A,采纳压缩存储形式,以行序为主存储,a11 为第一元素,其存储地址为 1,每个元素占一个地址空间,则 a85 的地址为(B)。

A.13
B.33
C.18
D.40

15. 设一维数组中有 n 个数组元素,则读取第 i 个数组元素的均匀工夫复杂度为(C)。

A.O(n)
B.O(nlog2n)
C.O(1)
D.O(n2)

16. 定义语句 ”double * array [8]” 的含意正确的是(B)。

A.array 是一个指针,它指向一个数组,数组的元素时是双精度实型
B.array 是一个数组,数组的每一个元素是指向双精度实型数据的指针
C.C 语言中不容许这样的定义语句
D. 以上都不对

17. 有一个用数组 C[1..m]示意的环形队列,m 为数组的长度。假如 f 为队头元素在数组中的地位,r 为队尾元素的后一地位(按顺时针方向)。若队列非空,则计算队列中元素个数的公式应为?(A)

A.(m+r-f)mod m
B.r-f
C.(m-r+f) mod m
D.(m-r-f) mod m
E.(r-f) mod m
F. 须要判断边界

18.For the following Java or C# code(3 Points),What will my Array32 returns?

int [][] myArray3 = 
new int[3][]{new int[3]{5,6,2}, 
new int[5]{6,9,7,8,3}, 
new int[2]{3,2}
}; 

(D)

A.9
B.2
C.6
D.Overflow

19. 线性表是 A。

A. 一个无限序列,能够为空
B. 一个无限序列,不能够为空
C. 一个有限序列,能够为空
D. 一个有限序列,不能够为空

20. 将一个 A[1..100,1..100]的三对角矩阵, 按行优先存入一维数组 B[1..298]中,A 中元素 A6665 (即该元素下标 i =66,j=65), 在 B 数组中的地位 K 为 (B) 供选择的答案:

A.198
B.195
C.197

21. 设 A 是 n * n 的对称矩阵,将 A 的对角线及对角线上方的元素以列为主的秩序寄存在一维数组 B[1..n(n+1)/2]中,对上述任一元素 aij (1≤i,j≤n,且 i≤j)在 B 中的地位为(B)

A.i(i-1)/2+j
B.j(j-1)/2+i
C.j(j-1)/2+i-1
D.i(i-1)/2+j-1
**
22. 下列给定程序中,函数 fun 的性能是: 求 ss 所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参 n 所指的变量中。ss 所指字符串数数组中共有 M 个字符串,且串长小于 N。
请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的后果。(C)
试题程序。**

#define M 5
#define N 20
int fun(char(* ss)[N], int *n)
{
    int i, k = 0, len = N;
    for (i = 0; i < ______; i++)
    {len = strlen(ss[i]);
        if (i == 0)
            *n = len;
        if (len ____ * n)
        {
            *n = len;
            k = i;
        }
    }
    return (_____);
}
main( )
{char ss[M][N] = {"shanghai", "guangzhou", "beijing", "tianjing", "chongqing"};
int n, k, i;
printf("\nThe originalb stringsare:\n");
for (i = 0; i < M; i++)
puts(ss[i]);
k = fun(ss, &n);
printf("\nThe length of shortest string is: % d\n", n);
printf("\nThe shortest string is: % s\n", ss[k]);
}

A.N,<,k
B.N,>,k
C.M,<,k
D.M,>,k

23. 数组 A[0…5,0…6] 的每个元素占 5 个字节,将其按列优先秩序存储在起始地址为 1000 的内存单元中,则元素 A[5,5] 的地址为(A)

A.1175
B.1180
C.1205
D.1210

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

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

25. 若对 n 阶对称矩阵 A(下标从 1,1 开始)以行序为主序形式将其下三角形的元素 (包含主对角线上所有元素) 顺次寄存于一维数组 B[1…(n(n+1))/2]中, 则在 B 中确定 aij (i<j)的地位 k 的关系为(B)

A.i*(i-1)/2+j
B.j*(j-1)/2+i
C.i*(i+1)/2+j
D.j*(j+1)/2+i

26. 优先级队列和有序数组的一个区别是(A)

A. 最低优先级别的数据项不能从数组中轻易的提取进去,而在优先级队列中能够。
B. 数组必须是有序的,而优先级队列不须要。
C. 最高优先级的数据项能够很容易地从优先级队列中提取进去,而有序数组不行。
D. 其余三个选项都是。

27.【多选】数组 ARR=[1,2,3,4,5], 以下返回值为 5 的是(B)

A.arr.push()
B.arr.pop()
C.arr.shift()
D.arr.unshift()

28.【多选】以下能对一维数组 a 进行正确初始化的语句是(BC)

A.int a[10]=(0, 0, 0, 0, 0);
B.int a[10]={};
C.int a[]={0};
D.int a[10]={10*a};

29.【多选】选项代码中能正确操作数组元素的是(AB)

int main(){int a[N][N]={{0,0},{0,0}};
  for(int i=0;i<N;i++){for(int j=0;j<N;j++){
       // 拜访二维数组 a 的值
       // 选项代码
      }
    }
}

A.((a+i)+j)=1
B.*(a[i]+j)=1
C.**(a+i)[j]=1
D.*((a+i)+j)=1

30.【多选】在一个有 8 个 int 数据的数组中,随机给出数组的数据,找出最大和第二大元素肯定须要进行几次比拟(B)

A.8
B.9
C.10
D.11

字符串(共 30 题,含答案)

1. 为查找某一特定单词在文本中呈现的地位,可利用的串运算是(D)

A. 插入
B. 删除
C. 串联接
D. 子串定位

2. 字符串的长度是指(C)。

A. 串中不同字符的个数
B. 串中不同字母的个数
C. 串中所含字符的个数
D. 串中不同数字的个数

3. 子串“ABC”在主串“AABCABCD”中的地位为 2(下标从 0 开始)。(B)

A. 正确
B. 谬误

4. 上面对于串的叙述中,哪一个是不正确的?(B)

A. 串是字符的无限序列
B. 空串是由空格形成的串
C. 模式匹配是串的一种重要运算
D. 串既能够采纳顺序存储,也能够采纳链式存储

5. 串的长度是指(B)

A. 串中所含不同字母的个数
B. 串中所含字符的个数
C. 串中所含不同字符的个数
D. 串中所含非空格字符的个数

6. 以下数据结构中, 哪一个是线性构造(D)?

A. 狭义表
B. 二叉树
C. 稠密矩阵
D. 串

7. 若有以下程序

main( ) 
{ 
    char c1,c2;
    c1 ='C'+'8'-'3';
    c2 ='9'-'0';
    printf("%c %d\n",c1,c2);
}

则程序的输入后果是(B)

A.H’9′
B.H 9
C.F’9′
D. 表达式不非法输入无定值

**
8. 设串 s1=’ABCDEFG’,s2=’PQRST’,函数 con(x,y) 返回 x 和 y 串的连贯串,subs(s, i, j) 返回串 s 的从序号 i 开始的 j 个字符组成的子串,len(s) 返回串 s 的长度,则 con(subs(s1, 2, len(s2)), subs(s1, len(s2), 2)) 的后果串是?(本题序号从 1 开始。)(D)**
9.
A.BCDEF
B.BCDEFG
C.BCPQRST
D.BCDEFEF

9. 设 S 为一个长度为 n 的字符串, 其中的字符各不相同, 则 S 中的互异的非平庸子串 (非空且不同于 S 自身) 的个数为(D)

A.2n-1
B.n²
C.(n²/2)+(n/2)
D.(n²/2)+(n/2)-1
E.(n²/2)-(n/2)-1
F. 其余状况

10. 设有两个串 S1 和 S2, 求 S2 在 S1 中首次呈现的地位的运算称作(C)

A. 求子串
B. 判断是否相等
C. 模型匹配
D. 连贯

11. 串中任意个字符组成的子序列称为该串的子串。(B)

A. 正确
B. 谬误

12. 判断下列说法是否正确:设有两个串 S1 和 S2, 求 S2 在 SI 中首次呈现地位的运算称为求子串。(B)

A. 正确
B. 谬误

13. 由 4 个“1”和 4 个“0”组成的 8 位二进制补码,能示意的最小整数是(C)

A.-125
B.-32
C.-121
D.-3

14. 字符串”qiniu”依据程序不同有多少种排列组合的形式?(C)

A.96
B.72
C.60
D.24

15. 不能所字符串“Good!”寄存到数组 s 中的代码是(C)。

A.char s[8] = {‘G’,’o’,’o’,’d’,’!’, ‘0’};
B.char s[8];
strcpy(s, “Good!”);
C.char s[8];
s = “Good!”;
D.char s[8] = “Good!”;

16. 请问在 64 位平台机器下 sizeof(string_a),sizeof(string_b)大小别离是(A)

1.char string_a=(char )malloc(100*sizeof(char));
2.char string_b[100];
A.8 100
B.100 8
C.100 100
D.8 8

17. 哈弗曼编码是一种无损二进制熵编码算法,其加权门路长度最小,字符串“alibaba”的二进制哈弗曼编码有_位(bit)(C)

A.11
B.12
C.13
D.14

18. 以下不属于字符串的办法的是?(C)

A.split
B.slice
C.reverse
D.Contact

19. 串是一种非凡的线性表,其特殊性体现在(B)

A. 能够顺序存储
B. 数组元素是一个字符
C. 能够间断存储
D. 数据元素能够是多个字符

20. 对字符串“mabnmnm”的二进制进行哈夫曼编码有多少位(B)

A.12
B.13
C.14
D.15

21. 设语句定义 char a[80]= ” 01230789 “;,则 sizeof(a)和 strlen(a)的值别离为(A)。

A.80 和 9
B.80 和 7
C.80 和 5
D.80 和 6

22. 在给定文件中查找与设定条件相符字符串的命令为?(C)

A.find
B.gzip
C.grep
D.Sort

23. 字符串′ababaabab′的 nextval 为(A)

A.(0,1,0,1,0,4,1,0,1)
B.(0,1,0,1,0,2,1,0,1)
C.(0,1,0,1,0,0,0,1,1)
D.(0,1,0,1,0,1,0,1,1)

24. 上面程序段的输入后果是(D)

char p1 =”123”, p2 =”ABC”, str[50] =“xyz”;
strcpy(str + 2, strcat(p1, p2));
printf(“%sn”, str);
A.xyz123ABC
B.z123ABC
C.xy123ABC
D. 出错

25. 用 0 – 9 这 10 个数字组成一个首尾相连的字符串,每个数字能够反复呈现屡次,并且字符串中任意 2 个数字都相邻呈现过。此字符串最小长度是(D)

A.47
B.48
C.49
D.50

26. 以下程序段的输入后果是(A)

char s[]="\\123456\123456\t";
printf("%d\n",strlen(s));

A.12
B.13
C.16
D. 以上都不对

27. 上面对于字符串的形容正确的是:【多选】(BC)

A. 通过 String s1=new String(“abc”)和 String s2=”abc”,则 s1==s2 为 true。
B.”abc”+”def” 则会创立三个字符串对象,第三个是 ”abcdef”。也就是说,在 Java 中对字符串的所有操作,都会产生一个新的字符串对象。
C.StringBuffer 是线程平安的,它比 String 快。
D.StringBuilder 是线程平安的,它比 String 快

**28.【多选】有如下语句序列:
char str[10];cin>>str;
当从键盘输入”I love this game”时,str 中的字符串是(D)**
A.”I love this game”
B.”I love thi”
C.”I love”
D.”I”

29.【多选】String str = new String(“abc”),“abc”在内存中是怎么调配的?(AC)
A. 堆
B. 栈
C. 字符串常量区
D. 寄存器

30.【多选】在下列表述中,(ABD)是谬误的
A. 含有一个或多个空格字符的串称为空串
B. 对 n(n>0) 个顶点的网, 求出权最小的 n - 1 条边便可形成其最小生成树
C. 抉择排序算法是不稳固的
D. 均衡二叉树的左右子树的结点数之差的绝对值不超过 1

好啦,这就是明天分享的面试题了,其实在整顿这篇推送的时候有在想面试题的话,到底是把题目和答案离开好一点还是像当初这样间接展现,如果是离开的话能够后面是题目,文章结尾对立给出答案,这样的话能够给大家肯定工夫自我思考,如果你有什么好的想法或者倡议能够评论或者后盾私聊我哦~

嗨,你好呀,将来的架构师,本文由 Java 架构师面试网 www.javajiagoushi.com 收集整理并进行编辑公布,谢谢大家的反对~

正文完
 0