【堆】堆的基本操作总结
堆:
大顶堆:根结点比左右子树更大;小顶堆:根节点比左右子树更小。
- 定义一个堆:
const int main=100;//heap为堆,n为元素个数 int heap[maxn],n=10;
- 调整堆:
//在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要小,调整结束}} }
- 建立堆:
void createHeap(){for(int i=n/2;i>=1;i--){downAdjust(i,n);} }
- 删除堆顶元素:
void deleteTop(){heap[1]=heap[n--]; //用最后一个元素覆盖堆顶元素,并让元素个数减1downAdjust(1,n); //向下调整堆顶元素 }
- 在堆内添加元素:
//添加元素向上操作 //对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 }
- 堆排序:
void heapSort(){createHeap(); //建堆for(int i=n;i>1;i--){swap(heap[i],heap[1]);downAdjust(1,i-1);} }
【堆】堆的基本操作总结相关推荐
- 堆-堆的基本概念与操作
堆(heap)又名优先队列(priority queue),是一种特殊的树. 1. 堆的两个性质: ① structure property: 是一个完全二叉树: 因此可用数组表示,BT[n+1]的形 ...
- python堆堆乐教程_python堆排序,详细过程图和讲解,这样做小白都会
### 正文前的扯淡 之前电话面试一个公司时,面试官让写一个堆排序,遗憾的是我忘了堆排序的思想了,所以直接说不会写,这次电面也以失败告终...知耻后勇,这几天在网上找了很多写堆排序的帖子,但是帖子质量 ...
- BZOJ1078 [SCOI2008]斜堆 堆
欢迎访问~原文出处--博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1078 题意概括 斜堆(skew heap)是一种常用的数据结构.它也是二叉树,且满足与二叉堆相同的 ...
- 1155 Heap Paths (30 分)【难度: 一般 / 知识点: 堆 堆的遍历】
https://pintia.cn/problem-sets/994805342720868352/problems/1071785408849047552 #include<bits/stdc ...
- 时间管理无非就是一个玩耍俄罗斯方块的过程,堆堆堆哈哈哈哈
- Java数据结构与算法(26) - ch12堆(堆实现)
{TODO} 转载于:https://www.cnblogs.com/thlzhf/p/4089035.html
- AutoJs学习-堆堆乐自动
往期文章分享 点击跳转=><导航贴>- Unity手册,系统实战学习 点击跳转=><导航贴>- Android手册,重温移动开发
- 堆的创建以及堆的基本操作
一.堆的基本概念 概念:将元素储存在一维数组中--->形成一颗完全二叉树 条件限制:每个节点比其孩子节点都大(小)--->大(小)堆 大堆: 二.堆的特性 特性:堆顶元素是所有元素中最大( ...
- 数据结构与算法---堆的基本操作
堆的定义 堆可以看做是一种特殊的树,堆结构满足两个条件: 1.堆是一个完全二叉树. 2.堆的每一个节点的值都大于等于(或小于等于)其子节点的值. 大于等于子节点的值我们叫它:大顶堆 小于等于子节点的值 ...
- 数据结构——堆(转载)
堆常用来实现优先队列,在这种队列中,待删除的元素为优先级最高(最低)的那个.在任何时候,任意优先元素都是可以插入到队列中去的,是计算机科学中一类特殊的数据结构的统称 一.堆的定义 最大(最小)堆是一棵 ...
最新文章
- Maya初学者完整的3D动画大师班视频教程
- 深入了解 TabNet :架构详解和分类代码实现
- 【中级软考】什么是实时操作系统?(RTOS:Real Time Operating System)
- 疾控中心计算机管理员权限,疾控中心健康证分权限管理系统使用说明
- 2017 阿里技术-年度精选
- 【Android Studio安装部署系列】十一、Android studio获取数字签名信息
- 织梦dedecms内核自适应移动POS机刷卡机招商加盟企业网站源码
- linux readelf,readelf命令常用参数介绍
- php 图片印章_PHP实现中文圆形印章的特效
- 压缩的Swf文件利用Python解压
- 八皇后问题----Java实现
- ThreadLocal工具类
- 2022年湖北省文化产业示范园(基地)发展专项资金申报条件以及奖励补贴情况!
- 计算机应用世界排名,全球计算机杂志排名
- Android 启用/禁用通过otg连接T卡功能
- 英雄联盟手游注册及下载教程(ios及安卓android最新最全版)
- 就“敏捷软件开发(第二版)”书评答译者
- cocos creator 实现手机震动的效果
- 浅谈跨站请求伪造(CSRF)
- Tabby-安装使用教程,可定制的跨平台终端神器,免费开源,ssh与sftp使用技巧,常用和高端功能介绍,多窗口显示