Java笔试题— 每天进步一点系列

Posted 落尘-001

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java笔试题— 每天进步一点系列相关的知识,希望对你有一定的参考价值。

1.设一个有序的单链表中有n个结点,现要求插入一个新结点后使得单链表仍然保持有序,则该操作的时间复杂度()
A. O(log2n)
B. O(1)
C. O(n2)
D. O(n)

单链表插入不需要移动元素,时间复杂度为O(1),但是要保持有序状态,顺序存取需要按位置访问元素时间复杂度为O(n),故选D。

2.一个栈的初始状态为空。首先将元素5,4,3,2,1 依次入栈,然后退栈一次,再将元素A,B,C,D依次入栈,之后将所有元素全部退栈,则所有元素退栈(包括中间退栈的元素)的顺序为?
A. 1DCAB2345
B. 1DCBA2345
C. 54321ABCD
D. DCBA12345

栈的基本特点就是:先进后出,将5,4,3,2,1依次入栈后,再退栈一次,取出的元素就为1,然后A,B,C,D入栈,依次出栈,顺序为DCBA2345,故选B。

3.设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5,e6依次压入栈S,一个元素出栈后即进入队列Q,若出队列的顺序为e2,e4,e3,e6,e5,e1则栈S的容量要求最小值为
A. 2
B. 3
C. 4
D. 5

出队先出e2表示e1,e2进栈后出e2(这时栈的容量最大为2),接着出e4,e3表示e3,e4进栈后出e4,e3(这时栈的容量最大为3),再出e6,e5表示e5,e6进栈后出e6,e5(这时栈的容量最大为3),最后出e1,所以答案应该是 3,故选B。

4.给定下列程序,那么执行printf("%d\\n", foo(20, 13));的输出结果是()

int foo(int x, int y){
if (x <= 0 || y <= 0)
return 1;
return 3 * foo( x-6, y/2 );
}

A. 3
B. 9
C. 27
D. 81

36 < 20 < 46,递归 4层。
log13 < log16 = 4;
所以结果为 3^4 = 81。故选D。

5.在具有 2n 个结点的完全二叉树中,叶子结点个数为( )
A. n
B. n+1
C. n-1
D. n/2

完全二叉树是指除最后一层外,每一层上的结点数均达到最大值,在最后一层上只缺少右边的若干结点。根据完全二叉树性质,如果共 2n 个结点,从根结点开始按层序用自然数 1 , 2 ,…, 2n 给结点编号,则编号为 n 的结点左子结点编号为 2n ,因此叶子结点编号为 n+1,n+2, … ,2n 。故叶子结点个数为 n ,故答案为 A 。

6.有权值分别为11,8,6,2,5的叶子结点生成一棵哈夫曼树,它的带权路径长度为()。
A. 24
B. 71
C. 48
D. 53

通过哈夫曼树的构造规则构建出如下的一棵树,在第三层的节点有2 5 在第二层节点的有 6 8 11 。
23+53+62+82+11*2=71
故答案为B。

7.下述二叉树中,哪一种满足性质:从任一结点出发到根的路径上所经过的结点序列按其关键字有序()
A. 二叉排序树
B. 哈夫曼树
C. AVL树
D. 堆

A,二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
所以可以看出二叉排序树只有中序遍历结果是一个有序序列。
B,哈夫曼树:当用 n 个结点(都做叶子结点且都有各自的权值)试图构建一棵树时,如果构建的这棵树的带权路径长度最小,称这棵树为“最优二叉树”,有时也叫“赫夫曼树”或者“哈夫曼树”。根据赫夫曼树的结构特点我们可以知道,在赫夫曼树中所有的关键字只出现在叶结点上,其非叶结点上并没有关键字值。
C,avl树(平衡二叉树又称AVL树。):本质上是带了平衡功能的二叉查找树(二叉排序树,二叉搜索树)。所以也不能满足需求。
D,堆:是一种特殊的完全二叉树,例如:堆总是满足下列性质:
堆中某个节点的值总是不大于或不小于其父节点的值;
堆总是一棵完全二叉树。
最终得到的正是一个从任一结点出发到根的路径上所经过的结点序列按其关键字有序的树状结构。
所以本题答案为D。

8.为提高散列(Hash)表的查找效率,可以采取的正确措施是( )。
Ⅰ.增大装填(载)因子
Ⅱ.设计冲突(碰撞)少的散列函数
Ⅲ.处理冲突(碰撞)时避免产生聚集(堆积)现象
A. 仅Ⅰ
B. 仅Ⅱ
C. 仅Ⅰ、 Ⅱ
D. 仅Ⅱ、 Ⅲ

影响散列表性能:

  • 散列表是否均匀;
  • 处理冲突的方法:链地址法处理冲突不会产生任何堆积,因而具有更加平均查找性能;
  • 散列表的装填因子:填入表中记录越多,装填因子越大,产生冲突的可能性越大
    故本题答案为D。

9.将整数数组(7-6-3-5-4-1-2)按照堆排序的方式原地进行升序排列,请问在第一轮排序结束之后,数组的顺序是()。
A. 2-6-3-5-4-1-7
B. 6-2-3-5-4-1-7
C. 6-5-3-2-4-1-7
D. 1-5-3-2-4-6-7
E. 5-4-3-2-1-6-7
F. 5-1-3-2-4-6-7

原数组已经是一个大顶堆,可直接开始排序。
(大顶堆:每个节点的值都不小于自己两个左右子节的完全二叉树)
每轮输出堆顶元素后,以堆中最后一个元素代替之(由于此题要求原地排序,即不产生额外的空间,堆顶元素与最后一个元素交换)。再将新的顶点元素不断与其子节点中大于该元素的较大者交换,直到该元素大于其左右两个子节点,或成为叶子节点。此时将剩余元素调整成一个新的大顶推。
由此得出,第一轮结束后的顺序是:6,5,3,2,4,1,7。故选C。

10.要连通具有 n 个顶点的有向图,最少需要()条边。
A. n+l
B. n-l
C. 2n
D. n

有向图有三种连通概念,强连通,单相连通和弱连通,这个题目的答案对应的是强连通,而一边连通有向图定义为单相连通

以上是关于Java笔试题— 每天进步一点系列的主要内容,如果未能解决你的问题,请参考以下文章

Java笔试题— 每天进步一点系列

计算机网络笔试题附解析 ——每天学一点,天天都进步

计算机网络笔试题附解析 ——每天学一点,天天都进步

计算机网络笔试题附解析 ——每天学一点,天天都进步

计算机网络笔试题附解析 ——每天学一点,天天都进步

计算机网络笔试题附解析 ——每天学一点,天天都进步