早教吧 育儿知识 作业答案 考试题库 百科 知识分享
早教吧考试题库频道 --> 计算机类考试 -->软考中级 -->

试题四(共15分) 阅读下列说明和C代码,回答问题1至问题 3,将解答写在答题纸的对应栏内。 【说明】 堆

题目

试题四(共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)]int_array[i]=key【问题2】(3分,各1分)【问题3】(2分)(9)3
看了试题四(共15分) 阅读下列说...的网友还看了以下:

求助☆新概念英语三1-15课摘要写作★望各位有心人助偶一臂之力啦~(尽量简短,我写的都百来字了.. 语文 2020-05-13 …

关于bedonedeliberately后面成分的问题我想问问关于对bedonedeliberat 英语 2020-05-15 …

“泪眼问花花不语,乱红飞过秋千去”到底是谁的诗?大家看到的这句诗,知道的都会说是欧阳修写的《蝶恋花 其他 2020-06-09 …

四个小偷(每人各偷了一种东西)接受盘问.甲说:每人只偷了一块表;乙说:我只偷了一颗钻石;丙说:我没 其他 2020-06-26 …

[英语]打电话时询问对方有什么事该怎么说?比如A给B打电话,B接电话后问A找他有什么事,请问问对方 其他 2020-07-11 …

当你打扰别人,需要向别人问问题或借东西时,应该说什么?(用英语)当你询问某个品是否属于对方时,你当 英语 2020-07-13 …

如果你看见的话???(大家也可以随便说说)王雪,我告诉你,我之所以在这问问里写你是想告诉你,你以后不 其他 2020-11-03 …

老师让出初中以来的作文集,自己写写在前面的话.问一下写些什么.告诉我怎么写就行不要现成的作文集没有固 语文 2020-12-05 …

就要高考了!问问怎么写简单的作文!英语王进!两篇加起来45分的作文我只拿20分!囧怎么写简单的作文又 其他 2021-01-04 …

怎样把中文的看图说话写好,写长?我近几年一直在努力学英文,感觉中文水平有很大的退步.以前能轻松的写8 语文 2021-02-03 …