试题四(共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)]
已知关于x的函数y=kx2+(2k-1)x-2(k为常数).(1)试说明:不论k取什么值,此函数图 数学 2020-04-06 …
1)元旦前夕,小钱同学打算用20元钱买10张贺卡,现有两种贺卡,一种单价是1.5元,一种是3元,试 数学 2020-04-09 …
元旦前夕,小倩同学打算用20块钱买10张贺卡,现在有两种贺卡.元旦前夕,小倩同学打算用20元钱买1 数学 2020-05-20 …
一对夫妇现在的年龄和是其子女的6倍,两年前他们的年龄和是其子女年龄和的10倍,6年后,他们的年龄和 数学 2020-05-22 …
空间直角坐标系(1517:28:11)在空间直角坐标系中,已知A(3,0,1)和B(1,0,-3) 数学 2020-06-06 …
已知射线OM和射线ON分别在∠AOB和∠AOC的内部,∠AOM=1/3∠AOB,∠AON=1/3∠ 数学 2020-06-06 …
勾股定理的应用书上有个问题:中的"折竹"问题:"今有竹高一丈,未折抵地,去根三尺,问折者高几何?" 其他 2020-06-27 …
根据题意结合图形填空:已知:如图,AD⊥BC于D,EG⊥BC与G,∠E=∠3,试问:AD是∠BAC 数学 2020-07-20 …
已知二次函数y=f(x)的二次项系数为负,对任意x∈R恒有f(3-x)=f(3+x),试问当f(2 数学 2020-07-20 …
一次数学考试共处了12道选择题,每道题有4个供选择的答案,其中有且只有1个是正确,某学生只知道其中 数学 2020-08-01 …