漫画算法笔记

二叉堆基本操作

#include <iostream>
#include <stdlib.h>
#include <vector>
using namespace std;//上浮调整
template<typename T>
void upAdjust(vector<T> &vec)
{int childIndex = vec.size() - 1;int parentIndex = (childIndex - 1) / 2;//temp保存插入的叶子节点值,用于最后的赋值T temp = vec[childIndex];while (childIndex > 0 && temp < vec[parentIndex]){vec[childIndex] = vec[parentIndex];childIndex = parentIndex;parentIndex = (childIndex - 1) / 2;}vec[childIndex] = temp;
}//下沉调整
template<typename T>
void downAdjust(vector<T> &vec, int parentIndex)
{//temp保存父节点值,用于最后的赋值T temp = vec[parentIndex];int childIndex = 2 * parentIndex + 1;while( childIndex < vec.size() ){//如果有右孩子节点,且右孩子节点小于左孩子的值,则定位到右孩子节点if ( childIndex + 1 < vec.size() && vec[childIndex + 1] < vec[childIndex]  ){childIndex++;}//如果父节点小于任何一个孩子的值,则直接跳出if (temp <= vec[childIndex])break;vec[parentIndex] = vec[childIndex];parentIndex = childIndex;childIndex = 2 * childIndex + 1;}vec[parentIndex] = temp;
}void test01()
{vector<int> vec = {1, 3, 2, 6, 5, 7, 8, 9, 10, 0};upAdjust(vec);
}void test02()
{vector<int> vec = {7, 1, 3, 10, 5, 2, 8, 9, 6};//从最后一个非叶子节点开始,做下沉操作for ( int i = (vec.size() - 2) / 2; i>=0; --i ){downAdjust(vec, i);}
}int main(int argc, char** argv)
{//test01();test02();system("pause");return 0;
}

漫画算法笔记 二叉堆基本操作相关推荐

  1. 最短路径——Dijkstra算法以及二叉堆优化(含证明)

    一般最短路径算法习惯性的分为两种:单源最短路径算法和全顶点之间最短路径.前者是计算出从一个点出发,到达所有其余可到达顶点的距离.后者是计算出图中所有点之间的路径距离. 单源最短路径 Dijkstra算 ...

  2. 【数据结构与算法】二叉堆V2.0的Java实现

    更新说明 我们在此前已经编写过简单版的二叉大根堆V1.0,这次,换成二叉小根堆,命名为二叉堆V2.0. 大家也知道,堆是完全二叉树,存储方式借助动态数组实现顺序存储,依赖于父子结点之间的index关系 ...

  3. 看动画学算法之:二叉堆Binary Heap

    文章目录 简介 二叉堆的特性 二叉堆的作用 二叉堆的构建 获取二叉堆的最大值 二叉堆的插入 insert操作的时间复杂度 二叉堆的提取Max操作 extractMax的时间复杂度 创建二叉堆 简介 我 ...

  4. 【数据结构与算法】二叉堆与二叉搜索树的区别

    问题描述 记得刚学习数据结构的时候,就容易混淆二叉堆和二叉搜索树,其实虽说堆也是一种完全二叉树,但二者差别还是挺大的,本文试做分析. 逻辑结构 二叉堆和二叉搜索树都是结点带权重,并在父子结点间满足某种 ...

  5. 数据结构之优先队列--二叉堆(Java实现)

    前言 数据结构队列的学习中,我们知道队列是先进先出的.任务被提交到队列中,按照先进先出的原则 对各个任务进行处理.不过在现实的情况下,任务通常有着优先级的概念,例如短任务.管理员的操作 应该优先执行. ...

  6. ReviewForJob——二叉堆优先队列的实现(三种堆节点类型——int + struct HeapNode + struct HeapNode*)

    [0]README 1)本文旨在给出 二叉堆优先队列的实现 的代码实现和分析, 而堆节点类型 不外乎三种: 一, 基本类型如int: 二,结构体类型 struct HeapNode: 三,结构体指针类 ...

  7. 大根堆的删除c语言,二叉堆(一)之 C语言详解

    本文介绍二叉堆,二叉堆就是通常我们所说的数据结构"堆"中的一种.和以往一样,本文会先对二叉堆的理论知识进行简单介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现: ...

  8. java 二叉堆_二叉堆(三)之 Java的实现

    概要 前面分别通过C和C++实现了二叉堆,本章给出二叉堆的Java版本.还是那句话,它们的原理一样,择其一了解即可. 二叉堆的介绍 二叉堆是完全二元树或者是近似完全二元树,按照数据的排列方式可以分为两 ...

  9. 二叉堆 - 原理与实现

    1. 概要 本章介绍二叉堆,二叉堆就是通常我们所说的数据结构中"堆"中的一种.和以往一样,本文会先对二叉堆的理论知识进行简单介绍,然后给出C语言的实现.后续再分别给出C++和Jav ...

最新文章

  1. [MySQL FAQ]系列 -- 为何innodb表select count(*)很慢
  2. 可以把阿里云上面的一些介绍和视频都看看
  3. 银行计算机设备管理 总结,【2017年银行自助设备中心年终总结】_银行自助设备工作总结...
  4. 一种思路:策略模式 + 反射工厂,很好的实现了开闭原则
  5. Python中关于‘self’的种种用法笔记
  6. android四大组件五大存储六大布局,物联网研报:物联网进入规模化应用时代
  7. 光流 | OpenCV3实现LK Optical Flow(代码类)
  8. python干啥用_用python内置函数能干些什么?
  9. 查看h3c服务器raid信息,h3c 服务器 raid配置
  10. 从Paxos到Multi-Paxos
  11. Persistent Data Structures(可持久化的数据结构)
  12. 太厉害了!推荐几款 Redis 可视化工具
  13. STM32F072在8M下的软件延时
  14. 互联网络彻底瘫痪的可能性研究
  15. 计算机开机自动进入bios,为什么电脑一开机就自动进入BIOS界面 电脑开机重复进入bios解决方法...
  16. APC型光纤活动连接器有何特点?适合使用在什么场景?
  17. python3 urllib 内存泄露_【专家专栏】张昊 | 从urllib2的内存泄露看python的GC
  18. 【操作教程】如何手动配置EasyNVR安防视频云服务平台的Onvif探测功能?
  19. 深信服下一代防火墙介绍
  20. 用亦或逻辑处理交换方法

热门文章

  1. LoRaWAN与其他LPWA方案对比,LoRa设备开发参考指南(五)
  2. RAC 常用管理命令
  3. C++xml文件操作 CMarkup学习方法说明
  4. asp.net实现在线人数及访问量总计
  5. MEMS传感器在汽车领域的应用
  6. 音乐相册源码php,PHP+MySQL音乐相册网站的设计与实现
  7. Java使用QQ邮箱发送纯文本格式信息
  8. 广工 AnyviewC 数据结构习题 第五章
  9. ros配置安川gp88
  10. 计算机专业毕业实习重要吗?计算机专业实习方向