为防止广告,目前nocow只有登录用户能够创建新页面。如要创建页面请先登录/注册(新用户需要等待1个小时才能正常使用该功能)。
最大-最小堆
来自NOCOW
这篇文章可以证实是由NOCOW用户原创,不存在任何版权争议。 本文作者同意以GNU FDL、CC-by-sa和GNU LGPL(如果适用)三种版权发布此文章(不包括翻译文章中属于原始所有者的部分版权)。 如果你修改了这篇文章并且不同意用GNU FDL以外的版权发布,可以换一个版权模板或者移除此模板。
目录 |
[编辑] 介绍
最大堆和最小堆是二叉堆的两种形式。
- 最大堆:根结点的键值是所有堆结点键值中最大者的堆。
- 最小堆:根结点的键值是所有堆结点键值中最小者的堆。
[编辑] 主要操作
不失一般性,只讨论根结点为最小层的情况。
[编辑] 插入
void insert(int x);
[编辑] 弹出
void pop(int &x);
擦
[编辑] 代码
struct heap{ int size; int a[11000]; heap(){size=0;} void insert(int x){ int p; for(p=++size;p>1&&a[p>>1]>x;a[p]=a[p>>1],p>>=1); a[p]=x; } void pop(int &x){ int p,c; for(x=a[p=1],c=2;c<size&&(a[c+=(c+1<size&&a[c+1]<a[c])?1:0]<a[size]);a[p]=a[c],p=c,c<<=1); a[p]=a[size--]; } }h;
[编辑] 应用
最大-最小堆是一个小作品,欢迎帮助扩充这个条目。