<堆> 大根堆和小根堆的建立
来源:互联网 发布:美国大数据公司 年薪 编辑:程序博客网 时间:2024/06/07 03:08
堆是一种经过排序的完全二叉树,其中任一非终端节点的数据值均不大于(或不小于)其左孩子和右孩子节点的值。
(1)根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最小者的堆称为小根堆。
(1)根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最大者,称为大根堆。
用堆的关键部分是两个操作:
(1)put操作:即往堆中加入一个元素;【加在队尾】
(2)get操作:即从堆中取出并删除一个元素。【把根节点弹出】
(1)
void put(int d)
{
heap[++heap_size]=d;//大根堆
push_heap(heap+1,heap+heap_size+1);
heap1[++heap1_size]=d;//小根堆
push_heap(heap1+1,heap1+heap1_size+1,greater<int>());
}
(2)
int get()
{
pop_heap(heap+1,heap+heap_size+1,greater<int>());
return heap[heap_size--];
}
代码如下(输出根节点,即最大点和最小点)
#include<cstdio>#include<functional>#include<algorithm>#include<iostream>using namespace std;int heap[101],heap_size;int heap1[101],heap1_size;void put(int d){heap[++heap_size]=d;//大根堆push_heap(heap+1,heap+heap_size+1);heap1[++heap1_size]=d;//小根堆push_heap(heap1+1,heap1+heap1_size+1,greater<int>());}int main(){int n,l,i;scanf("%d",&n);for(i=1;i<=n;i++){scanf("%d",&l);put(l);}printf("dagendui:%d\n",heap[1]);printf("xiaogendui:%d",heap1[1]);}
2 0
- <堆> 大根堆和小根堆的建立
- 最大堆的建立和堆排序
- 堆的建立和操作
- 堆的建立,插入和自动排序
- 堆的插入、删除和建立操作,堆排序
- 堆的插入、删除和建立操作,堆排序
- 堆的建立&堆排序
- 堆排序--小根堆的建立与调整
- 最大堆的建立
- 最小堆的建立
- 堆的建立
- 堆(Heap)的建立
- 大小堆的建立
- 最小堆的建立
- 二叉堆的建立
- 【数据结构】堆的建立
- 经典算法: 堆排序的原理和实现, 建立堆,调整堆
- 堆建立和堆排序,快速排序
- CyclicBarrier 栅栏
- 利用 OpenCV 在MFC中显示图像问题以及解决方法
- UVA 10891 Game of Sum(区间博弈dp)***
- 【原创】堆排序+合并果子+优先队列
- 【堆】这是要搞事情啊——建立
- <堆> 大根堆和小根堆的建立
- 找不到系统文件C:\ProgramData\Oracle\Java\javapath\java.exe
- [Underfail][CodeForces.717.G][费用流]
- poj1321棋盘问题
- 【Maven实战】04 坐标
- HDU 1300 Pearls DP .
- 数据类型
- Webbech学习之getopt_long函数
- Redis深入理解-数据结构篇(1)-简单动态字符串SDS