计算机数据结构

1.

若查找每个元素的概率相等,则在长度为n的顺序表上查找任一元素的平均查找长度为( )。

A

n

B

n+1

C

(n-1)/2

D

n+1)/2

参考答案

D

2.

假定一棵三叉树的结点数为50,则它的最小高度为( )。

A

3

B

4

C

5

D

6

参考答案

C

3.

对于一个有向图,若一个顶点的度为k1,出度为k2,则对应邻接表中该顶点单链表中的边结点数为( )

A

k1

B

k2

C

k1-k2

D

k1+k2

参考答案

B

4.

孩子兄弟表示法中,若要访问结点x的第i个孩子,则要先从firstchild域找到第1个孩子结点,然后沿着孩子结点的nextsibling域连续走( )步,便可找到x的第i个孩子。

A

1

B

2

C

i-1

D

i

参考答案

C

5.

已知图G的邻接表如下图所示,其从v1顶点出发的深度优先搜索序列为( )。

A

123654

B

123456

C

123456

D

142356

参考答案

A

6.

输出堆顶元素之后,( )以堆中最后一个元素替代之。

A

根节点的左孩子

B

根节点

C

最后一个叶子节点

D

最后一个非终端节点

参考答案

B

7.

以下三个选项中DAG(有向无环图)是( )。

A

B

C

参考答案

B

8.

若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为( (1<=i<=n+1)

A

O(logn)

B

O(1)

C

O(n)

D

O(n2)

参考答案

C

9.

在具有n个单元的顺序存储的循环队列中,假定frontrear分别为队头指针和队尾指针,则判断队满的条件为( )

A

rear%n= = front

B

(front+l)%n= = rear

C

rear%n -1= = front

D

(rear+l)%n= = front

参考答案

D

10.

稀疏矩阵一般的压缩存储方法有两种,即( )

A

二维数组和三维数组

B

三元组和散列

C

三元组和十字链表

D

散列和十字链表

参考答案

C

11.

在一个长度为n的顺序表中删除第i个元素(0

A

n-i

B

n-i+l

C

n-i-1

D

i

参考答案

A

12.

算法分析的两个主要方面是( )。

A

空间复杂度和时间复杂度

B

正确性和简明性

C

可读性和文档性

D

数据复杂性和程序复杂性

参考答案

A

13.

设单链表中指针p指向结点m,若要删除m之后的结点(若存在),则需修改指针的操作为( )

A

p->next=p->next->next;

B

p=p->next;

C

p=p->next->next;

D

p->next=p;

参考答案

A

14.

在一棵平衡二叉排序树中,每个结点的平衡因子的取值范围是( )

A

-1~1

B

-2~2

C

1~2

D

0~1

参考答案

A

15.

最优二叉树(赫夫曼树)、最优查找树均为平均查找路径长度 

 最小的树,其中对最优查找树,n表示( )。

A

叶子数

B

分支节点

C

节点总数

D

度为2的结点数

参考答案

A

16.

数据在计算机存储器内表示时,物理地址与逻辑地址不相同的,称之为( )。

A

存储结构

B

逻辑结构

C

链式存储结构

D

顺序存储结构

参考答案

C

17.

3个结点所构成的二叉树有( )种形态。

A

3

B

4

C

5

D

6

参考答案

C

18.

设语句x++的时间是单位时间,则以下语句的时间复杂度为( )。

for(i=1; i<=n; i++)

for(j=i; j<=n; j++)

x++;

A

B

C

D

参考答案

B

19.

若一个图中包含有k个连通分量,若要按照深度优先搜索的方法访问所有顶点,则必须调用( )次深度优先搜索遍历的算法。

A

k

B

1

C

k-1

D

k+1

参考答案

A

20.

若对n个元素进行归并排序,则进行归并的趟数为( )。

A

n

B

n-1

C

n/2

D

参考答案

D

21.

在双向循环链表中,在p所指的结点之后插入s指针所指的结点,其操作是( )。

A

p->next=s; s->prior=p; p->next->prior=s;s->next=p->next;

B

s->prior=p; s->next=p->next; p->next=s; p->next->prior=s;

C

p->next=s; p->next->prior=s; s->prior=p; s->next=p->next;

D

s->prior=p; s->next=p->next; p->next->prior=s; p->next=s;

参考答案

D

22.

线性表采用链式存储时,其地址( )。

A

必须是连续的

B

一定是不连续的

C

部分地址必须是连续的

D

连续与否均可以

参考答案

D

23.

向一个栈顶指针为hs的链栈中插入一个s结点时,应执行( )

A

hs->next=s;

B

s->next=hs; hs=s;

C

s->next=hs->next;hs->next=s;

D

s->next=hs; hs=hs->next;

参考答案

B

24.

在一棵二叉树上第4层的结点数最多为( )。

A

2

B

4

C

6

D

8

参考答案

D

25.

稀疏矩阵一般的压缩存储方法有两种,即( )。

A

二维数组和三维数组

B

三元组和散列

C

三元组和十字链表

D

散列和十字链表

参考答案

C

26.

下面是求连通网的最小生成树的prim算法:集合VTET分别放顶点和边,初始为VT为网中任意一点,ET为空,下面步骤重复n-1: a:选i属于VTj不属于VT,且(ij)上的权最小;b:(

A

顶点i加入VT,(i,j)加入ET

B

顶点j加入VT,(i,j)加入ET

C

顶点j加入VT,(i,j)从ET中删去

D

顶点i,j加入VT,(i,j)加入ET

参考答案

B

27.

在具有n个单元的顺序存储的循环队列中,假定frontrear分别为队头指针和队尾指针,则判断队空的条件为( )

A

rear%n= = front

B

front+l= rear

C

rear= = front

D

(rear+l)%n= front

参考答案

C

28.

下面是求连通网的最小生成树的prim算法:集合VTET分别放顶点和边,初始为VT为网中任意一点,ET为空,下面步骤重复n-1: a:选i属于VTj不属于VT,且(ij)上的权最小;b:顶点j加入VT,(i,j)加入ET;最后:( )。

A

ET 中为最小生成树

B

不在ET中的边构成最小生成树

C

ET中有n-1条边时为生成树,否则无解

D

ET中无回路时,为生成树,否则无解

参考答案

A

29.

广义表A=a),则表尾为( )。

A

a

B

(( ))

C

空表

D

(a)

参考答案

C

30.

在一个链队列中,假定frontrear分别为队首和队尾指针,则删除一个结点的操作为( )。

A

front=front->next

B

rear=rear->next

C

rear=front->next

D

front=rear->next

参考答案

A

31.

以下关于线性表的说法不正确的是( )

A

线性表中的数据元素可以是数字、字符、记录等不同类型。

B

线性表中包含的数据元素个数不是任意的。

C

线性表中的每个结点都有且只有一个直接前趋和直接后继。

D

存在这样的线性表:表中各结点都没有直接前趋和直接后继。

参考答案

C

32.

在对n个元素进行冒泡排序的过程中,至少需要( )趟完成。

A

1

B

n

C

n-1

D

n/2

参考答案

A

33.

用顺序存储的方法将完全二叉树中的所有结点逐层存放在数组中R[1..n],结点R[i]若有左孩子,其左孩子的编号为结点( )。

A

R[2i+1]

B

R[2i]

C

R[i/2]

D

R[2i-1]

参考答案

B

34.

欲实现任意二叉树的后序遍历的非递归算法而不必使用栈,最佳方案是二叉树采用( )存储结构。

A

三叉链表

B

广义表

C

二叉链表

D

顺序

参考答案

A

35.

在一个单链表中,已知q结点是p结点的前趋结点,若在qp之间插入s结点,则须执( )。

A

s->next=p->next; p->next=s;

B

q->next=s; s->next=p;

C

p->next=s->next; s->next=p;

D

p->next=s; s->next=q;

参考答案

B

36.

平衡二叉树的平衡因子的取值不可能是( )。

A

1

B

-1

C

0

D

2

参考答案

D

37.

在对n个元素进行堆排序的过程中,空间复杂度为( )。

A

O(1)

B

O(log2n)

C

O(n2)

D

O(nlog2n)

参考答案

A

38.

设有一个栈,元素的进栈次序为a, b, c, d, e,下列是不可能的出栈序列( )

A

a, b, c, d, e

B

b, c, d, e, a

C

e, a, b, c, d

D

e, d, c, b, a

参考答案

C

39.

弗罗伊德(Floyd)算法时间复杂度是( )。

A


 

B


 

C


 

D


 

参考答案

A

40.

已知如图所示的有向图,请给出该图的强连通分量的个数为( )。

A

2

B

3

C

4

D

5

参考答案

B

41.

下面叙述正确的是( )。

A

二叉树是特殊的树

B

二叉树等价于度为2的树

C

完全二叉树必为满二叉树

D

二叉树的左右子树有次序之分

参考答案

D

42.

在对n个元素进行快速排序的过程中,平均情况下的空间复杂度为( )。

A

O(1)

B

O(log2n)

C

O(n2)

D

O(nlog2n)

参考答案

D

43.

数据在计算机内有链式和顺序两种存储方式,在存储空间使用的灵活性上,链式存储比顺序存储要( )。

A

B

C

相同

D

不好说

参考答案

B

44.

在顺序表中,只要知道( ),就可在相同时间内求出任一结点的存储地址。

A

基地址

B

结点大小

C

向量大小

D

基地址和结点大小

参考答案

D

45.

线索二叉树是一种( )结构。

A

逻辑

B

逻辑和存储

C

物理

D

线性

参考答案

C

46.

计算机算法指的是( )。

A

计算方法

B

排序方法

C

解决问题的有限运算序列

D

调度方法

参考答案

C

47.

在一棵度为3的树中,度为3的结点个数为2,度为2 的结点个数为1,则度为0的结点个数为( )

A

4

B

5

C

6

D

7

参考答案

C

48.

通常对数组进行的两种基本操作是( )。

A

建立与删除

B

索引和修改

C

查找和修改

D

查找与索引

参考答案

C

49.

设哈希表长为14,哈希函数是H(key)=key%11,表中已有数据的关键字为15386184共四个,现要将关键字为49的结点加到表中,用二次探测再散列法解决冲突,则放入的位置是( )

A

8

B

3

C

5

D

9

参考答案

D

50.

对于一个具有n个顶点的无向连通图,它包含的连通分量的个数为( )

A

0

B

1

C

n

D

n+1

参考答案

B

51.

在一个具有n个单元的顺序栈中,假定以地址低端(即0单元)作为栈底,以top作为栈顶指针,当做出栈处理时,top变化为( )

A

top不变

B

top=0

C

top--

D

top++

参考答案

C

52.

数据结构只是研究数据的逻辑结构和物理结构,这种观点( )。

A

正确

B

错误

C

前半句对,后半句错

D

前半句错,后半句对

参考答案

B

53.

在一个具有n个顶点和e条边的有向图的邻接矩阵中,表示边存在的元素个数为( )。

A

n

B

n*e

C

e

D

2e

参考答案

C

54.

在一个具有n个顶点和e条边的无向图的邻接表中,边结点的个数为( )

A

n

B

n*e

C

e

D

2e

参考答案

D

55.

线索二叉树中,结点p没有左子树的充要条件是( )。

A

p->lc==NULL

B

p->ltag==1

C

p->ltag==1 且p->lc==NULL

D

其他三项都不对

参考答案

B

56.

在稀疏矩阵的带行指针向量的链接存储中,每个结点包含有( )个域

A

3

B

4

C

5

D

6

参考答案

B

57.

( )运算中,使用顺序表比链表好。

A

插入

B

删除

C

根据序号查找

D

根据元素值查找

参考答案

C

58.

在对n个元素进行简单选择排序的过程中,需要进行( )趟选择和交换。

A

n

B

n+1

C

n-1

D

n/2

参考答案

C

59.

若对n个元素进行直接插入排序,在进行第i趟排序时,假定元素r[i+1]的插入位置为r[j],则需要移动元素的次数为( )。

A

j-i

B

i-j-1

C

i-j

D

i-j+1

参考答案

D

60.

建堆的过程就是一个反复筛选的过程。筛选只需从哪个元素开始。( )。

A

B

C

1

D

参考答案

A

1.

对下图所示森林

C)的前序序列:LMPQRNO,后序序列:QRPMNOL

正确

错误

参考答案

错误

2.

二叉树中除叶结点外, 任一结点X,其左子树根结点的值小于该结点(X)的值;其右子树根结点的值该结点(X)的值,则此二叉树一定是二叉排序树。

正确

错误

参考答案

错误

3.

任一查找树(二叉查找树)的平均查找时间都小于用顺序查找法查找同样结点的线性表的平均查找时间。(

正确

错误

参考答案

错误

4.

对无序表用折半查找比顺序查找快。(

正确

错误

参考答案

错误

5.

二叉树中每个结点的两棵子树是有序的。(

正确

错误

参考答案

正确

6.

对于无向图来说,若深度优先遍历过程中遇到回边(即指向已访问过的顶点的边),则必定存在环。

正确

错误

参考答案

正确

7.

对一棵二叉排序树按前序方法遍历得出的结点序列是从小到大的序列。 ( )

正确

错误

参考答案

错误

8.

十字链表是将有向图的正邻接表和逆邻接表结合起来得到的一种链表。( )

正确

错误

参考答案

正确

9.

线索二叉树是一种逻辑结构。(

正确

错误

参考答案

错误

10.

广义表不能递归定义。(

正确

错误

参考答案

错误

11.

线性结构中,每一个结点都至少有一个直接前驱和一个直接后继。

正确

错误

参考答案

错误

12.

查找表由同一类型的数据元素构成的集合。(

正确

错误

参考答案

正确

13.

考虑到交通网的有向性,直接讨论的是带权有向图的最短路径问题,但解决问题的算法也适用于无向图。

正确

错误

参考答案

正确

14.

哈希函数是从关键字集合到地址集合的映象。(

正确

错误

参考答案

正确

15.

在一般情况下,采用压缩存储之后,对称矩阵是所有特殊矩阵中存储空间节约最多的。(

正确

错误

参考答案

错误

16.

从有向图上某个顶点v 出发的遍历,在DFS(v)结束之前出现一条从顶点u到顶点v的回边,由于u 在生成树上是v的子孙,则有向图必定存在包含顶点vu的环。

正确

错误

参考答案

正确

17.

排序的稳定性是指排序算法中的比较次数保持不变,且算法能够终止。(

正确

错误

参考答案

错误

18.

n个顶点的连通图至少n-1条边。(

正确

错误

参考答案

正确

19.

由二叉树的先序序列和后序序列可以唯一确定一颗二叉树。(

正确

错误

参考答案

错误

20.

Dijkstra最短路径算法从源点到其余各顶点的最短路径的路径长度按递增次序依次产生。(

正确

错误

参考答案

正确

21.

树的存储有多种方式,既可以采用顺序存储结构,也可以采用链式存储结构。(

正确

错误

参考答案

正确

22.

若二叉排序树非空,则新结点的值和根结点比较,若小于根结点,则插入到右子树;否则插入到左子树。(

正确

错误

参考答案

错误

23.

数组是同类型值的集合。(

正确

错误

参考答案

错误

24.

邻接多重表每一条边用一个结点表示,6个域组成。

正确

错误

参考答案

正确

25.

双亲法表示树结构,若求某结点的孩子结点时,则需要查询整个数组。(

正确

错误

参考答案

正确

26.

哈夫曼树一定是完全二叉树。(

正确

错误

参考答案

正确

27.

二叉排序树删除一个结点后,仍是二叉排序树。(

正确

错误

参考答案

正确

28.

稀疏矩阵压缩存储后,不会失去随机存取功能。(

正确

错误

参考答案

错误

29.

哈希函数的选取平方取中法最好。(

正确

错误

参考答案

错误

30.

以行为主序或以列为主序对于多维数组的存储没有影响。(

正确

错误

参考答案

正确

31.

满二叉树也是完全二叉树。(

正确

错误

参考答案

正确

32.

克鲁斯卡尔算法适应范围为稀疏图。

正确

错误

参考答案

正确

33.

克鲁斯卡尔算法的出发点: 为使生成树上边的权值之和达到最小,则应使生成树中每一条边的权值尽可能地小。

正确

错误

参考答案

正确

34.

在稀疏矩阵的顺序存储中,利用一个数组来存储非零元素,该数组的长度应等于对应三元组线性表的长度。(

正确

错误

参考答案

正确

35.

在有n个顶点的有向图中,若要使任意两点间可以互相到达,则至少需要n条弧。( )

正确

错误

参考答案

正确

36.

图的遍历算法有深度优先搜索算法和广度优先搜索算法。( )

正确

错误

参考答案

正确

37.

已知单链表中某一结点由p指向,求此后继结点存储地址的操作为p=p->next。(

正确

错误

参考答案

正确

38.

图的遍历算法有深度优先搜索算法和广度优先搜索算法。( )

正确

错误

参考答案

正确

39.

栈不能用链式存储结构存放。

正确

错误

参考答案

错误

40.

Dijkstra最短路径算法弧上的权出现负值情况时,不能正确产生最短路径。(

正确

错误

参考答案

正确

41.

*p结点为叶子结点,即PL*P的左子树)和PR*P的右子树)均为空。由于删去叶子结点不破坏整棵树的结构,因此只需修改双亲结点的指针即可。(

正确

错误

参考答案

正确

42.

在散列检索中,比较操作一般也是不可避免的。(

正确

错误

参考答案

正确

43.

多维数组可以看作数据元素也是基本线性表的基本线性表。(

正确

错误

参考答案

正确

44.

二叉树的先序遍历中,任意结点均处在其子女结点之前。(

正确

错误

参考答案

正确

45.

双亲孩子表示法是将双亲表示法和孩子表示法相结合的结果。(

正确

错误

参考答案

正确

46.

树的子树是无序的。(

正确

错误

参考答案

错误

47.

图或网经常用于描述一个城市或城市间的交通运输网络

正确

错误

参考答案

正确

48.

采用压缩存储之后,下三角矩阵的存储空间可以节约一半。(

正确

错误

参考答案

错误

49.

AOE网中,从源点到汇点路径上各活动时间总和最短的路径称为关键路径。(

正确

错误

参考答案

错误

50.

二叉树的顺序存储,就是用一组连续的存储单元存放二叉树中的结点。(

正确

错误

参考答案

正确

51.

利用二叉树前序遍历和后序遍历结果,可以画出该二叉树。(

正确

错误

参考答案

错误

52.

在广义表的存储结构中,每个结点均包含有3个域。(

正确

错误

参考答案

正确

53.

求有向图G=(VE)中每一对顶点间的最短路径,用Dijkstra算法和弗罗伊德算法,时间复杂度都是O(n3) 。(

正确

错误

参考答案

正确

54.

用顺序方法存储一般的二叉树,若在树中需要经常插入和删除结点时,有大量的移动结点。(

正确

错误

参考答案

正确

55.

哈夫曼树的总结点个数(多于1时)不能为偶数。(

正确

错误

参考答案

正确

56.

邻接多重表是有向图的另一种链式存储结构。

正确

错误

参考答案

错误

57.

图的遍历要求从图的某一顶点出发,访遍图中的其余顶点,且每个顶点仅被访问一次。( )

正确

错误

参考答案

正确

58.

在执行某个排序算法过程中,出现了排序码朝着最终排序序列位置相反方向移动,则该算法是不稳定的。( )

正确

错误

参考答案

错误

59.

构造哈希函数需要根据不同情况选择不同的方法,通常需要考虑多种因素。(

正确

错误

参考答案

正确

60.

广义表的表尾一定是一个广义表。(

正确

错误

参考答案

正确

1.

下面程序段的时间复杂度是__________________

i=s=0;

while(s<n)

{ i++;

s+=i;

}

参考答案

O(

)

2.

在一个具有n个顶点的无向完全图中,包含有________条边,在一个具有n个顶点的有向完全图中,包含有________条边。

参考答案

n(n-1)/2,n(n-1)

3.

对于一个二维数组A[m][n],若按行序为主序存储,则任一元素A[i][j]相对于A[0][0]的地址为______________

参考答案

i×n+j

4.

在所有排序方法中,________方法采用的是两两有序表合并的思想。

参考答案

归并排序

5.

已知广义表A=((a,b,c),(d,,f)),则运算head(tail(tail(A)))=____________

参考答案

e

6.

三叉链表比二叉链表多一个指向______________的指针域。

参考答案

双亲结点

7.

图的________优先搜索遍历算法是一种递归算法,图的________优先搜索遍历算法需要使用队列。

参考答案

深度,广度

8.

每次从无序子表中取出一个元素,把它插入到有序子表中的适当位置,此种排序方法叫做________排序;每次从无序子表中挑选出一个最小或最大元素,把它交换到有序表的一端,此种排序方法叫做________排序。

参考答案

插入,选择

9.

哈夫曼树是指______________________的二叉树。

参考答案

带权路径长度最小

10.

根据n个元素建立一棵二叉排序树的时间复杂度大致为________

参考答案

O(nlog2n)

11.

一个广义表为(a,(a,b),d,e,((i,j),k)),则该广义表的长度为_____,深度为_____

参考答案

5,3

12.

假定在索引查找中,查找表长度为n,每个子表的长度相等,设为s,则进行成功查找的平均查找长度为____________

参考答案

(n/s+s)/2+1

13.

假定一棵树的广义表表示为ABE),CFHIJ),G),D),则该树的度为_____,树的深度为_____

参考答案

3,4

14.

在有向图的邻接表和逆邻接表表示中,每个顶点邻接表分别链接着该顶点的所有________________结点。

参考答案

出边,入边

15.

对线性表(18,25,63,50,42,32,90)进行哈希存储时,若选用H(K)=K % 9作为哈希函数,则哈希地址为0的元素有________个,哈希地址为5的元素有________个。

参考答案

3, 2

16.

F是一个森林,B是由F转换得到的二叉树,F中有n个非终端结点,则B中右指针域为空的结点有_______个。

参考答案

n+1

17.

n个记录进行冒泡排序时,最少的比较次数为________,最少的趟数为_______

参考答案

n-1,1

18.

假定一组记录为(46,79,56,38,40,80,46,75,28,46),对其进行归并排序的过程中,供需要__________趟完成。

参考答案

4

19.

在一棵二叉树中,度为0的结点个数为n0,度为2的结点个数为n2,则n0=______

参考答案

n2+1

20.

假定一个顺序表的长度为40,并假定查找每个元素的概率都相同,则在查找成功情况下的平均查找长度________,在查找不成功情况下的平均查找长度________

参考答案

20.5, 41

21.

在线性表的哈希存储中,装填因子a又称为装填系数,若用m表示哈希表的长度,n表示线性表中的元素的个数,则a等于________

参考答案

n/m

22.

从一棵二叉排序树中查找一个元素时,若元素的值等于根结点的值,则表明_______,若元素的值小于根结点的值,则继续向________查找,若元素的值大于根结点的值,则继续向________查找。

参考答案

查找成功,左子树,右子树

23.

假定一组记录为(46,79,56,38,40,80),对其进行快速排序的过程中,共需要________趟排序。

参考答案

3

24.

假定一组记录为(46,79,56,38,40,84),则利用堆排序方法建立的初始小根堆为____________________

参考答案

(38,40,56,79,46,84)

25.

假定一个有向图的边集为{<a,c>,<a,e>,<c,f>,<d,c>,<e,b>,<e,d>},对该图进行拓扑排序得到的顶点序列为________

参考答案

aebdcf(答案不唯一)

26.

________排序方法能够每次使无序表中的第一个记录插入到有序表中。

参考答案

直接插入

27.

设有一个10阶的对称矩阵A,采用压缩存储方式以行序为主序存储,a

为第一个元素,其存储地址为0,每个元素占有1个存储地址空间,则a

的地址为______________

参考答案

41

28.

对于一个具有n个顶点和e条边的连通图,其生成树中的顶点数和边数分别为________________

参考答案

n,n-1

29.

以折半查找方法在一个查找表上进行查找时,该查找表必须组织成________存储的________表。

参考答案

顺序,有序

30.

在一棵二叉排序树上按_______遍历得到的结点序列是一个有序序列。

参考答案

中序

31.

由带权为396255个叶子结点构成一棵哈夫曼树,则带权路径长度为_______

参考答案

55

32.

一棵深度为k的完全二叉树的结点总数的最小值为_______,最大值为________

参考答案

2k-1,2k-1

33.

若一个图的顶点集为{a,b,c,d,e,f},边集为{(a,b),(a,c),(b,c),(d,e)},则该图含有________个连通分量。

参考答案

3

34.

一个稀疏矩阵为

,则对应的三元组线性表为_____________


 

参考答案

((0,2,2),(1,0,3),(2,2,-1),(2,3,5))

35.

以顺序查找方法从长度为n的顺序表或单链表中查找一个元素时,平均查找长度为________,时间复杂度为________

参考答案

(n+1)/2, O(n)

36.

线索是指________________________

参考答案

指向结点前驱和后继信息的指针

37.

假定对线性表(38,25,74,52,48)进行哈希存储,采用H(K)=K % 7作为哈希函数,采用线性探测法处理冲突,则平均查找长度为________

参考答案

2

38.

在简单选择排序中,记录比较次数的时间复杂度为________,记录移动次数的时间复杂度为________

参考答案

O(n2),O(n)

39.

假定对线性表(38,25,74,52,48)进行哈希存储,采用H(K)=K % 7作为哈希函数,采用线性探测法处理冲突,则在建立哈希表的过程中,将会碰到________次存储冲突。

参考答案

5

40.

对于一个具有n个顶点和e条边的无向图,当分别采用邻接矩阵和邻接表表示时,求任一顶点度数的时间复杂度分别为________________

参考答案

O(n),O(n)

1.

如图所示为一个有向网图及其带权邻接矩阵,要求对有向图采用Dijkstra算法,求从V0 到其余各顶点的最短路径。

参考答案

求解过程如下表所示:

2.

已知一组记录为(46,74,53,14,26,38,86,65,27,34),给出采用简单选择排序法进行排序时每一趟的排序结果。

参考答案

3.

对于如下图所示的带权无向图,用图示说明:利用Prim算法从顶点a开始构造最小生成树的过程。

参考答案

4.

回答下列问题:

1)具有n个顶点的连通图至少有多少条边?

2)具有n个顶点的强连通图至少有多少条边?这样的图应该是什么形状?

3)具有n个顶点的有向无环图最多有多少条边?

参考答案

解:

(1)具有n个顶点的连通图至少有n-1条边。

这是一个与生成树相关的问题。生成树是一个连通图,它具有能够连通图中任何两个顶点的最小边集,任何一个生成树都具有n-1边。因此,具有n个顶点的连通图至少有n-1条边。

(2)具有n个顶点的强连通图至少有n条边,这样的图是一个由n个顶点构成的环。

强连通图是相对于有向图而言的。由于强连通图要求图中任何两个顶点之间能够相互连通,因此每个顶点至少要有一条以该顶点为弧头的弧和一条以该顶点为弧尾的弧,每个顶点的入度和出度至少各为1,即顶点的度至少为2,这样根据图的顶点数、边数以及各项点的度三者之间的关系计算可得:边数=2×n/2=n。

(3)具有n个顶点的有向无环图最多有n×(n—1)/2条边。

这是一个拓扑排序相关的问题。—个有向无环图至少可以排出一个拓扑序列,不妨设这n个顶点排成的拓扑序列为v1,v2,v3,…,vn,那么在这个序列中,每个顶点vi只可能与排在它后面的顶点之间存在着以vi为弧尾的弧,最多有n-i条,因此在整个图中最多有(n-1)+(n-2)+ … +2+1=n×(n-1)/2条边。

5.

将如图所示的二叉树转换为树。

参考答案

解: 第一步,加线。第二步,抹线。第三步,调整。过程如图所示。

6.

给定集合{15,3,14,2,6,9,16,17} (1)表示外部结点,用表示内部结点,构造相应的huffman树: (2)计算它的带权路径长度: (3)写出它的huffman编码: (4)huffman编码常用来译码,请用语言叙述写出其译码的过程。

参考答案

(1)



 

(2)wpl=(2+3)*5+6*4+(9+14+15)*3+(16+17)*2=229

(3)编码为:15:111,3:10101, 14:110, 2:10100, 6:1011, 9:100, 16:00, 17:01

(4) 常用哈夫曼树为通讯用的字符编码,本题中集合的数值解释为字符发生的频率(次数)。由哈夫曼树构造出哈夫曼编码。译码时,进行编码的“匹配”,即从左往右扫描对方发来的“编码串”,用字符编码去匹配,得到原来的元素(本题中的数)。


 

7.

关键字集为(477291116922283),哈希表表长为11Hkey= key MOD 11,用线性探测法处理冲突。

参考答案

解:建表如下:

分析:47、7、11、16、92均是由哈希函数得到的没有冲突的哈希地址而直接存入的。

H(29)= 7,哈希地址上冲突,需寻找下一个空的哈希地址:

由H=(H(29)+1) MOD 11 = 8 ,哈希地址8为空,将29存入。另外,22、8同样在哈希地址上有冲突,也是由Hi找到空的哈希地址的。

而H(3)= 3,哈希地址上冲突,由:H1=(H(3)+1)MOD 11 = 4,仍然冲突。

H2=(H(3)+2)MOD 11 = 5,仍然冲突。H3=(H(3)+3)MOD 11 = 6,找到空的哈希地址,存入。

8.

已知关键字序列(127721653873853),给出采用直接插入排序方法按关键字递增序排列时的每一趟结果。

参考答案

9.

已知一组记录为(46,74,53,14,26,38,86,65,27,34),给出采用快速排序法进行排序时每一趟的排序结果。

参考答案

10.

假定一个待哈希存储的线性表为(32,75,29,63,48,94,25,46,18,70),哈希地址空间为HT[13],若采用除留余数法构造哈希函数和线性探测法处理冲突,试求出每一元素在哈希表中的初始哈希地址和最终哈希地址,画出最后得到的哈希表,求出平均查找长度。

参考答案

11.

已知如图所示的一个网,按照Prim方法,从顶点1 出发,求该网的最小生成树的产生过程。

参考答案

过程如图所示:

12.

证明任何一棵满二叉树T中的分支数B满足B=2(n0-1)(其中n0为叶子结点数)。

参考答案

证明:

∵T为满二叉树

不存在度为1的结点

设该二叉树中总的结点数为n,度为2的结点总数为n2,分支数为B

则有n=n0+ n2 ①

又∵除了根结点外,其余n-1个结点都有一个分支进入,即有n个结点的二叉树共有n-1条边

∴n=B+1 ②

由①、②两式,可得 B+1=n0+ n2 ③

又由二叉树的性质3可知 n2=n0-1 ④

由③、④两式可知 B= n0+ n0-1-1=2(n0-1) 求证成立。

13.

已知一组记录为(46,74,53,14,26,38,86,65,27,34),给出采用归并排序法进行排序时每一趟的排序结果。

参考答案

14.

假定一个线性表为(38,52,25,74,68,16,30,54,90,72),画出按线性表中元素的次序生成的一棵二叉排序树,求出其平均查找长度。

参考答案

二叉排序树如图所示,平均查找长度等于32/10。

15.

已知关键字序列(381221776573853)给出采用快速排序方法按关键字增序排序时的第一趟块排过程,并举出一个反例说明快速排序是不稳定排序。

参考答案

16.

待排序列为( 3980764113295078301110074186),步长因子分别取531,给出采用希尔排序方法按关键字递增序排列时的每一趟结果。

参考答案

17.

已知一组记录为(46,74,53,14,26,38,86,65,27,34),给出采用堆排序法进行排序时每一趟的排序结果。

参考答案

18.

已知一个顺序存储的有序表为(15,26,34,39,45,56,58,63,74,76),试画出对应的折半查找判定树,求出其平均查找长度。

参考答案

折半查找判定树如图所示,平均查找长度等于29/10。图中的结点与有序表中元素的对应关系如下表所示。

19.

已知序列(17186040732736585),请给出采用冒泡排序法对该序列作升序排序时的每一趟的结果。

参考答案

20.

对于一个无向图(a),假定采用邻接矩阵表示,试分别写出从顶点0出发按深度优先搜索遍历得到的顶点序列和按广度优先搜索遍历得到的顶点序列。 

参考答案

注:每一种序列都是唯一的,因为都是在存储结构上得到的。

深度优先搜索序列:0,1,2,8,3,4,5,6,7,9

广度优先搜索序列:0,1,4,2,7,3,8,6,5,9

21.

有序表按关键字排列如下:7141821232931353842464952,在表中查找关键字为14的数据元素,并画出折半查找过程的判定树。

参考答案

解:折半查找的过程描述如下:

① low=1;high=length; //设置初始区间

当low>high时,返回查找失败信息 //表空,查找失败

③ low≤high,mid=(low+high)/2; //取中点

a. 若kx<tbl.elem[mid].key,high=mid-1;转② //查找在左半区进行

b. 若kx>tbl.elem[mid].key,low=mid+1;转② //查找在右半区进行

c. 若kx=tbl.elem[mid].key,返回数据元素在表中位置 //查找成功

l 查找关键字为14的过程如下:


查找过程的判定树如图所示:


 

22.

如下图所示的二叉树,要求:

1)写出按先序、中序、后序遍历得到的结点序列。

2)画出该二叉树的后序线索二叉树。

参考答案

解:

(1)先序遍历序列:ABDEFC

中序遍历序列:DEFBAC

后序遍历序列:FEDBCA

(2)其后序线索二叉树如图所示。


 

23.

记录的关键字序列为:6390705567429883104558,则画出构造一棵二叉排序树的过程。

参考答案

24.

对于一个有向图(b),假定采用邻接表表示,并且假定每个顶点单链表中的边结点是按出边邻接点序号从大到小的次序链接的,试分别写出从顶点0出发按深度优先搜索遍历得到的顶点序列和按广度优先搜索遍历得到的顶点序列。

参考答案

注:每一种序列都是唯一的,因为都是在存储结构上得到的。

深度优先搜索序列:0,4,7,5,8,3,6,1,2

广度优先搜索序列:0,4,3,1,7,5,6,2,8

25.

已知一组记录为(46,74,53,14,26,38,86,65,27,34),给出采用冒泡排序法进行排序时每一趟的排序结果。

参考答案

26.

对于如下图所示的带权无向图,用图示说明:利用Kruskal算法构造最小生成树的过程。

参考答案

27.

将下图所示的树转换为二叉树。

参考答案

解:第一步,加线。第二步,抹线。第三步,旋转。过程如图所示。


 

28.

已知一组记录为(46,74,53,14,26,38,86,65,27,34),给出采用直接插入排序法进行排序时每一趟的排序结果。

参考答案

29.

有序表按关键字排列如下:7141821232931353842464952,在表中查找关键字为22的数据元素,并画出折半查找过程的判定树。

参考答案

解:折半查找的过程描述如下:

① low=1;high=length; //设置初始区间

当low>high时,返回查找失败信息 //表空,查找失败

③ low≤high,mid=(low+high)/2; //取中点

a. 若kx<tbl.elem[mid].key,high=mid-1;转② //查找在左半区进行

b. 若kx>tbl.elem[mid].key,low=mid+1;转② //查找在右半区进行

c. 若kx=tbl.elem[mid].key,返回数据元素在表中位置 //查找成功

查找关键字为22的过程如下:

查找过程的判定树如图所示:

30.

已知一棵树边的集合为{<im><in><ei><be><bd><ab><gj><gk><cg><cf><hl><ch><ac>},请画出这棵树,并回答下列问题:

1)哪个是根结点?

2)哪些是叶子结点?

3)哪个是结点g的双亲?

4)哪些是结点g的祖先?

5)哪些是结点g的孩子?

6)哪些是结点e的孩子?

7)哪些是结点e的兄弟?哪些是结点f的兄弟?

8)结点bn的层次号分别是什么?

9)树的深度是多少?

10)以结点c为根的子树深度是多少?

参考答案

根据给定的边确定的树如图所示。

其中根结点为a;

叶子结点有:d、m、n、j、k、f、l;

c是结点g的双亲;

a、c是结点g的祖先;

j、k是结点g的孩子;

m、n是结点e的子孙;

e是结点d的兄弟;

g、h是结点f的兄弟;

结点b和n的层次号分别是2和5;

树的深度为5。

1.

试写一个判别给定二叉树是否为二叉排序树的算法,设此二叉树以二叉链表作为存储结构,且树中结点的关键字均不同。

参考答案

2.

假定用一个单循环链表来表示队列(也称为循环链队列),该队列只设一个队尾指针,不设队首指针,试编写下列各种运算的算法:

1)向循环链队列插入一个元素值为x的结点;

2)从循环链队列中删除一个结点。

参考答案

本题是对一个循环链队列做插入和删除运算,假设不需要保留被删结点的值和不需要回收结点,算法描述如下:

(1)插入(即入队)算法:

insert(LinkList *rear, elemtype x)

{ //设循环链队列的队尾指针为rear,x为待插入的元素

LinkList *p;

p=(LinkList *)malloc(sizeof(LinkList));

if(rear= =NULL) //如为空队,建立循环链队列的第一个结点

{ rear=p;

rear->next=p; //链接成循环链表

}

else //否则在队尾插入p结点

{ p->next=rear->next;

rear->next=p;

rear=p;

}

}

(2)删除(即出队)算法:

delete(LinkList *rear)

{ //设循环链队列的队尾指针为rear

if (rear= =NULL) //空队

printf("underflow\n");

if(rear->next= =rear) //队中只有一个结点

rear=NULL;

else

rear->next=rear->next->next; //rear->next指向的结点为循环链队列的队头结点

}

3.

假设有一个循环链表的长度大于1,且表中既无头结点也无头指针,已知p为指向链表中某结点的指针,设计在链表中删除p所指结点的前趋结点的算法。

参考答案

可引入一个指针q,当q->next=p时,说明此时q所指的结点为p所指结点的前趋结点,从而可得算法如下:

void delete (LinkList *p)

{ //在链表中删除p所指结点的前趋结点

LinkList *q,*t;

q=p;

while(q->next->next!=p) //q->next不是p的前趋结点

q=q->next;

t=q->next; //t指向要删除结点

q->next=p; //删除t结点

free(t);

4.

给定一棵二叉树,用二叉链表表示,其根指针为t,试写出求该二叉树中结点n的双亲结点的算法。若没有结点n或者该结点没有双亲结点,分别输出相应的信息;若结点n有双亲,输出其双亲的值。

参考答案

利用一个队列来完成,设该队列类型为指针类型,最大容量为maxnum。算法中的front为队头指针,rear为队尾指针,若当前队头结点的左、右子树的根结点不是所求结点,则将两子树的根结点入队,否则,队头指针所指结点即为结点的双亲。

parentjudge(t,n)

BiTree *t;

int n;

{ BiTree *que[maxnum];

int front,rear;

BiTree *parent;

parent=NULL;

if (t)

if (t->data= =n)

printf(“no parent!”); //n是根结点,无双亲

else

{ front=0; //初始化队列

rear=1;

que[1]=t; //根结点进队

do

{ front=front%maxsize+1;

t=que[front];

if((t->lchild->data= =n)|| (t->rchild->data= =n)) //结点n有双亲

{ parent=t;

front=rear;

printf(“parent”,t->data);

}

else

{ if (t->lchild!=NULL) //左子树的根结点入队

{ rear=rear%maxsize+1;

que[rear]=t->lchild;

}

if (t->rchild!=NULL) //右子树的根结点入队

{ rear=rear%maxsize+1;

que[rear]=t->rchild;

}

}

}while(rear= =front); //队空时结束

if (parent = =NULL)

printf(“结点不存在”);

}

}

5.

已知线性表的元素按递增顺序排列,并以带头结点的单链表作存储结构。试编写一个删除表中所有值大于min且小于max的元素(若表中存在这样的元素)的算法。

参考答案

算法描述如下:

delete(LinkList *head, int max, int min)

{ linklist *p, *q;

if (head!=NULL)

{ q=head;

p=head->next;

while((p!=NULL) && (p->data<=min))

{ q=p;

p=p->next;

}

while((p!=NULL) && (p->data<max))

p=p->next;

q->next=p;

}

}

6.

写出在中序线索二叉树中结点P的右子树中插入一个结点s的算法。

参考答案

设该线索二叉树类型为bithptr,包含5个域:lchild,ltag,data,rchild,rtag。

insert(p, s) //将s结点作为p的右子树插入

BiThrNode *p,*s;

{ BiThrNode *q;

if (p->rtag= =1) //无右子树,则有右线索

{ s->rchild=p->rchild;

s->rtag=1;

p->rchild=s;

p->rtag=0;

}

else

{ q=p->rchild;

while(q->ltag= =0) //查找p所指结点中序后继,即为其右子树中最左下的结点

q=q->lchild;

q->lchild=p->rchild;

s->rtag=0;

p->rchild=s;

}

s->lchild=p; //将s结点的左线索指向p结点

s->ltag=1;

}

7.

编写一个算法,求出邻接矩阵表示的无向图中序号为numb的顶点的度数。

参考答案

int degree1(Graph & ga, int numb)

1. int degree1(Graph & ga, int numb)

{ //根据无向图的邻接矩阵求出序号为numb的顶点的度数

int j,d=0;

for(j=0; j<ga.vexnum; j++)

if (ga.cost[numb][j]!=0 && ga.cost[numb][j]!=MAXINT)

d++;

return (d);

}

8.

试将折半查找的算法改写成递归算法。

参考答案

9.

假设有一个带表头结点的链表,表头指针为head,每个结点含三个域:data, nextprior。其中data为整型数域,nextprior均为指针域。现在所有结点已经由next域连接起来,试编一个算法,利用prior域(此域初值为NULL)把所有结点按照其值从小到大的顺序链接起来。

参考答案

定义类型LinkList如下:

typedef struct node

{ int data;

struct node *next,*prior;

}LinkList;

此题可采用插入排序的方法,设p指向待插入的结点,用q搜索已由prior域链接的有序表找到合适位置将p结点链入。算法描述如下:

insert (LinkList *head)

{ LinkList *p,*s,*q;

p=head->next; //p指向待插入的结点,初始时指向第一个结点

while(p!=NULL)

{ s=head; // s指向q结点的前趋结点

q=head->prior; //q指向由prior域构成的链表中待比较的结点

while((q!=NULL) && (p->data>q->data)) //查找插入结点p的合适的插入位置

{ s=q;

q=q->prior;

}

s->prior=p;

p->prior=q; //结点p插入到结点s和结点q之间

p=p->next;

}

}

10.

试以单链表为存储结构实现简单选择排序的算法。

参考答案

BY:Vip_Hc 无偿分享 E-mail:xysds@protonmail.com

分享保留出处.禁止用于任何盈利行为,崇拜大神吧。啊哈哈哈哈哈哈哈哈哈哈哈。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

赵银吉

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

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

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

打赏作者

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

抵扣说明:

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

余额充值