软件水平考试

堆是一种数据结构,分为大顶堆和小顶堆两种类型。大(小)顶堆要求父元素大于等于(小于等于)其左右孩子元素。则__1____是一个大顶堆结构,该堆结构用二叉树表示,其高度(或层数)为___2___。 2、_____A.2 B.3 C.4 D.5

题目
堆是一种数据结构,分为大顶堆和小顶堆两种类型。大(小)顶堆要求父元素大于等于(小于等于)其左右孩子元素。则__1____是一个大顶堆结构,该堆结构用二叉树表示,其高度(或层数)为___2___。
2、_____

A.2
B.3
C.4
D.5
如果没有搜索结果,请直接 联系老师 获取答案。
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

______从二叉树的任一结点出发到根的路径上,所经过的结点序列必按其关键字降序排列。

A.二叉排序树

B.大顶堆

C.小顶堆

D.平衡二叉树


正确答案:C

第2题:

高度为h的堆中,最多有(52)个元素,最少有(53)个元素,在大根堆中,关键字最小的元素可能存放在堆的(54)地方。

A.2h-1

B.2h-1

C.2h

D.2h+1


正确答案:A

第3题:

在一个大顶堆中,最小元素不一定在最后。()

此题为判断题(对,错)。


正确答案:对

第4题:

中从任一结点出发到根的路径上,所经过的结点序列必按其关键字降序排列。

A.二叉排序树

B.大顶堆

C.小顶堆

D.最优二叉树


正确答案:C

第5题:

对于n个元素的关键字序列{k1,k2,…,kn},若将其按次序对应到一棵具有n个结点的完全二叉树上,使得任意结点都不大于其孩子结点(若存在孩子结点),则称其为小顶堆。根据以上定义,(43)是小顶堆。

A.

B.

C.

D.


正确答案:D
解析:本题考查排序方法中堆排序的基础知识。,对于n个元素的关键字序列{k1,k2,…,kn},当且仅当满足下列关系时称其为堆:①ki≤k2i且ki≤k2i+1或者②kik2i且kik2i+1其中,1≤i≤|n/2|,满足①式称为小顶堆,满足②式称为大顶堆。显然,题目中选、项A中25与23和51之间的关系不满足小顶堆的定义;选项B中51与63和25之间、 55与23之间的关系不满足小顶堆的定义;选项C的情况与B类似。选项D是小顶堆。

第6题:

对于序列{26,33,35,29,19,12,22}, (1)判断它是否是堆,若是,写出其是大顶堆还是小顶堆;若不是,把它调整为堆,写出调整的过程和调整后的序列。 (2)写出对该序列进行直接插入排序每一趟结束时的关键字状态。


参考答案:

第7题:

● 对于n 个元素的关键字序列{k1,k2,…,kn}, 若将其按次序对应到一棵具有 n 个结点的完全二叉树上, 使得任意结点都不大于其孩子结点(若存在孩子结点), 则称其为小顶堆。根据以上定义, (43) 是小顶堆


正确答案:D

第8题:

● (45) 从二叉树的任一结点出发到根的路径上,所经过的结点序列必按其关键字降序排列。

(45) A.二叉排序树

B.大顶堆

C.平衡二叉树

D.小顶堆


正确答案:D
【解析】二叉排序树有以下特点:每个结点的左子树中所有结点的值都小于该结点的值,而右子树中所有结点的值都大于该结点的值。平衡二叉树是指其上任一结点的左右子树的高度(或者结点个数)保持一定比例的树,即平衡树上任一结点的左、右子树仍然保持平衡。堆排序的基本思想为对一组待排序记录的关键字,首先把它们按堆的定义排成一个序列,即建立初始小(或大)顶堆,输出堆项最小(或大)元素,然后将剩余的关键字再调整成新堆,便得到次小(或大)的关键字,其中降序排列为小顶堆,升序排序为大顶堆。

第9题:

______从二叉树的任一节点出发到根的路径上,所经过的节点序列必须按其关键字降序排列。

A.二叉排序树

B.大顶堆

C.小顶堆

D.平衡二又树


正确答案:C
解析:n0是度为0的节点总数(即叶子节点数),n1是度为l的节点总数,n2是度为2的节点总数,由二叉树的性质可知:n0=n2+1,则完全二叉树的节点总数n为:n=n0+n1+n2,由于完全二叉树中度为1的节点数只有两种可能0或1,由此可得n0=(n+1)/2或n0=nJ2,合并成一个公式为:n0=(n+1)/2(注:此处表示整除),即可根据完全二又树的节点总数计算出叶子节点数。

第10题:

试题四(共15分)

阅读下列说明和C代码,回答问题1至问题 3,将解答写在答题纸的对应栏内。

【说明】

堆数据结构定义如下:

在一个堆中,若堆顶元素为最大元素,则称为大顶堆;若堆顶元素为最小元素,则称为小顶堆。堆常用完全二叉树表示,图4-1 是一个大顶堆的例子。

堆数据结构常用于优先队列中,以维护由一组元素构成的集合。对应于两类堆结构,优先队列也有最大优先队列和最小优先队列,其中最大优先队列采用大顶堆,最小优先队列采用小顶堆。以下考虑最大优先队列。

假设现已建好大顶堆A,且已经实现了调整堆的函数heapify(A, n, index)。

下面将C代码中需要完善的三个函数说明如下:

(1)heapMaximum(A):返回大顶堆A中的最大元素。

(2)heapExtractMax(A):去掉并返回大顶堆 A的最大元素,将最后一个元素“提前”到堆顶位置,并将剩余元素调整成大顶堆。

(3)maxHeapInsert(A, key):把元素key插入到大顶堆 A的最后位置,再将 A调整成大顶堆。

优先队列采用顺序存储方式,其存储结构定义如下:

define PARENT(i) i/2

typedef struct array{

int *int_array; //优先队列的存储空间首地址

int array_size; //优先队列的长度

int capacity; //优先队列存储空间的容量

} ARRAY;

【C代码】

(1)函数heapMaximum

int heapMaximum(ARRAY *A){ return (1) ; }

(2)函数heapExtractMax

int heapExtractMax(ARRAY *A){

int max;

max = A->int_array[0];

(2) ;

A->array_size --;

heapify(A,A->array_size,0); //将剩余元素调整成大顶堆

return max;

}

(3)函数maxHeapInsert

int maxHeapInsert(ARRAY *A,int key){

int i,*p;

if (A->array_size == A->capacity) { //存储空间的容量不够时扩充空间

p = (int*)realloc(A->int_array, A->capacity *2 * sizeof(int));

if (!p) return -1;

A->int_array = p;

A->capacity = 2 * A->capacity;

}

A->array_size ++;

i = (3) ;

while (i > 0 && (4) ){

A->int_array[i] = A->int_array[PARENT(i)];

i = PARENT(i);

}

(5) ;

return 0;

}

【问题 1】(10分)

根据以上说明和C代码,填充C代码中的空(1)~(5)。

【问题 2】(3分)

根据以上C代码,函数heapMaximum、heapExtractMax和 maxHeapInsert的时间复杂度的紧致上界分别为 (6) 、 (7) 和 (8) (用O 符号表示)。

【问题 3】(2分)

若将元素10插入到堆A =〈15, 13, 9, 5, 12, 8, 7, 4, 0, 6, 2, 1〉中,调用 maxHeapInsert函数进行操作,则新插入的元素在堆A中第 (9) 个位置(从 1 开始)。


正确答案:
试题四(共15分)【问题1】(10分,各2分)(1)A->int_array[0](2)A->int_array[0]=A->int_array[A->array_size-1](3)A->array_size-1(4)A->int_array[PARENT(i)]<key(5)A->int_array[i]=key【问题2】(3分,各1分)【问题3】(2分)(9)3

更多相关问题