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



第1题:
函数swap(arr,n)可完成对arr数组从第1个元素到第n个元素两两交换。在运行调用函数中的语句后,a[0]和a[1]的值分别为【 】。
a[0]=1;a[1]=2;swap(a,2);
第2题:
每次从无序表中取出一个元素,把它插入到有序表中的适当位置,此种排序方法叫做()排序。
A.插入
B.堆
C.快速
D.归并排序
第3题:
长度为l0的顺序表的首地址是从l023开始的,顺序表中每个元素的长度为2,在第4个元素前面插入一个元素和删除第7个元素后,顺序表的总长度还是不变。问在执行插入和删除操作前,顺序表中第5个元素在执行插入和删除操作后在顺序表中的存储地址是( )
A.1028
B.1029
C.1031
D.1033
第4题:
在对10个记录的序列(9,35,19,77,2,10,53,45,27,68)进行直接插入排序时,当把第6个记录10 插入到有序表时,为寻找插入位置,元素间需比较()次。(按升序排序)
第5题:
若顺序表中的元素是从1位置开始存放的,要在具有n个元素的顺序表中插入一个元素,合法的插入位置是()。
第6题:
设有一个长度为35的顺序表,要在第5个元素之前插入1个元素(也就是插入元素作为新表的第5个元素),则移动元素个数为()
第7题:
直接插入排序的方法是从第()个元素开始,插入到前边适当位置的排序方法。
第8题:
设顺序线性表中有n个数据元素,则第i个位置上插入一个数据元素需要移动表中()个数据元素;删除第i个位置上的数据元素需要移动表中()个元素。
第9题:
1
i-1
i+1
第10题:
插入
堆
快速
归并
第11题:
第12题:
15
14
5
6
第13题:
● 线性表采用顺序存储结构,若表长为 m,且在任何一个合法插入位置上进行插入操作的概率相同,则插入一个元素平均移动 (37) 个元素。

第14题:
试题四(共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题:
设有一个长度为n的顺序表,要在第i个元素之前(也就是插入元素作为新表的第i个元素),插入一个元素,则移动元素个数为()。
An-i+1
Bn-i-1
Cn-i
Di
第16题:
如果要将两个升序排列的整型顺序表a中的元素合并到b中(b的空间足够大),合并后表中元素依然升序排列,可以通过多次调用查找函数查找插入位置,再调用()函数来实现插入。
第17题:
当向一个顺序表插入一个元素时,从插入位置开始向后的所有元素均()一个位置,移动过程是从()向()依次移动没一个元素。
第18题:
向一个循环队列中插入元素时,需要首先移动(),然后再向所指位置()新插入的元素。
第19题:
每次从无序表中取出一个元素,把它插入到有序表中的适当位置,此种排序方法叫做()排序。
第20题:
若对n个元素进行直接插入排序,则进行第i趟排序时,为寻找插入位置最多需要进行()次元素的比较,假定第0号元素放有待查的关键字。
第21题:
第22题:
第23题:
n-i+1
n-i-1
n-i
i