`
ch_apm70
  • 浏览: 922 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

大顶堆的实现

 
阅读更多

 

小(大)顶堆的实现

 

 

1. 用数组表示二叉树

 

二叉树表示如下图:

 

 

用数组表示二叉树

2 3 4 6 8
           A0            A1            A2            A3            A4

 

大顶堆特性

1. 子节点大于(小于)父节点

2. 如果父节点为n,左子节点为2n+1,右子节点为2n+2

3. 如果该节点为n,其父节点为(n-1)/2

 

压栈:

1.在数组的最末尾插入数据,满足二叉树的特性

2.将新插入节点到顶点间路径的节点排序,满足大顶堆的特性

 

 

 

弹出:

1.将数组最后一项和数组第一项交换,弹出数组最后一项

2.将数组第一项下沉到某一特定层数。

 

插入和删除都是O(lgN)

 

分享到:
评论

相关推荐

    数据结构 大顶堆的c实现

    一个 用c编写的大顶堆,包括max-keep,sort,insert等操作

    堆排序--大顶堆排序

    大顶堆排序是堆排序的一种,通过构建大顶堆来实现排序的过程。下面是对大顶堆排序的详细解释: 什么是大顶堆? 大顶堆是一种特殊的完全二叉树,它满足以下条件: * 对于每个非叶子节点,节点的值大于或等于其孩子...

    大顶堆C语言实现源码(XJTU)

    大顶堆C语言实现源码(XJTU)

    大顶堆类(C++封装)

    利用C++实现了大顶堆,并封装了常用操作,包括:插入、删除、堆排序等。通过自己实现堆的常用操作,可以对堆的原理有更深的理解。

    大顶堆应用:POJ2010

    不过,我们可以根据标签“源码”和“工具”推测,这个问题的解答可能包含了实现大顶堆的源代码,并且这个代码可能是作为一个通用工具或者模板来使用的,以便解决类似的问题。 在提供的压缩文件“11132845_AC_3422MS...

    采用堆写的优先队列_源代码

    本段代码通过定义一个`HeapType`结构体来实现大顶堆,并提供了三种主要的操作方法:`HeapAdjust()`用于调整堆使其保持大顶堆性质;`Insert()`用于向堆中插入新元素;`FindMax()`和`ExtractMax()`分别用于查找和删除...

    C++小顶堆的类模板实现

    C++小顶堆的实现,其中用到了类模板的知识,代码附有详细注释,主函数中附上了测试代码。欢迎私信讨论!

    这是一份C++的内存池实现的代码,采用了链表和大顶堆两种实现方式

    这是一份C++的内存池实现的代码,采用了链表和大顶堆两种实现方式。并且这份代码是经过高并发的大量数据验证无误。一些跟主要逻辑无关的基本方法的实现,如日志、锁互斥等实现没有包含进来,你可以自己修改他.rar

    优先队列 优先队列.rar

    在C++标准库中,优先队列(priority_queue)是通过STL(Standard Template Library)提供的,它底层基于大顶堆实现。用户可以使用`<queue>`头文件中的`priority_queue`模板类来创建和操作优先队列。以下是一些基本...

    算法-树形结构- 优先队列.rar

    7. **C++中的优先队列**:在C++中,`<queue>`库提供了`priority_queue`模板类,它是一个大顶堆实现的优先队列,可以通过自定义比较函数进行定制。 这个压缩包中的“树形结构-优先队列.pdf”文件可能详细介绍了这些...

    四种排序算法时间记录(C语言实现快排归并插入大顶堆)

    课程实验数据结果,C语言实现快排归并插入大顶堆。 内含5W-50W随机生成整数每隔5W数据量排序一次的时间记录,并对其进行了均值和方差的比较。

    11道数据结构和算法设计与分析习题

    7. **大顶堆实现优先队列**:大顶堆是一种能够快速找到最大元素的数据结构,可以轻松实现插入、删除和修改优先级的功能。维护堆的性质是关键,插入和删除都需要调整堆。 8. **套汇问题**:这是一个典型的图论问题,...

    C++实现优化冒泡排序、首/尾点快速排序、大顶堆排序

    C++实现优化冒泡排序、首/尾点快速排序、大顶堆排序,包含main函数,快速排序中需要手动输入排序元素数量和元素

    大(小)顶堆练习:POJ 1442

    在计算机科学中,大顶堆和小顶堆是两种特殊的二叉堆,它们分别保证了根节点是其子树中最大或最小的元素,常用于实现优先队列。 大顶堆通常用于快速找到当前最大元素,例如在求解最大值问题或执行堆排序时。小顶堆则...

    Java 堆排序实例(大顶堆、小顶堆)

    Java 堆排序实例(大顶堆、小顶堆) 在计算机科学中,堆排序是一种基于堆这种数据结构的排序算法。堆是一种近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆...

    北工大2003数据结构

    - **应用解析**:堆排序是一种基于完全二叉树性质的排序算法,通过构建小顶堆或大顶堆实现。平衡二叉树则是一种自平衡的二叉搜索树,通过旋转操作维持树的高度平衡,从而确保查找、插入和删除操作的时间复杂度为O...

    C++之常见顶堆问题汇总

    C++中的顶堆实现 - **大顶堆**:默认情况下,`priority_queue`就是一个大顶堆,用于存储元素时,默认按照降序排列。 ```cpp priority_queue<int> que; que.push(1); que.push(3); que.push(2); // Top ...

    构建大顶堆leetcode-data-structures-and-algorithms:数据结构和算法&编码访谈&LeetCode

    构建大顶堆 leetcode 数据结构与算法日常练习 重学数据结构与算法 提升自己的编程能力与逻辑思维能力 (๑•̀ㅂ•́)و✧ 番外篇  --- 数组 concat 函数 splice 函数 链表 单向链表 双向链表 循环链表 有序链表 栈 ...

    详解堆的javascript实现方法

    堆分为两种主要类型:大顶堆(Max Heap)和小顶堆(Min Heap)。大顶堆中每个节点的键值都大于或等于其子节点的键值,而小顶堆则相反,每个节点的键值都小于或等于其子节点。 堆的几个关键概念: 1. 父节点和子节点...

    数据结构 算法的实现

    - **建初始大顶堆**:构建满足大顶堆条件的堆,通常从最后一个非叶子节点开始,自底向上检查并调整节点位置。 - **对初始大顶堆排序**:交换堆顶元素和末尾元素,缩堆,重复此过程直至排序完成。 - **建初始小顶堆**...

Global site tag (gtag.js) - Google Analytics