自己动手实现优先级队列
来源:互联网 发布:matlab矩阵归一化函数 编辑:程序博客网 时间:2024/05/24 05:57
优先级队列是一种应用广泛的数据结构,例如可以用在dijsktra 算法中。我们这里使用deque来实现优先级队列,deque支持常数时间内随机访问以及首位添加和删除操作,非常适合用来实现优先级队列。
啥也不说了,上代码。
#include <deque>#include <limits>using namespace std;class PriorityQueue {public: PriorityQueue() { a.push_back(1); } void push(int val) { a.pop_front(); a.push_front(val); a.push_front(1); heapfy(1); } int top() { return a[1]; } void pop() { swap(a[1], a[a.size() - 1]); a.pop_back(); heapfy(1); } int size() { return a.size() - 1; }private: void heapfy(int beg) { if (beg >= a.size()) return; if ((beg<<1 >= a.size() || a[beg] >= a[beg<<1]) && (beg<<1 + 1 >= a.size() || a[beg] >= a[beg<<1 + 1])) return; int l = numeric_limits<int>::min(); int r = numeric_limits<int>::min(); if (beg<<1 + 1 < a.size()) { r = a[beg<<1 + 1]; } if (beg<<1 < a.size()) { l = a[beg<<1]; } if (r >= l) { if (r != numeric_limits<int>::min()) { swap(a[beg<<1 + 1], a[beg]); heapfy(beg<<1 + 1); } } else { if (l != numeric_limits<int>::min()) { swap(a[beg<<1], a[beg]); heapfy(beg<<1); } } } deque<int> a;};
0 0
- 自己动手实现优先级队列
- 用链表实现优先级队列
- 优先级队列实现
- 优先级队列的实现
- Java优先级队列实现
- c#实现优先级队列
- 优先级队列的实现
- 1.5 实现优先级队列
- java实现优先级队列
- Python优先级队列实现
- 自己动手实现一个队列LGQueue
- 关于优先级队列的实现
- 顺序表实现优先级队列
- 堆-实现优先级队列算法
- 优先级队列(大顶堆实现)
- c++ 简单实现优先级队列
- 优先级队列的一种实现
- 用数组实现 优先级队列
- ZZNU 1991 (结构体排序)
- Hbase 0.96后Result对象遍历方式
- MongoDB 安装以及使用
- 内联函数与宏的区别
- 124.leetcode Binary Tree Maximum Path Sum(hard)[先序遍历]
- 自己动手实现优先级队列
- Console命令详解,让调试js代码变得更简单
- JAVASE总结--集合
- UNITY之背包管理
- PHP 短信验证功能模块
- NGUI和可视化添加按钮注册事件效果相同的代码
- 如何使用多功能影像测量系统测量瓷片长宽尺寸
- MFC 不要让Cdialog子窗体位于最前,取消子窗体位于父窗体前面,取消非模态对话框最前面
- 小地图制作