c语言pta一维数组,【PTA】【数据结构与算法】堆

判断题

1.任何最小堆的前序遍历结果是有序的(从小到大)。 (2分)

T

F

2.任何最小堆中从根结点到任一叶结点路径上的所有结点是有序的(从小到大)。 (2分)

T

F

3.在有N个元素的最大堆中,随机访问任意键值的操作可以在O(logN)时间完成。 (2分)

T

F

4.一棵有124个结点的完全二叉树,其叶结点个数是确定的。 (2分)

T

F

5.完全二叉树中,若一个结点没有左孩子,则它必是树叶。 (1分)

T

F

6.完全二叉树的存储结构通常采用顺序存储结构。 (1分)

T

F

选择题

1.堆的形状是一棵: (2分)

选项

A

二叉搜索树

B

满二叉树

C

非二叉树

D

完全二叉树

2.创建一个初始堆,含有N个记录,其时间复杂度是: (2分)

选项

A

O(logN)

B

O(N)

C

O(NlogN)

D

O(N2)

3.哪种树,树中任何结点到根结点路径上的各结点值是有序的? (2分)

选项

A

二叉搜索树

B

完全二叉树

C

D

以上都不是

4.将6、4、3、5、8、9顺序插入初始为空的最大堆(大根堆)中,那么插入完成后堆顶的元素为: (2分)

选项

A

3

B

5

C

6

D

9

5.下列的序列中,哪一组是堆? (2分)

选项

A

37,99,45,33,66,10,22,13

B

99,45,66,13,37,10,22,33

C

99,66,45,33,37,10,22,13

D

99,66,22,33,37,13,45,10

6.已知关键字序列(5,8,12,19,28,20,15,22)是最小堆(小根堆),插入关键字3,调整后得到的最小堆是: (2分)

选项

A

3,5,12,8,28,20,15,22,19

B

3,5,12,19,20,15,22,8,28

C

3,8,12,5,20,15,22,28,19

D

3,12,5,8,28,20,15,22,19

7.将10、12、1、14、6、5、8、15、3、9、7逐个按顺序插入到初始为空的最小堆(小根堆)中,然后连续执行两次删除最小元素操作(DeleteMin),此后堆顶的元素是什么? (2分)

选项

A

5

B

6

C

7

D

9

8.将 {28, 15, 42, 18, 22, 5, 40} 逐个按顺序插入到初始为空的最小堆(小根堆)中。则该树的前序遍历结果为:(3分)

选项

A

5, 18, 15, 28, 22, 42, 40

B

5, 15, 18, 22, 28, 42, 40

C

5, 18, 28, 22, 15, 42, 40

D

5, 15, 28, 18, 22, 42, 40

9.设最小堆(小根堆)的层序遍历结果为{1, 3, 2, 5, 4, 7, 6}。用线性时间复杂度的算法将该堆调整为最大堆(大根堆),则该树的中序遍历结果为:(3分)

选项

A

3, 5, 4, 2, 6, 1, 7

B

1, 4, 3, 7, 2, 6, 5

C

3, 5, 4, 7, 2, 6, 1

D

4, 1, 3, 7, 6, 2, 5

10.有n(>1)个元素的最大堆(大根堆)中,最小元的数组下标可以是:(3分)

选项

A

1

B

⌊n/2⌋−1

C

⌊n/2⌋

D

⌊n/2⌋+2

11.在将数据序列( 6, 1, 5, 9, 8, 4, 7 )建成大根堆时,正确的序列变化过程是:(3分)

选项

A

6,1,7,9,8,4,5 → 6,9,7,1,8,4,5 → 9,6,7,1,8,4,5 → 9,8,7,1,6,4,5

B

6,9,5,1,8,4,7 → 6,9,7,1,8,4,5 → 9,6,7,1,8,4,5 → 9,8,7,1,6,4,5

C

6,9,5,1,8,4,7 → 9,6,5,1,8,4,7 → 9,6,7,1,8,4,5 → 9,8,7,1,6,4,5

D

6,1,7,9,8,4,5 → 7,1,6,9,8,4,5 → 7,9,6,1,8,4,5 → 9,7,6,1,8,4,5 → 9,8,6,1,7,4,5

12.在一个有2333个元素的最小堆中,下列哪个下标不可能是最大元的位置?(3分)

选项

A

1116

B

1167

C

2047

D

2232

13.在下述结论中,正确的是: (2分)

① 只有2个结点的树的度为1;

② 二叉树的度为2;

③ 二叉树的左右子树可任意交换;

④ 在最大堆(大顶堆)中,从根到任意其它结点的路径上的键值一定是按非递增有序排列的。

选项

A

①④

B

②④

C

①②③

D

②③④

14以下各组序列不属于堆的是()。 (2分)

选项

A

(100,85,98,77,80,60,82,40,20,10,66)

B

(10,20,40,60,66,77,80,82,85,98,100)

C

(100,85,40,77,80,60,66,98,82,10,20)

D

(100,98,85,82,80,77,66,60,40,20,10)

15.堆是满足一定条件的()。 (2分)

选项

A

完全二叉树

B

队列

C

D

线性表

16.下列四个序列中,属于堆的是()。 (2分)

选项

A

(75,65,30,15,25,45,20,10)

B

(75,45,65,30,15,25,20,10)

C

(75,45,65,10,25,30,20,15)

D

(75,65,45,10,30,25,20,15)

17.设最小堆(小根堆)的层序遍历结果为{5, 18, 15, 28, 22, 42, 40}。用线性时间复杂度的算法将该堆调整为最大堆(大根堆),则该树的中序遍历结果为:(3分)

选项

A

18, 28, 22, 15, 40, 5, 42

B

18, 28, 22, 42, 15, 40, 5

C

5, 22, 18, 42, 15, 40, 28

D

22, 5, 18, 42, 40, 15, 28

18.对最小堆(小顶堆){1,3,2,6,7,5,4,15,14,12,9,10,11,13,8} 进行三次删除最小元的操作后,结果序列为:(2分)

选项

A

4,5,6,7,8,9,10,11,12,13,14,15

B

4,6,5,13,7,10,8,15,14,12,9,11

C

4,6,5,12,7,10,8,15,14,9,13,11

D

4,5,6,12,7,10,8,15,14,13,9,11

19.用线性时间复杂度的算法将给定序列{ 28, 12, 5, 8, 19, 20, 15, 22 }调整为最大堆(大根堆),然后插入30。则结果序列为:(3分)

选项

A

{ 5, 8, 28, 12, 19, 20, 15, 22, 30 }

B

{ 30, 28, 20, 22, 12, 5, 15, 8, 19 }

C

{ 30, 28, 22, 20, 19, 15, 12, 8, 5 }

D

{ 30, 28, 20, 22, 19, 5, 15, 8, 12 }

程序填空题

1.下列代码的功能是从一个大顶堆H的某个指定位置p开始执行下滤。

void PercolateDown( int p, PriorityQueue H )

{

int child;

ElementType Tmp = H->Elements[p];

for ( ; p * 2 <= H->Size; p = child ) {

child = p * 2;

if ( child!=H->Size && H->Elements[child+1] > H->Elements[child] (6分))

child++;

if ( H->Elements[child] > Tmp )

H->Elements[p] = H->Elements[child] (6分);

else break;

}

H->Elements[p] = Tmp;

}

2.本函数的功能是从有N个元素的线性表A中查找第K小的元素。其中函数BuildMaxHeap(H, K)是将元素H[1] … H[K]调整为一个最大堆。请完成下列填空。

ElementType FindKthSmallest ( int A[], int N, int K )

{ /* it is assumed that K<=N */

ElementType *H;

int i, next, child;

H = (ElementType *)malloc((K+1)*sizeof(ElementType));

for ( i=1; i<=K; i++ ) H[i] = A[i-1];

BuildMaxHeap(H, K);

for ( next=K; next

H[0] = A[next];

if ( H[0] < H[1] ) {

for ( i=1; i*2<=K; i=child ) {

child = i*2;

if ( child!=K && H[child+1]>H[child] (4分) ) child++;

if ( H[child]>H[0] (5分) )

H[i] = H[child];

else break;

}

H[i] = H[0];

}

}

return H[1];

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值