首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。 【说明】 堆数据结构定义如下: 对于n个元素的关键字序列{a1,a2,…,an},当且仅当满足下列关系时称其为堆。 在一个堆中,若堆顶元素为最大元素,则称为大顶堆;若堆顶元素
阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。 【说明】 堆数据结构定义如下: 对于n个元素的关键字序列{a1,a2,…,an},当且仅当满足下列关系时称其为堆。 在一个堆中,若堆顶元素为最大元素,则称为大顶堆;若堆顶元素
admin
2011-04-06
47
问题
阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。
【说明】
堆数据结构定义如下:
对于n个元素的关键字序列{a1,a2,…,an},当且仅当满足下列关系时称其为堆。
在一个堆中,若堆顶元素为最大元素,则称为大顶堆;若堆顶元素为最小元素,则称为小顶堆。堆常用完全二叉树表示,图4—1是一个大顶堆的例子。
堆数据结构常用于优先队列中,以维护由一组元素构成的集合。对应于两类堆结构,优先队列也有最大优先队列和最小优先队列,其中最大优先队列采用大顶堆,最小优先队列采用小顶堆。以下考虑最大优先队列。
假设现已建好大顶堆A,且已经实现了调整堆的函数heapify(A,n,index)。
下面将C代码中需要完善的三个函数说明如下:
(1)heapMaximum(A):返回大顶堆A中的最大元素。
(2)heapExtractMax(A):去掉并返回大顶堆A的最大元素,将最后一个元素“提前”到堆顶位置,并将剩余元素调整成大顶堆。
(3)maxHeaplnseit(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)函数maxHeaplnsert
int maxHeaplnsert(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
=A->int_array[PARENT(i)];
i=PARENT(i);
}
(5)
return 0;
}
若将元素10插入到堆A=(15,13,9,5,12,8,7,4,0,6,2,1)中,调用maxHeaplnsert函数进行操作,则新插入的元素在堆A中第(9)个位置(从1开始)。
选项
答案
(9)3
解析
依照maxHeapInsert的算法,可有如下几步:
第一步:i=13 PARENT(i)=6 key=10 A->int_array [PARENT(i)]=8
由于key>A->int_array[PARENT(i)]
所以符合while循环条件,执行:
A->int_array
=A->int_array[PARENT(i)];
i=PARENT(i);
即:
第二步:i=6 PARENT(i)=3 key=10 A->int_array [PARENT (i)]=9
由于key>A->int_array[PARENT(i)]
所以符合while循环条件,执行:
A->int_array
=A->int_array[PARENT(i)];
i=PARENT(i);
即:
第三步:i=3 PARENT(i)=1 key=10 A->int_array [PARENT(i)]=15
由于key
int_array[PARENT(i)]
所以不符合while循环条件,跳出循环。
执行:A->int_array
=key;
即:
所以,插入元素10的位置在第三个位置。
转载请注明原文地址:https://kaotiyun.com/show/nlDZ777K
本试题收录于:
软件设计师下午应用技术考试题库软考中级分类
0
软件设计师下午应用技术考试
软考中级
相关试题推荐
在一个完整的功能测试过程中,______不属于应该编写的测试文档。A.测试需求文档B.测试用例文档C.测试标准D.问题报告单
软件测试信息流的输入包括______。①软件配置(包括软件开发文档、目标执行程序、数据结构)②开发工具(开发环境、数据库、中间件等)③测试配置(包括测试计划、测试用例、测试驱动程序等)④测试工具(为提高软件测试效率,使用测试
在各种不同的软件需求中,()描述了产品必须要完成的任务,可以在用例模型中予以说明。
防火墙不具备__________功能。
以下关于软件测试分类定义的叙述,不正确的是(42)。
若计算机存储数据采用的是双符号位(00表示正号、11表示负号),两个符号相同的数相加时,如果运算结果的两个符号位经()运算得1,则可断定这两个数相加的结果产生了溢出。
在结构化分析模型中,______描述了所有在目标系统中使用的和生成的数据对象。
设数组a[0..n—1,0..m一1](n>1,m>1)中的元素以行为主序存放,每个元素占用4个存储单元,则数组元素a[i,j](0≤i
结构化分析(StructuredAnalysis,SA)是面向数据流的需求分析方法,______不属于SA工具。A.分层的数据流图B.数据词典C.问题分析图D.描述加工逻辑的结构化语言、判定表或判定树
随机试题
下面四个选项中正确的是()。
肺部影像为空洞性病变可见于下列哪些疾病
()都属于启发式策略。
“揠苗助长”违背了幼儿身心发展的
预期社会化是一种指向未来角色的社会学习过程。在这一过程中,人们要学习的不是现在要扮演的角色,而是将来要扮演的角色。根据上述定义,下列属于预期社会化的是:
某团体从甲地到乙地,甲、乙两地相距100千米,团体中一部分人乘车先行,余下的人步行,先坐车的人到途中某处下车步行,汽车返回接先步行的那部分人,已知步行速度为8千米/小时,汽车速度为40千米/小时。问使团体全部成员同时到达乙地需要多少时间?
=______.
SowhyisGooglesuddenlysointerestedinrobots?That’sthequestioneveryone’saskingafteritemergedthismonththatthein
A、我不想说这些B、说出来就好了C、我不知怎么说D、我已经生病了C“想说说不出来”表示不知道怎么说,所以选择C。
Whatisthetopicofthepassage?
最新回复
(
0
)