杂篇之2-堆篇
来源:互联网 发布:淘宝的安逸猿 编辑:程序博客网 时间:2024/06/05 20:09
1.基本操作
- H.top() :返回堆顶元素,但是不删除该元素
- H.pop() :删除堆顶元素
- H.push(item) :往堆顶插入元素item
2.基于库的int类型的最大堆,最小堆
下面对堆的构建都是基于标准库中的priority_queue
priority_queue
默认情况下建立在vector
之上
2.1 最大堆
默认情况下,基于int类型构建的最大堆为最大堆
//priority_queue<int,vector<int>,less<int> > maxHead; //显示构建最大堆 priority_queue<int> maxHead; // 默认是最大堆 for(int i=0;i<10;++i){ maxHead.push(i); } cout<<maxHead.top()<<endl; maxHead.pop(); cout<<maxHead.top()<<endl;
2.2 最小堆
priority_queue<int,vector<int>,greater<int> > minHead; //构建最小堆 for(int i=9;0<i;--i){ minHead.push(i); } cout<<minHead.top()<<endl; minHead.pop(); cout<<minHead.top()<<endl;
3.基于结构体构建堆
这里面包含两种类型构建最大堆
3.1 方式1-最大堆
struct node{ int key; // 根据key进行大小的比较 int value; node(int _key=0,int _value=0):key(_key),value(_value){ }}; struct cmp{ bool operator()(const node &x1,const node&x2){ return x1.value<x2.value; }};
而后构建
priority_queue<node,vector<node>,cmp> maxH2; int num[]={3,4,1,2,5,7}; for(int i=0;i<6;++i) { node x1(i,num[i]); maxH2.push(x1); } node x2=maxH2.top(); cout<<x2.key<< " "<<x2.value<<endl; maxH2.pop(); x2=maxH2.top(); cout<<x2.key<< " "<<x2.value<<endl;
3.2 方式2-构建最小堆
重载小于号,但是记着重载如果在类element
中,则重载必须是友元形式,否则会出错
struct element{ int key; // 根据x进行大小的比较 int value; element(int _key=0,int _value=0):key(_key),value(_value){ } friend bool operator<(const element &x1,const element &x2); // 这一句话不要也可以}; bool operator<(const element &x1,const element &x2){ return x1.key<x2.key;}
构建过程如下:
priority_queue<element,vector<element> > maxH3; // 重载小于号 在类外实现,不能在类内实现 for(int i=0;i<6;++i) { element x1(i,num[i]); maxH3.push(x1); } element x3=maxH3.top(); cout<<x3.key<< " "<<x3.value<<endl; maxH3.pop(); x3=maxH3.top(); cout<<x3.key<< " "<<x3.value<<endl;
阅读全文
0 0
- 杂篇之2-堆篇
- 内存篇之堆泄漏
- 排序篇之堆排序
- 第四篇:逆向之堆排序
- 算法基础之排序篇-堆排序
- 内存篇之堆的错误释放
- 剑指OFFER之最小堆篇
- 数据结构基础 之 二叉堆 概念篇
- 【java面试】算法篇之堆排序
- C语言排序之堆排序篇
- (2)排序之堆排序
- c/c++编程基础篇之浅析堆&栈
- c/c++编程基础篇之浅析堆&栈
- c/c++编程基础篇之浅析堆&栈
- C/C++ 编程基础篇之浅析堆&栈
- c/c++编程基础篇之浅析堆&栈
- c/c++编程基础篇之浅析堆&栈
- 常用排序算法递归篇之堆排序
- C++中的4种运算符转化以及它们的不同点
- 安卓v7包中的RecyclerView的基本使用
- c++第七次实验
- 数据结构与算法:红黑树的原理分析
- c语言位域
- 杂篇之2-堆篇
- 献给青春的歌 · 致「 腾讯QQ 18 岁」
- 单例模式与多线程
- unbantu切换到root用户
- [学习笔记]Android权限系统
- Hibernate
- 计蒜之道初赛第一场-阿里的新游戏
- 简单的注册与登陆
- Python 输出json到文件,让json.dumps输出中文 实例代码