博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现最大堆
阅读量:5326 次
发布时间:2019-06-14

本文共 1084 字,大约阅读时间需要 3 分钟。

  堆是一棵完全二叉树,对于最大堆来说,任何一个非叶子节点满足:结点的值大于其孩子结点的值。使用数组可以实现完全二叉树的结构。下标从1开始,一个结点i的左孩子下标为2*i,有孩子下标为2*i+1。下面是实现一个简单的最大堆。

 

const int maxn = 100000;class MaxHeap{public:    MaxHeap(int maxElementsCnt = maxn){        elems = (int*)malloc((maxElementsCnt + 1) * sizeof(int));        size = 0;    }    int maxElement(){        return elems[1];    }    int top(){        int maxElem = elems[1];        int lastElem = elems[size--];        int i, child;        for (i = 1; i * 2 <= size; i = child){            child = i * 2;            if (child != size && elems[child + 1] > elems[child])                child++;            if (lastElem < elems[child])                elems[i] = elems[child];            else                break;        }        elems[i] = lastElem;        return maxElem;    }    void push(int val){        int i;        for (i = ++size; i > 1 && elems[i / 2] < val; i /= 2){            elems[i] = elems[i / 2];        }        elems[i] = val;    }    ~MaxHeap(){        delete[] elems;     }private:    int* elems;    int size;};

 

转载于:https://www.cnblogs.com/yplhh/p/4740306.html

你可能感兴趣的文章
wnmp安装配置的坑
查看>>
【Django】执行manage.py test报数据库错误
查看>>
神奇的Scala Macro之旅(二)- 一个实例
查看>>
sicily 1128. DICE
查看>>
e.Row.Attributes.Add
查看>>
SCOPE_IDENTITY()和 SELECT @@IDENTITY 的用法
查看>>
PLoP(Pattern Languages of Programs,程序设计的模式语言)
查看>>
jquery fileupload
查看>>
第34节:Java当中的异常
查看>>
平均时间复杂度为O(nlogn)的排序算法
查看>>
对PostgreSQL的 SPI_prepare 的理解。
查看>>
最大乘积问题
查看>>
codevs1002 搭桥
查看>>
Map源码学习之HashMap
查看>>
高品质免费字体集锦:25款英文艺术字体下载
查看>>
linux服务器上使用find查杀webshell木马方法
查看>>
Unix/Linux环境C编程入门教程(17) Gentoo LinuxCCPP开发环境搭建
查看>>
基于TP5使用Websocket框架之GatewayWorker开发电商平台买家与卖家实时通讯
查看>>
k8s取节点内docker中的日志
查看>>
turtle库基础练习
查看>>