数据结构--堆

有一个长度为 n 的数组 a,里面的元素都是整数,现有一个整数 B,写程序判断 数组 a 中是否有两个元素的和等于 B 59/100
第十一章 22题

// An highlighted block
def func(arr,d):
    count = list()
    for index, i in enumerate(arr):
        for j in arr[index+1:]:
             if i+j ==d:
                 count.append((i,j))
    return count

if __name__ == "__main__":

    num = [3,3,5,5,2]
    d = 5
    data = func(num,d)
    print(data)

----2020/4/23

----下列关键字序列中,序列 ? 是堆。()

正确答案: D
{16,72,31,23,94,53}
{94,23,31,72,16,53}
{16,53,23,94,31,72}
{16,23,53,31,94,72}

解析:D是小根堆,堆是一种结构,逻辑上像完全二叉树,本质上是int型数组,可以将这些值写成树的节点的形式,父亲节点的值比两个孩子的节点,是小根堆

----堆是一种有用的数据结构。下列关键码序列 是一个堆。
正确答案: D
94,31,53,23,16,72
94,53,31,72,16,23
16,53,23,94,31,72
16,31,23,94,53,72
解析:最大堆和最小堆是二叉堆的两种形式。

最大堆:根结点的键值是所有堆结点键值中最大者,且每个结点的值都比其孩子的值大。

最小堆:根结点的键值是所有堆结点键值中最小者,且每个结点的值都比其孩子的值小

----下列关键字序列为堆的是()?
正确答案: A
100,60,70,50,32,65
60,70,65,50,32,100
65,100,70,32,50,60
70,65,100,32,50,60
32,50,100,70,65,60
50,100,70,65,60,32
解析:最大(最小)堆是一棵每一个节点的键值都不小于(大于)其孩子(如果存在)的键值的树。大顶堆是一棵完全二叉树,同时也是一棵最大树。小顶堆是一棵完全完全二叉树,同时也是一棵最小树。

----题目来源于王道论坛
已知关键字序列5,8,12,19,28,20,15,22是小根堆(最小堆),插入关键字3,调整后得到的小根堆是()。

正确答案: A
3,5,12,8,28,20,15,22,19
3,5,12,19,20,15,22,8,28
3,8,12,5,20,15,22,28,19
3,12,5,8,28,20,15,22,19

解析:在这里插入图片描述

----就分类算法所用的辅助空间而言,堆分类、快速分类和归并分类的关系是()
正确答案: A
堆分类<快速分类<归并分类
堆分类<归并分类<快速分类
堆分类>归并分类>快速分类
堆分类>快速分类>归并分类
解析:在这里插入图片描述

-----堆肯定是一棵平衡二叉树()
正确答案: B


解析:堆是二叉树,但不保证是平衡二叉树,因为堆中左右子树的高度差并不保证小于等于1。

----有组记录的排序码为(46,79,56,38,40,84),则利用堆排序的方法建立的初始堆为【 】
正确答案: B
79,46,56,38,40,80
84,79,56,38,40,46
84,79,56,46,40,38
84,56,79,40,46,38
解析:选B。堆排序是基于最大堆来实现的。

----将关键字序列50,40,95,20,15,70,60,45,80调整成一个小根堆,堆结构是15,20,60,45,40,70,95,50,80()。
正确答案: A


解析:在这里插入图片描述

----最坏情况下 insert sort, quick sort ,merge sort 的复杂度分别是多少?
正确答案: B
O(nn),O(nlogn),O(nn)
O(nn),O(nn),O(nlogn)
O(n*n),O(nlogn),O(nlogn)
O(nlogn),O(nlogn),O(nlogn)
解析:在这里插入图片描述

----已知最大堆的关键字序列为93,72,48,53,45,30,18,36,15,35,删除关键字72,调整后得到的最大堆是( )
正确答案: A
93,53,48,36,45,30,18,35,15
93,48,53,36,45,30,18,35,15
93,53,48,45,30,36,18,35,15
93,53,48,45,30,36,35,18,15
解析:在这里插入图片描述


下列关于堆和栈的区别描述错误的有?
正确答案: A
申请方式的不同,堆是系统自动分配,栈是自己申请
栈的大小是固定的,堆的大小受限于系统中有效的虚拟内存
栈的空间由系统决定何时释放,堆需要自己决定何时去释放
堆的使用容易产生碎片,但是用起来最方便
解析:堆:自己做菜自己吃,什么时候收盘子自己知道,但是可能会浪费(产生碎片),因为可能自己一个人吃不完。 桟:公司食堂,你吃饭由食堂工作人员帮你打饭和分配位置,吃完了工作人员帮你收盘子。你浪费粮食(碎片)那是不可能的,因为食堂会把碎片拿去喂猪。


下列数据中,()是非线性数据结构
正确答案: C D

队列
完全二叉树

解析:数据的逻辑结构分为线性结构和非线性结构。
常用的线性结构有:线性表,栈,队列,双队列,数组,串。
常见的非线性结构有:二维数组,数组,广义表,树(二叉树等),图,堆。

----对于根元素为最小值的二叉堆,下面说法正确的是
正确答案: A D
删除最小元素的复杂度是o(logn)
插入新元素的复杂度是o(1)
合并两个堆的复杂度是o(logn)
查询最小元素的复杂度是o(1)
解析:A.删除最小元素,即要调整堆,复杂度为O(logn)
B.插入新元素,要和堆中元素进行比较,寻找插入位置,复杂度为O(logn)
C.合并两个堆,即堆1的每个元素插入堆2,由B可得,复杂度为O(nlogn)
D.查询最小元素,小顶堆的最小元素即为堆顶,复杂度为O(1)

----下列说法错误的是?
正确答案: B
struct声明的类型是值类型
值类型是在堆上分配的
值类型不会被垃圾回收
值类型不需要指针来引用
引用类型在堆上分配,值类型在栈上分配
解析:在这里插入图片描述


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值