参考答案和解析
正确答案:(9)3
(9)3 解析:依照maxHeapInsert的算法,可有如下几步:
第一步:i=13 PARENT(i)=6key=10 A->int_array [PARENT(i)]=8
由于key>A->int_array[PARENT(i)]
所以符合while循环条件,执行:
A->int_array[i]=A->int_array[PARENT(i)];
i=PARENT(i);
即:

第二步:i=6 PARENT(i)=3key=10 A->int_array [PARENT (i)]=9
由于key>A->int_array[PARENT(i)]
所以符合while循环条件,执行:
A->int_array[i]=A->int_array[PARENT(i)];
i=PARENT(i);
即:

第三步:i=3 PARENT(i)=1key=10 A->int_array [PARENT(i)]=15
由于keyint_array[PARENT(i)]
所以不符合while循环条件,跳出循环。
执行:A->int_array[i]=key;
即:

所以,插入元素10的位置在第三个位置。
更多“若将元素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);


    正确答案:21
    2,1 解析:本题考核函数参数的传递。数组名作为函数参数传递的是数组的首地址,即实参数组名把实参数组的首地址传给了形参数组名,形参数组名就指向了相应的实参数组,就是说形参数组和实参数其实就是同一个数组,对形参数组元素的修改也同样影响到对应的实参数组元素。

  • 第2题:

    每次从无序表中取出一个元素,把它插入到有序表中的适当位置,此种排序方法叫做()排序。

    A.插入

    B.堆

    C.快速

    D.归并排序


    正确答案:A

  • 第3题:

    长度为l0的顺序表的首地址是从l023开始的,顺序表中每个元素的长度为2,在第4个元素前面插入一个元素和删除第7个元素后,顺序表的总长度还是不变。问在执行插入和删除操作前,顺序表中第5个元素在执行插入和删除操作后在顺序表中的存储地址是( )

    A.1028

    B.1029

    C.1031

    D.1033


    正确答案:D
    由于问的是原来顺序表中的第5个元素,它在插入操作后变成了第6个元素(因为插入的元素在它前面)。由于删除的第7个元素在它后面,不会影响它在顺序表中的排位。因此在执行插入和删除操作后原先顺序表中的第5个元素变成了新的顺序表中的第6个元素。再按照线性表的随机存取地址的计算公式ADD(ai)=ADD(a1)+(i-l)×k计算ADD(a6)=ADD(a1)+(6—1)×2=1023+5×2=1033,因此选项D正确。

  • 第4题:

    在对10个记录的序列(9,35,19,77,2,10,53,45,27,68)进行直接插入排序时,当把第6个记录10 插入到有序表时,为寻找插入位置,元素间需比较()次。(按升序排序)


    正确答案:4

  • 第5题:

    若顺序表中的元素是从1位置开始存放的,要在具有n个元素的顺序表中插入一个元素,合法的插入位置是()。


    正确答案:1~n+1

  • 第6题:

    设有一个长度为35的顺序表,要在第5个元素之前插入1个元素(也就是插入元素作为新表的第5个元素),则移动元素个数为()

    • A、30
    • B、31
    • C、5
    • D、6

    正确答案:B

  • 第7题:

    直接插入排序的方法是从第()个元素开始,插入到前边适当位置的排序方法。

    • A、1
    • B、2
    • C、3
    • D、n

    正确答案:B

  • 第8题:

    设顺序线性表中有n个数据元素,则第i个位置上插入一个数据元素需要移动表中()个数据元素;删除第i个位置上的数据元素需要移动表中()个元素。


    正确答案:n-i+1;n-i

  • 第9题:

    单选题
    若对n个元素进行直接插入排序,则进行第i趟排序时,为寻找插入位置最多需要进行()次元素的比较,假定第0号元素放有待查的关键字。
    A

    1

    B

    i-1

    C

    i+1


    正确答案: C
    解析: 暂无解析

  • 第10题:

    单选题
    每次从无序表中取出一个元素,把它插入到有序表中的适当位置,此种排序方法叫做()排序。
    A

    插入

    B

    C

    快速

    D

    归并


    正确答案: A
    解析: 暂无解析

  • 第11题:

    填空题
    设顺序线性表中有n个数据元素,则第i个位置上插入一个数据元素需要移动表中()个数据元素;删除第i个位置上的数据元素需要移动表中()个元素。

    正确答案: n-i+1,n-i
    解析: 暂无解析

  • 第12题:

    单选题
    设有一个长度为18的顺序表,要在第5个元素之前插入1个元素(也就是插入元素作为新表的第5个元素),则移动元素个数为()
    A

    15

    B

    14

    C

    5

    D

    6


    正确答案: D
    解析: 暂无解析

  • 第13题:

    ● 线性表采用顺序存储结构,若表长为 m,且在任何一个合法插入位置上进行插入操作的概率相同,则插入一个元素平均移动 (37) 个元素。


    正确答案:B

  • 第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分)【问题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

  • 第15题:

    设有一个长度为n的顺序表,要在第i个元素之前(也就是插入元素作为新表的第i个元素),插入一个元素,则移动元素个数为()。

    An-i+1

    Bn-i-1

    Cn-i

    Di


    A

  • 第16题:

    如果要将两个升序排列的整型顺序表a中的元素合并到b中(b的空间足够大),合并后表中元素依然升序排列,可以通过多次调用查找函数查找插入位置,再调用()函数来实现插入。


    正确答案:插入

  • 第17题:

    当向一个顺序表插入一个元素时,从插入位置开始向后的所有元素均()一个位置,移动过程是从()向()依次移动没一个元素。


    正确答案:后移;后;前

  • 第18题:

    向一个循环队列中插入元素时,需要首先移动(),然后再向所指位置()新插入的元素。


    正确答案:队列指针;写入

  • 第19题:

    每次从无序表中取出一个元素,把它插入到有序表中的适当位置,此种排序方法叫做()排序。

    • A、插入
    • B、堆
    • C、快速
    • D、归并

    正确答案:A

  • 第20题:

    若对n个元素进行直接插入排序,则进行第i趟排序时,为寻找插入位置最多需要进行()次元素的比较,假定第0号元素放有待查的关键字。

    • A、1
    • B、i-1
    • C、i+1

    正确答案:C

  • 第21题:

    填空题
    如果要将两个升序排列的整型顺序表a中的元素合并到b中(b的空间足够大),合并后表中元素依然升序排列,可以通过多次调用查找函数查找插入位置,再调用()函数来实现插入。

    正确答案: 插入
    解析: 暂无解析

  • 第22题:

    填空题
    若顺序表中的元素是从1位置开始存放的,要在具有n个元素的顺序表中插入一个元素,合法的插入位置是()。

    正确答案: 1~n+1
    解析: 暂无解析

  • 第23题:

    单选题
    设有一个长度为n的顺序表,要在第i个元素之前(也就是插入元素作为新表的第i个元素),插入一个元素,则移动元素个数为()。
    A

    n-i+1

    B

    n-i-1

    C

    n-i

    D

    i


    正确答案: B
    解析: 暂无解析