大顶堆删除最大值_C++|使用STL算法创建、调整、输出最大堆、最小堆

最大堆(又叫大根堆、大顶堆)和最小堆是二叉堆的两种形式,一类很重要的数据结构,如用于堆排序等。

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

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

下面以大根堆为例,来说明其入堆和出堆的操作:

入堆,插入:向上渗透(先是插入堆的最后位置,然后按最大堆的规则调整到适当位置);

出堆,删除:向下渗透(第一个元素出堆,从第二层开始,较大的元素往上渗透,将最后一个元素赋值给倒数第二层上的当前元素。

代码:

#include using namespace std;const int MAX = 55;typedef struct Heap{    int sizeHeap;    int* heapData;}HEAP,*LPHEAP;LPHEAP createHeap(){    LPHEAP heap=(LPHEAP)malloc(sizeof(HEAP));    heap->sizeHeap=0;    heap->heapData=(int*)malloc(sizeof(int)*MAX);    return heap;}int size(LPHEAP heap){    return heap->sizeHeap;}int empty(LPHEAP heap){    return heap->sizeHeap==0;}void moveToCorrectPos(LPHEAP heap, int curPos)//向上渗透,curPos一般取最后一个元素的下标{    while(curPos>1)    {        int Max=heap->heapData[curPos];        int parentIndex=curPos/2;        if(Max>heap->heapData[parentIndex])        {            heap->heapData[curPos]=heap->heapData[parentIndex];            heap->heapData[parentIndex]=Max;            curPos=parentIndex;//向上移动        }        else        {            break;        }    }}void insertHeap(LPHEAP heap, int data) // 放到当前堆的最后面并按条件往上移{    ++heap->sizeHeap;    heap->heapData[heap->sizeHeap]=data;    moveToCorrectPos(heap,heap->sizeHeap);}int popHeap(LPHEAP heap){    int Max=heap->heapData[1];    int curPos=1;    int childIndex=curPos*2;    while(childIndex<=heap->sizeHeap)    {        int temp = heap->heapData[childIndex];        if(childIndex+1<=heap->sizeHeap && tempheapData[childIndex+1])        {            temp=heap->heapData[++childIndex];        }        heap->heapData[curPos]=temp;        curPos=childIndex;//下移一层        childIndex*=2;    }    heap->heapData[curPos]=heap->heapData[heap->sizeHeap];    --heap->sizeHeap;    return Max;}void main(){    LPHEAP heap=createHeap();    for(int i=1;i<11;++i)    {        insertHeap(heap,i);    }    for(i=1;i<11;++i)    {        printf("%d",heap->heapData[i]);    }    printf("");    while(!empty(heap))    {        printf("%d",popHeap(heap));    }    system("pause");}/*10 9 6 7 8 2 5 1 4 310 9 8 7 6 5 4 3 2 1*/

在STL算法库中,有一簇函数专门用来将某一个序列容器调整为大堆或小堆:

(以下函数参数_Compare,可以是less<>(),与大顶堆相关;或者greater<>(),与小顶堆相关)

make_heap(_RAIter,_RAIter,_Compare): 生成大顶堆或小顶堆;

push_heap(_RAIter,_RAIter,_Compare) :如果有向堆(容器)中插入(.push_back())元素,需要使用此函数来调整大堆或小堆;

pop_heap(_RAIter,_RAIter,_Compare) :将堆(容器)中的第一个元素与最后一个元素交换,除最后一个元素以外,前面的元素按大堆或小堆规则调整。由此,如果删除(.pop_back())最后一个元素,剩下的元素又是一个大堆或小堆。

具体细节见代码和注释:

#include #include #include #include using namespace std;void printVector(vector vc){    copy(vc.begin(),vc.end(),ostream_iterator(cout," "));cout<b;}bool lesser(int a,int b){return a vc, FP fp){//int n = hv.size();    //for(int i=0;i bigHeap;bigHeap.assign(dim,dim+cnt);    cout<())make_heap(bigHeap.begin(),bigHeap.end(),less()); // 缺省less()cout< smallHeap;smallHeap.assign(dim,dim+cnt);// 使用vector建立小堆(greater())make_heap(smallHeap.begin(),smallHeap.end(),greater());cout<());cout<

-End-

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502823.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

群晖 root_最新群晖DSM7.0降级教程

小广告:隔壁网1212活动开始,群晖DS920+和DS220+满300减40,购买酷狼8T赠送隔壁网邀请码和1年VIP,大刀价格微信咨询momo。 很多童靴,升级到DSM7.0后第三方套件无法用了,比如transmission,玩PT下载的童靴,需要谨慎升级。 这个方法wjq_xp分享的,非常感谢,前面部分和旧的降…

update关联一个视图的时候特别慢_实现一个简单的Vue.js

原文转自 https://const_white.gitee.io/gitee-blog/blog/vue/mini-vue/Vue响应式原理图片引自 孟思行 - 图解 Vue 响应式原理乞丐版 mini-vue实现mini-vue之前&#xff0c;先看看官网的描述。在Vue官网&#xff0c;深入响应式原理中&#xff0c;是这样说明的&#xff1a;每个组…

接口500什么原因_80%小餐饮店几乎都“活“不过500天,为什么?都在这5个原因里...

餐饮创业分享达人 原创作者&#xff1a;秦.关中我是餐饮创业实战经验分享达人&#xff0c;想要了解和学习更多餐饮实战经验&#xff0c;记得关注我哦&#xff01;希望我的分享能帮助大家在创业的道路上少走弯路&#xff0c;不踩坑&#xff0c;为你创业成功助上一臂之力。无论是…

linux 生成hash值命令,linux-从给定哈希计算base64编码哈希?

我创建了一个文件,并在其中输入了一些随机字符串.touch tesseract && echo TestTestTestTestTest > tesseract现在,如果我使用openssl来计算base64哈希[sha256],请运行以下命令&#xff1a;cat tesseract | openssl dgst -sha256 | openssl base64 -A回到我身边KHN0…

padding-left在ie8中不生效_陆国应 律师从民法典第209条来看房屋未过户买卖合同是否生效?...

基本案例(案例来源于大律师教你怎样打官司)&#xff1a;张某与某公司签订了房屋买卖合同。双方在合同中约定&#xff1a;某公司将三居室一套售于张某&#xff0c;价款30万元&#xff0c;并约定该房屋于2018年2月1日前交付使用。此后&#xff0c;张某先后向某公司支付购房款人民…

linux shadow 时间,Linux Shadow-Password-HOWTO - 7. 将 Shadow Suite 放进来使用(1)

这节描述你需要知道有些程式在安装时就已经有 Shadow Suite。大部分的资讯在操作手册可以找到。7.1 新增、修改和删除使用者Shadow Suite 新增下列指令用来新增、修改和删除使用者。 这也是可以安装 adduser 程式。useradduseradd 使令可用在系统中新增使用者。 你也可以采用此…

电脑反应慢卡怎么解决_电脑键盘失灵怎么解决

键盘是电脑中重要的输入设备之一&#xff0c;但在使用的过程中有时可能会碰到键盘失灵的问题&#xff0c;该怎么办呢&#xff1f;别着急&#xff0c;接下来&#xff0c;小编我就来给大家详细的介绍一下电脑键盘出现怎么办&#xff0c;并将解决键盘失灵的操作方法来分享给你们。…

金山手机控usb调试模式开启工具_话筒坏了无法连麦?一招手机秒变电脑麦克风...

前段时间孩子上网课&#xff0c;沉睡多年的摄像头和麦克风被从箱子底请了出来。当连接妥当后&#xff0c;突然发现麦克风失灵了&#xff0c;几经调试宣布报废&#xff01;当时正处于疫情高发期&#xff0c;电脑城肯定是关了&#xff0c;网购是来不及了&#xff0c;怎么办&#…

linux下openldap版本查询,用openldap进行linux认证

用openldap进行linux认证(时间&#xff1a;2010-11-25)(OS:LDAP SERVER:Linux version 2.6.18-8.el5xenLDAP:openldap-devel-2.3.27-5LDAP CLIENT:Linux version 2.6.32-71.el6.i686)一、LDAP Server 安装(一)安装配置#rpm -ihv openldap-servers-2.3.27-5.i386.rpm在安装过程中…

idea的setting界面怎么进_电脑怎么备份系统

电脑怎么备份系统&#xff1f;提前备份系统可以帮助下次系统出现问题后&#xff0c;随时还原备份的系统。下面小白提供两种备份系统的方法。一、系统自带备份一般现在的电脑系统都自带备份还原的功能&#xff0c;不管是win10还是win7都需要手动去备份。优点&#xff1a;可以增加…

快手用旺旺瓶子做机器人_用罐头瓶子做醪糟容易做好保存

醪糟是湖北四川一带的著名风味小吃&#xff0c;醪糟汤圆、醪糟鸡蛋酸甜可口&#xff0c;非常美味。这些年&#xff0c;北方人喜欢它的人也逐渐多了起来&#xff0c;我们单位食堂每周三都做醪糟汤圆大枣汤&#xff0c;是同事们最喜爱、期待的一道美食。我告诉她们可以自己做醪糟…

linux下关闭网络服务,Linux 关闭网络管理服务

关于各种类型数据char、int、double、float 所占空间长度的计算&#xff0c;而char类型让我长姿势了#include int main() { using namespace std; //int A&#xff1d;10; //double B&#xff1d;6; cout << ...python网络编程【一】TCP/IP 是标准的协议,它可以使用世界范…

你不出去卖我拿什么养你_玉树枝干“胳膊粗”,至少养了20年,给钱也不卖!...

玉树是很多花友家里常见的栽培花卉&#xff0c;很多地方叫厚脸皮&#xff0c;是很早进入到国内的多肉植物&#xff0c;经常能够几十年的玉树老桩&#xff0c;长得霸气。玉树叶子四季浓绿油亮&#xff0c;叶子犹如一片片碧玉&#xff0c;枝干古朴苍劲&#xff0c;犹如一棵大树&a…

python面试设计模式问题_聊聊 Python 面试最常被问到的几种设计模式(下)

1. 前言上篇文章 写到了 Python 最常用的 2 种设计模式&#xff0c;单例模式和工厂模式本篇文章我们继续聊聊面试中&#xff0c;Python 面试经常被问到的设计模式&#xff0c;即&#xff1a;构建者模式代理模式观察者模式2. 构建者模式构建者模式&#xff0c;是将一个复杂对象的…

vscode安装swift插件_使用 Webpack 优化 VS Code 插件加载性能

Webpack 这一 JS 模块打包神器相信大家都不陌生了。由于 VS Code 插件大部分也都是 JS/TS 代码 依赖库的形式&#xff0c;因此也可以使用 Webpack 打包&#xff0c;优化性能。经过实测&#xff0c;经过 Webpack 打包优化后的插件&#xff0c;其加载耗时可缩短几倍甚至数十倍之…

全国战争linux添加eth0,linux服务器双线路接入配置

linux服务器双线路接入配置现在有两个专线外接进来分别是移动IP&#xff1a;218。204。242。XXX和电信IP&#xff1a;124。172。245。XXX服务器的地址eth0和eth1的地址分别是&#xff1a;移动IP&#xff1a;218。204。242。XXX和电信IP&#xff1a;124。172。245。XXXDEVICEeth…

c++rpg黑框游戏_NO总本色出演断智大师兄,电竞魔音主C人《超级猎杀》一战成名...

谁说没有智力不能玩RPG&#xff1f;近日&#xff0c;一款名为《超级猎杀》的生存RPG地图在诸多暴雪主播的相继挑战下进入了玩家们的眼帘&#xff0c;要说其中哪位的操作堪称"迷幻"之最&#xff0c;或许No总排第二没人敢称第一。这位菜的同时又自诩无敌的"断智法…

linux 命令行模式自动登录,实现linux的自动登录--命令行模式启动

linux的登录主要是由两个文件在控制,/usr/sbin/getty来获得用户名,并进行检查用户名是否存在,然后将用户名传递给/usr/bin/login来获取用户输入密码和检查密码是否正确.所以要实现linux的自动登录,就要改动这两个文件.1.getty实现的主要功能是:1)打开指定的tty;2)提示用户登录(…

centos7 修改为任意网卡名_centos7首次启动需要配置的内容

前言用户需安装centos图形化界面或命令行界面安装centos7命令行界面&#xff0c;我为大家整理好了&#xff0c;请点击以下链接&#xff0c;亲测N次没问题&#xff01;&#xff01;[https://blog.csdn.net/zkzbhh/article/details/78145708](https://blog.csdn.net/zkzbhh/artic…

python将图片存入数据库_使用python把图片存入数据库

一般情况下我们是把图片存储在文件系统中&#xff0c;而只在数据库中存储文件路径的&#xff0c;但是有时候也会有特殊的需求&#xff1a;把图片二进制存入数据库。今天我们采用的是pythonmysql的方式MYSQL 是支持把图片存入数据库的&#xff0c;也相应的有一个专门的字段 BLOB…