用最大堆实现优先队列(c++)
来源:互联网 发布:域名能绑定端口吗 编辑:程序博客网 时间:2024/06/05 16:32
关于最大堆,最小堆的概念这里不再介绍。
#include <iostream>#include <vector>using namespace std;template<typename T>class PriorityQueue { private: vector<T> v; int size; const static int initCap = 100; private: int parent(int pos) { return pos/2; } int left(int pos) { return pos*2; } int right(int pos) { return pos*2 + 1; } public: PriorityQueue(): size(0) { v = vector<T>(initCap); } bool enQueue(const T& t) { size++; v[size] = t; int i = size; //插入到尾部,一直上提到使当前堆符合最大堆性质为止 while(i > 1 && v[i] > v[parent(i)]) { T tmp = v[i]; v[i] = v[parent(i)]; v[parent(i)] = tmp; i = parent(i); } return true; } bool deQueue(T& max) { //取出最大值,并把尾部元素和最大值交换,然后维护当前堆到符合堆性质 if(size < 1) { return false; } max = v[1]; v[1] = v[size]; v[size] = max; size--; maxHeapIfy(1); return true; } void maxHeapIfy(int pos) { int largestPos = pos; if(left(pos) <= size && v[pos] < v[left(pos)]) { largestPos = left(pos); } if(right(pos) <= size && v[largestPos] < v[right(pos)]) { largestPos = right(pos); } if(largestPos != pos) { T tmp = v[pos]; v[pos] = v[largestPos]; v[largestPos] = tmp; maxHeapIfy(largestPos); } } int getSize() { return size; } bool top(T& t) { if(size < 1) { return false; } t = v[1]; return true; }};int main() { PriorityQueue<int> pQ; pQ.enQueue(8); pQ.enQueue(1); pQ.enQueue(3); pQ.enQueue(6); pQ.enQueue(5); pQ.enQueue(3); pQ.enQueue(10); pQ.enQueue(9); pQ.enQueue(7); int a = -1; while(pQ.deQueue(a)) { cout<<a<<" "; } cout<<endl; return 0;}
阅读全文
1 0
- 用最大堆实现优先队列(c++)
- 用最大堆实现优先队列
- 基于最大堆的最大优先队列的实现(C语言)
- 数据结构实现之最大优先队列(最大堆)
- 基于最大堆实现最大优先队列
- 基于算法导论6.5用最大堆实现的优先队列(C++)
- 算法入门--最大堆实现优先队列
- 最大堆及优先队列的实现
- 用堆实现优先队列
- 用堆实现优先队列
- 用堆实现优先队列
- 用堆实现优先队列
- 用堆实现优先队列
- [算法学习笔记]基于最大堆实现最大优先队列
- 算法设计之,堆,堆排序,基于最大堆的最大优先队列的实现(C++实现)
- 最小堆 / 优先队列(C语言实现)
- 优先队列二叉堆 C语言实现
- 最大堆与优先队列
- 一起写一个 JSON 解析器
- [LeetCode]654. Maximum Binary Tree
- 第三章 预测物理
- python高并发
- 养成良好的JS代码风格记录
- 用最大堆实现优先队列(c++)
- c++入门教程(十三)
- 关于使用jenv安装管理不同jdk版本
- Java基础(二)类与对象相关
- <8/17>集训日记
- 2017年8月18日 读书笔记始 1.Halcon机器视觉系统 应用手册(第一版)
- ubuntu 1704 安装 nginx
- Linked List 链表
- 机器学习基础-学习笔记 优化分析(一)