堆:

大顶堆:根结点比左右子树更大;小顶堆:根节点比左右子树更小。

  1. 定义一个堆:

    const int main=100;//heap为堆,n为元素个数
    int heap[maxn],n=10;
    
  2. 调整堆:
    //在heap数组在[low,high]范围进行向下调整
    //其中low为欲调整的结点的数组下标,high一般为堆的最后一个元素的数组下标
    void downAdjust(int low,int high){int i=low,j=2*i;  //i为欲调整结点,j为其左孩子while(j<=high){  //存在孩子结点//如果右孩子存在,且右孩子的值大于左孩子if(j+1<=high&&heap[j+1]>heap[j]){j=j+1;  //让j存储右孩子下标}//如果孩子中最大的权值比欲调整结点i大if(heap[j]>heap[i]){swap(heap[j],heap[i]);  //交换最大权值的孩子与欲调整结点ii=j;  //保持i为欲调整结点、j为i的左孩子j=2*i;}else{break;   //孩子的权值比欲调整结点i要小,调整结束}}
    }
  3. 建立堆:
    void createHeap(){for(int i=n/2;i>=1;i--){downAdjust(i,n);}
    }
  4. 删除堆顶元素:
    void deleteTop(){heap[1]=heap[n--];  //用最后一个元素覆盖堆顶元素,并让元素个数减1downAdjust(1,n);   //向下调整堆顶元素
    }
  5. 在堆内添加元素:
    //添加元素向上操作
    //对heap数组在[low,high]范围进行向上调整
    //其中,对low一般设置为1,high表示欲调整结点的数组下标
    void upAdjust(int low,int high){int i=high,j=i/2;  //i为欲调整结点,j为其父亲while(j>=low){//父亲权值小于欲调整i的权值if(heap[j]>heap[i]){swap(heap[j],heap[i]);i=j;j=i/2;}else{break;}}
    }//添加元素x
    void insert(int x){heap[++n]=x;    //让元素个数加1,然后经数组末尾赋值为xupAdjust(1,n);    //向上调整新加入的结点n
    }
  6. 堆排序:
    void heapSort(){createHeap();  //建堆for(int i=n;i>1;i--){swap(heap[i],heap[1]);downAdjust(1,i-1);}
    }

【堆】堆的基本操作总结相关推荐

  1. 堆-堆的基本概念与操作

    堆(heap)又名优先队列(priority queue),是一种特殊的树. 1. 堆的两个性质: ① structure property: 是一个完全二叉树: 因此可用数组表示,BT[n+1]的形 ...

  2. python堆堆乐教程_python堆排序,详细过程图和讲解,这样做小白都会

    ### 正文前的扯淡 之前电话面试一个公司时,面试官让写一个堆排序,遗憾的是我忘了堆排序的思想了,所以直接说不会写,这次电面也以失败告终...知耻后勇,这几天在网上找了很多写堆排序的帖子,但是帖子质量 ...

  3. BZOJ1078 [SCOI2008]斜堆 堆

    欢迎访问~原文出处--博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1078 题意概括 斜堆(skew heap)是一种常用的数据结构.它也是二叉树,且满足与二叉堆相同的 ...

  4. 1155 Heap Paths (30 分)【难度: 一般 / 知识点: 堆 堆的遍历】

    https://pintia.cn/problem-sets/994805342720868352/problems/1071785408849047552 #include<bits/stdc ...

  5. 时间管理无非就是一个玩耍俄罗斯方块的过程,堆堆堆哈哈哈哈

  6. Java数据结构与算法(26) - ch12堆(堆实现)

    {TODO} 转载于:https://www.cnblogs.com/thlzhf/p/4089035.html

  7. AutoJs学习-堆堆乐自动

    往期文章分享 点击跳转=><导航贴>- Unity手册,系统实战学习 点击跳转=><导航贴>- Android手册,重温移动开发

  8. 堆的创建以及堆的基本操作

    一.堆的基本概念 概念:将元素储存在一维数组中--->形成一颗完全二叉树 条件限制:每个节点比其孩子节点都大(小)--->大(小)堆 大堆: 二.堆的特性 特性:堆顶元素是所有元素中最大( ...

  9. 数据结构与算法---堆的基本操作

    堆的定义 堆可以看做是一种特殊的树,堆结构满足两个条件: 1.堆是一个完全二叉树. 2.堆的每一个节点的值都大于等于(或小于等于)其子节点的值. 大于等于子节点的值我们叫它:大顶堆 小于等于子节点的值 ...

  10. 数据结构——堆(转载)

    堆常用来实现优先队列,在这种队列中,待删除的元素为优先级最高(最低)的那个.在任何时候,任意优先元素都是可以插入到队列中去的,是计算机科学中一类特殊的数据结构的统称 一.堆的定义 最大(最小)堆是一棵 ...

最新文章

  1. Maya初学者完整的3D动画大师班视频教程
  2. 深入了解 TabNet :架构详解和分类代码实现
  3. 【中级软考】什么是实时操作系统?(RTOS:Real Time Operating System)
  4. 疾控中心计算机管理员权限,疾控中心健康证分权限管理系统使用说明
  5. 2017 阿里技术-年度精选
  6. 【Android Studio安装部署系列】十一、Android studio获取数字签名信息
  7. 织梦dedecms内核自适应移动POS机刷卡机招商加盟企业网站源码
  8. linux readelf,readelf命令常用参数介绍
  9. php 图片印章_PHP实现中文圆形印章的特效
  10. 压缩的Swf文件利用Python解压
  11. 八皇后问题----Java实现
  12. ThreadLocal工具类
  13. 2022年湖北省文化产业示范园(基地)发展专项资金申报条件以及奖励补贴情况!
  14. 计算机应用世界排名,全球计算机杂志排名
  15. Android 启用/禁用通过otg连接T卡功能
  16. 英雄联盟手游注册及下载教程(ios及安卓android最新最全版)
  17. 就“敏捷软件开发(第二版)”书评答译者
  18. cocos creator 实现手机震动的效果
  19. 浅谈跨站请求伪造(CSRF)
  20. Tabby-安装使用教程,可定制的跨平台终端神器,免费开源,ssh与sftp使用技巧,常用和高端功能介绍,多窗口显示

热门文章

  1. Unity屏幕射线碰撞
  2. PL/SQL DEVELOPER 使用小技巧
  3. ms sql 聚合事例
  4. paho mqtt 订阅主题的处理注意事项
  5. 逻辑分析仪抓取CAN总线数据
  6. TensorFlow基于cifar10数据集实现进阶的卷积网络
  7. 用SVC模型完成对手写数字的分类
  8. stdthread(7)并发unique_lock灵活性
  9. 解决Ubuntu与Windows之间无法复制粘贴问题
  10. Android init.rc执行顺序