Priority Queue(Heap)的实现及其应用
2008-07-19 11:24
429 查看
优先队列严格说实际上不是一种队列,因为它并不需要遵循队列的FIFO特性,而要求的基本操作包括:向队列中插入新的记录,以及移出队列中的最大的元素。我们可以以各种不同的方式来实现优先队列——只要能够满足上面的两个接口就可以了。但是基于堆的优先队列则具有较好的性能。
优先队列是一种很有用的数据结构,因为实际上我们不是每时每刻都需要对数据进行严格的排序,有时候我们仅仅能够获得最大的元素的即可,但是如果以顺序查找的方式实现的话,效率上根本满足不了要求。而堆则提供了一种较高效率的实现策略。
这里给出一个最小堆的实现,并且结合两个应用进行说明,一个是堆排序,一个是在n个数中寻找第k大的数。
template<typename T>
class CPriorityQueue
#include "stdafx.h"
#include <cstdlib>
#include "PriorityQueue.h"
#include <iostream>
using namespace std;
template<typename T>
void CPriorityQueue<T>::init(int n)
template<typename T>
CPriorityQueue<T>::CPriorityQueue(int maxElements)
template<typename T>
CPriorityQueue<T>::CPriorityQueue(T *data,int n)
template<typename T>
void CPriorityQueue<T>::destroy()
template<typename T>
CPriorityQueue<T>::~CPriorityQueue(void)
template<typename T>
bool CPriorityQueue<T>::isEmpty()const
template<typename T>
bool CPriorityQueue<T>::isFull() const
template<typename T>
void CPriorityQueue<T>::Insert(const T& num)
template<typename T>
T CPriorityQueue<T>::DeleteMin()
// Test.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "PriorityQueue.cpp"
#include <iostream>
using namespace std;
void printArray(int *data,int n)
void HeapSort(int *data,int n)
int FindKthMax(int *data,int n,int k)
int main(int argc, char* argv[])
注意:VS2008不支持将模板的声明和实现分开在.h和.cpp中分别实现,总是会报“unresolved external symbol”的错误!这是由于模板具体实例化的特殊因素,导致编译器对分离模式的实现有巨大的复杂度,因而,分离模式至今未能获得大多数编译器的支持。所以在目前的编译环境下,请把模板的声明与定义全部放在.h文件中!否则,视不同的编译器,将会有不可预见的编译及链接错误生成。但我们可以直接include进来cpp文件以骗过编译器
优先队列是一种很有用的数据结构,因为实际上我们不是每时每刻都需要对数据进行严格的排序,有时候我们仅仅能够获得最大的元素的即可,但是如果以顺序查找的方式实现的话,效率上根本满足不了要求。而堆则提供了一种较高效率的实现策略。
这里给出一个最小堆的实现,并且结合两个应用进行说明,一个是堆排序,一个是在n个数中寻找第k大的数。
template<typename T>
class CPriorityQueue
#include "stdafx.h"
#include <cstdlib>
#include "PriorityQueue.h"
#include <iostream>
using namespace std;
template<typename T>
void CPriorityQueue<T>::init(int n)
template<typename T>
CPriorityQueue<T>::CPriorityQueue(int maxElements)
template<typename T>
CPriorityQueue<T>::CPriorityQueue(T *data,int n)
template<typename T>
void CPriorityQueue<T>::destroy()
template<typename T>
CPriorityQueue<T>::~CPriorityQueue(void)
template<typename T>
bool CPriorityQueue<T>::isEmpty()const
template<typename T>
bool CPriorityQueue<T>::isFull() const
template<typename T>
void CPriorityQueue<T>::Insert(const T& num)
template<typename T>
T CPriorityQueue<T>::DeleteMin()
// Test.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "PriorityQueue.cpp"
#include <iostream>
using namespace std;
void printArray(int *data,int n)
void HeapSort(int *data,int n)
int FindKthMax(int *data,int n,int k)
int main(int argc, char* argv[])
注意:VS2008不支持将模板的声明和实现分开在.h和.cpp中分别实现,总是会报“unresolved external symbol”的错误!这是由于模板具体实例化的特殊因素,导致编译器对分离模式的实现有巨大的复杂度,因而,分离模式至今未能获得大多数编译器的支持。所以在目前的编译环境下,请把模板的声明与定义全部放在.h文件中!否则,视不同的编译器,将会有不可预见的编译及链接错误生成。但我们可以直接include进来cpp文件以骗过编译器
相关文章推荐
- Priority Queue(Heap)的实现及其应用
- 实验一线性表的基本操作实现及其应用(JavaScript实现)
- 弹性系数系数在水文气象中的应用及其MATLAB实现
- 实验3:栈和队列的基本操作实现及其应用——十进制转换为二进制
- 栈的C++实现及其应用
- 决策树原理、Scikit-learn实现及其在生物信息中的应用
- 图的存储结构的实现及其应用(地图建设问题)
- 实验一线性表的基本操作实现及其应用
- 模糊聚类算法(FCM)和硬聚类算法(HCM)的VB6.0实现及其应用
- 实验一线性表的基本操作实现及其应用
- 实验一线性表的基本操作实现及其应用
- 一个应用实例详解卡尔曼滤波及其算法实现
- 线性表的基本操作实现及其应用之顺序表的建立与操作实现
- 【jquery模仿net控件】初步GridView模型实现,及其简单应用
- otsu自适应阈值分割的算法描述和opencv实现,及其在肤色检测中的应用[转]
- 机器学习经典算法详解及Python实现---朴素贝叶斯分类及其在文本分类、垃圾邮件检测中的应用
- Visual C++中窗口子类化技术的实现及其应用
- otsu自适应阈值分割的算法描述和opencv实现,及其在肤色检测中的应用
- python解释器实现及其嵌入式应用:解释器移植
- Material Design 实现之Toolbar的应用及其菜单动画