数据结构与算法——每日一练(6月)

文章目录

  • 每日一练
    • 6.1
    • 6.2
    • 6.3
    • 6.4
    • 6.5
    • 6.6
    • 6.7
    • 6.8
    • 6.9
    • 6.10
    • 6.11
    • 6.12
    • 6.13
    • 6.14
    • 6.15
    • 6.16
    • 6.17
    • 6.18
    • 6.19
    • 6.20
    • 6.21
    • 6.22
    • 6.23
    • 6.24
    • 6.25
    • 6.26
    • 6.27
    • 6.28
    • 6.29
    • 6.30

每日一练

6.1

  • 对长度为 3 的顺序表进行查找。若查找第一个元素的概率为 1/2 ,查找第二个元素的概率为 1/3 ,查找第三个元素的概率为 1/6 ,则查找任一元素的平均查找长度为()。

A. 5/3

B. 2

C. 7/3

D. 4/3

【答案】A

【解析】平均查找长度为 1 × 1 2 + 2 × 1 3 + 3 × 1 6 = 5 3 1 \times \frac{1}{2} + 2 \times \frac{1}{3} + 3 \times \frac{1}{6} = \frac{5}{3} 1×21+2×31+3×61=35

6.2

  • 已知一个长度为 16 的顺序表 L ,其元素按关键字有序排列,若采用二分查找法查找一个 L 中不存在的元素,则关键字的比较次数最多是()。

A. 4

B. 5

C. 6

D. 7

【答案】B

【解析】比较次数最多为 ⌊ log ⁡ 2 n ⌋ + 1 \lfloor \log_2{n} \rfloor + 1 log2n+1

6.3

  • 下列选项中,不能构成二分查找中关键字比较序列的是()。

A. 500, 200, 450, 180

B. 500, 450, 200, 180

C. 180, 500, 200, 450

D. 180, 200, 500, 450

【答案】A

6.4

  • 在有11个元素的有序表A[1, 2, …, 11]中进行二分查找(floor((low + high) / 2)),查找元素A[11]时,被比较的元素下标依次是()。

A. 6, 8, 10, 11

B. 6, 9, 10, 11

C. 6, 7, 9, 11

D. 6, 8, 9, 11

【答案】B

【解析】第一次 ⌊ ( 1 + 11 ) / 2 ⌋ = 6 \lfloor (1 + 11) / 2 \rfloor = 6 (1+11)/2=6 。 第二次 ⌊ ( ( 6 + 1 ) + 11 ) / 2 ⌋ = 9 \lfloor ((6 + 1) + 11) / 2 \rfloor = 9 ((61)+11)/2=9 。 第三次 ⌊ ( ( 9 + 1 ) + 11 ) / 2 ⌋ = 10 \lfloor ((9 + 1) + 11) / 2 \rfloor = 10 ((91)+11)/2=10 。 第四次 11 11 11

6.5

  • 以下各DOS命令能够显示出本机DNS服务器地址的是:( )

A. ping -a

B. ipconfig -all

C. netstat

D. telnet

【答案】B

【解析】DOS命令的使用

  • ping:利用它可以检查网络是否能够连通,用好它可以很好地帮助我们分析判定网络故障
  • ifconfig all:显示或设置网络设备
  • netstat:用于查看当前基于 NETBIOS 的 TCP/IP 连接状态,通过该工具你可以 获得远程或本地的组名和机器名。
  • telnet:使用telnet命令访问远程计算机

6.6

  • 你判断下面语句,有什么作用?
GRANT update ON inventory TO joe WITH GRANT OPTION;

A. 一个系统权限被授予用户JOE

B. 一个对象权限被授予用户JOE

C. 用户JOE被授予在这个对象上的所有权限

D. 一个系统权限和一个对象权限被授予用户JOE

【答案】B

【解析】with admin option 只能在赋予 system privilege 的时使用;with grant option 只能在赋予 object privilege 的时使用

6.7

  • 设一共有 n n n 个关键字,则Hash查找法的时间复杂度是()。

A. O(1)

B. O(n)

C. O(lgn)

D. O(n^2)

【答案】A

【解析】Hash查找法是由关键字结合Hash函数和冲突处理方法直接计算出关键字在表中的位置,与表的长度 n n n 无关,其查找的时间复杂度对于 n n n 为常量级,即 O ( 1 ) O(1) O(1)

6.8

  • Hash函数有一个共同的性质,即函数值应当尽量以()取其值域的每个值。

A. 最大概率

B. 最小概率

C. 平均概率

D. 同等概率

【答案】D

6.9

  • 将 10 个元素散列到 100000 个单元的Hash表中,则()产生冲突。

A. 一定会

B. 一定不会

C. 仍可能会

D. 不能确定

【答案】C

6.10

  • 设Hash表长为 14 ,Hash函数是 H(key) = key % 11 ,表中已有数据的关键字是 15、38、61、84 共 4 个,现要将关键字为49的节点添加到表中,用平方探查法解决冲突,则放入的位置是()。

A. 8

B. 3

C. 5

D. 9

【答案】D

【解析】初始Hash表如下

0 1 2 3 4 5 6 7 8 9 10
15 38 61 84

d = H ( 49 ) = 49 m o d    11 = 5 d=H(49)=49\mod11=5 d=H(49)=49mod11=5,但该位置发生冲突,因此继续按照下列地址序列进行探查: d + 1 2 , d − 1 2 , d + 2 2 , d − 2 2 … d+1^2,d-1^2,d+2^2,d-2^2\dots d+12,d12,d+22,d22,经探查得知 d + 2 2 = 9 d+2^2=9 d+22=9 处有空位置,因此 49 49 49 存放在下标为 9 9 9 的空间。

6.11

  • 关于Hash查找以下说法不正确的有()个。 ① 采用链地址法解决冲突时,查找任一个元素的时间都是相同的。 ② 采用链地址法解决冲突时,若查找规定总是在链首,则插入任一个元素的时间都是相同的。 ③ 用链地址法解决冲突易引起堆积现象。 ④ 线性探查法不易产生堆积现象。

A. 1

B. 2

C. 3

D. 4

【答案】C

【解析】①③④错误,②正确。 如果两个元素在同一个链表中,查找时间肯定不相同,因此①不正确。 若插入规定在链首,则插入操作不需要查找插入位置即可直接进行,因此插入任何一个元素的时间均相同,因此②正确。这是相对于链表的尾插法而言的,在尾插法中,需要找到链表的尾部,因此链表的长度决定了插入元素的执行时间。 所谓堆积问题,即在Hash表的建立过程中,某些Hash地址是由冲突处理产生的,而不是由Hash函数直接产生的,这就可能造成原本Key1与Key2虽然不是同义词,但是最后却得出了相同的Hash地址。 例如,在线性探查法处理冲突的过程中,设第一个同义词占用单元d,这之后连续的若干同义词将占用Hash表的d、d+1、d+2等单元,此时随后任何d+1、d+2等单元上的Hash映射都会由于前面的同义词堆积而产生冲突,尽管随后的这些关键字并没有同义词,因此④不正确。 显然链地址法不会产生堆积现象,因为多个同义词只会占用表中的一个地址,因此③不正确。

6.12

  • 下列说法正确的是()

A. 在类方法中可用this来调用本类的类方法

B. 在类方法中调用本类的类方法时可直接调用

C. 在类方法中只能调用本类中的类方法

D. 在类方法中绝对不能调用实例方法

【答案】B

【解析】在类方法中不能使用this关键字;在类方法中可以调用其它类中的类方法;在类方法中可以通过实例化对象调用实例方法。

6.13

  • 从下面四段(A,B,C,D)代码中选择出正确的代码段()
// A
abstract class Name {
    private String name;
    public abstract boolean isStupidName(String name) {}
}
// B
public class Something {
    void doSomething() {
        private String s = "-";
        int l = s.length();
    }
}
// C
public class Something {
    public static void main(String[] args) {
        Other o = new Other();
        new Something().addOne(o);
    }
    public void addOne(final Other o) {
        o.i++;
    }
}
class Other {
    public int i;
}
// D
public class Something {
    public int addOne(final int x) {
        return ++x;
    }
}

【答案】C

【解析】A:抽象方法不能有方法体;B:方法中定义的是局部变量,不能用类成员变量修饰符private;D:final修饰为常量,常量的值不能被改变。

6.14

  • 设无向图的顶点个数为 n ,则该图最多有()条边。

A. n-1

B. n(n-1)/2

C. n(n+1)/2

D. 0

【答案】B

【解析】每个点可以和其他的 n-1 个点形成一条边,每条边被重复计算了两次,故有 n(n-1)/2 条边。

6.15

  • 含有 n 个顶点的连通无向图,其边的个数至少为()。

A. n-1

B. n

C. n+1

D. nlgn

【答案】A

【解析】连通图要求 n 个点两两互相可达,因此至少有 n-1 条边。

6.16

  • n 个节点的完全有向图含有边的数目为()。

A. n^2

B. n(n+1)

C. n/2

D. n(n-1)

【答案】D

6.17

  • ()的邻接矩阵是对称矩阵。

A. 有向图

B. 无向图

C. AOV图

D. AOE图

【答案】B

6.18

  • 对于一个具有 n 个顶点的无向图,若采用邻接矩阵表示,则该矩阵的大小是()。

A. n

B. (n-1)^2

C. n-1

D. n^2

【答案】D

6.19

  • 提供Java存取数据库能力的包是()

A. java.sql

B. java.awt

C. java.lang

D. java.swing

【答案】A

【解析】java.sql是JDBC的编程接口、java.awt和java.swing是做图像界面的类库、java.lang: Java 编程语言进行程序设计的基础类

6.20

  • 中央处理单元(CPU)的两个主要组成部分是运算器和什么。

A. 寄存器

B. 主存储器

C. 控制器

D. 辅助存储器

【答案】C

【解析】控制器:由程序计数器、指令寄存器、指令译码器、时序产生器和操作控制器组成, 它是发布命令的“决策机构”,即完成协调和指挥整个计算机系统的操作。 运算器:arithmetic unit,计算机中执行各种算术和逻辑运算操作的部件。 运算器由:算术逻辑单元(ALU)、累加器、状态寄存器、通用寄存器组等组成。 主要功能:执行所有的算术运算;执行所有的逻辑运算,并进行逻辑测试,如零值测试或两个值的比较。

6.21

  • **下列关于无向图连通性特性的叙述中,正确的是()。 **

    **I. 所有顶点的度之和为偶数 **

    **II. 边数大于顶点个数减1 **

    III. 至少有一个顶点的度为1

A. 只有I

B. 只有II

C. I和II

D. I和III

【答案】A

【解析】当图是一棵树的时候,边数刚好等于顶点个数减1,故II错。当所有顶点形成一个首尾相连的环的时候,所有顶点的度均为2,故III错。

6.22

  • **下列关于图的叙述中,正确的是()。 **

    **① 回路是简单路径 **

    **② 存储稀疏图 用邻接矩阵比邻接表更省空间 **

    ③ 若有向图中存在拓扑序列 则该图不存在回路

A. 仅①

B. 仅①、②

C. 仅③

D. 仅①、③

【答案】C

【解析】回路中可能存在既不是起点也不是终点的相同点,故①错。邻接矩阵始终占用最大空间,故②错。

6.23

  • 对有n个顶点、e条边且使用邻接表存储的有向图进行广度优先遍历,其算法时间复杂度是()。

A. O(n)

B. O(e)

C. O(n+e)

D. O(n*e)

【答案】C

6.24

  • 若用邻接矩阵存储有向图,矩阵中主对角线以下的元素均为0,则关于该图拓扑序列的结论是()。

A. 存在、且唯一

B. 存在、且不唯一

C. 存在、可能不唯一

D. 无法确定是否存在

【答案】C

6.25

  • 下列关于最小生成树的叙述中,正确的是()。

    I. 最小生成树的代价唯一

    II. 所有权值最小的边一定会出现在所有的最小生成树中

    III. 使用Prim算法从不同顶点开始得到的最小生成树一定相同

    IV. 使用Prim算法和Kruskal算法得到的最小生成树总不相同

A. 仅I

B. 仅II

C. 仅I、III

D. 仅II、IV

【答案】A

6.26

  • 编译和执行下面的程序时将输出什么
class Base {
    void test() {
        System.out.println("Base.test()");
    }
}
public class Child extends Base {
    void test() {
        System.out.println("Child.test()");
    }

    static public void main(String[] a) {
        Child anObj = new Child();
        Base baseObj = (Base) anObj;
        baseObj.test();
    }
}

A. Child.test()、Base.test()

B. Base.test()、Child.test()

C. Base.test()

D. Child.test()

【答案】D

【解析】测试代码相当于:Base baseObj = new Child();父类的引用指向子类的实例,子类又重写了父类的test方法,因此调用子类的test方法。

6.27

  • 编译和执行下面的程序时将输出什么
class Base {
    static void test() {
        System.out.println("Base.test()");
    }
}

public class Child extends Base {
    void test() {
        System.out.println("Child.test()");
        Base.test(); //Call the parent method
    }

    static public void main(String[] a) {
        new Child().test();
    }
}

A. Child.test()、Base.test()

B. Child.test()、Child.test()

C. Compilation error. Cannot override a static method by an instance method

D. Runtime error. Cannot override a static method by an instance method

【答案】C

【解析】静态方法不能在子类中被重写

6.28

  • 无向图 G = (V, E) ,其中点集 V = {a, b, c, d, e, f}, 边集 E = {(a, b), (a, e), (a, c), (b, e), (c, f), (f, d), (e, d)}。对该图进行深度优先遍历,不能得到的序列是()。

A. acfdeb

B. aebdfc

C. aedfcb

D. abecdf

【答案】D

【解析】a-b-e后下一个节点只可能是d。

6.29

  • 使用DFS算法递归地遍历一个有向无环图,并在退出递归时输出相应节点,这样得到的顶点序列是()。

A. 逆拓扑有序

B. 拓扑有序

C. 无序的

D. 都不是

【答案】A

6.30

  • 图的广度优先生成树的树高比深度优先生成树的树高()。

A. 小或相等

B. 小

C. 大或相等

D. 大

【答案】A

【解析】BFS生成树是所有生成树中树高最小的。

你可能感兴趣的:(面试题,数据结构与算法,二分查找,哈希表,深度优先搜索DFS,广度优先搜索BFS)