优先队列严格说实际上不是一种队列,因为它并不需要遵循队列的FIFO特性,而要求的基本操作包括:向队列中插入新的记录,以及移出队列中的最大的元素。我们可以以各种不同的方式来实现优先队列——只要能够满足上面的两个接口就可以了。但是基于堆的优先队列则具有较好的性能。

优先队列是一种很有用的数据结构,因为实际上我们不是每时每刻都需要对数据进行严格的排序,有时候我们仅仅能够获得最大的元素的即可,但是如果以顺序查找的方式实现的话,效率上根本满足不了要求。而堆则提供了一种较高效率的实现策略。

      这里给出一个最小堆的实现,并且结合两个应用进行说明,一个是堆排序,一个是在n个数中寻找第k大的数。

Priority Queue(Heap)的实现及其应用template<typename T>
Priority Queue(Heap)的实现及其应用
class CPriorityQueue

 

Priority Queue(Heap)的实现及其应用#include "stdafx.h"
Priority Queue(Heap)的实现及其应用#include 
<cstdlib>
Priority Queue(Heap)的实现及其应用#include 
"PriorityQueue.h"
Priority Queue(Heap)的实现及其应用#include 
<iostream>
Priority Queue(Heap)的实现及其应用
using namespace std;
Priority Queue(Heap)的实现及其应用
Priority Queue(Heap)的实现及其应用template
<typename T>
Priority Queue(Heap)的实现及其应用
void CPriorityQueue<T>::init(int n)

 

Priority Queue(Heap)的实现及其应用// Test.cpp : Defines the entry point for the console application.
Priority Queue(Heap)的实现及其应用
//

    注意VS2008不支持将模板的声明和实现分开在.h.cpp中分别实现,总是会报“unresolved external symbol”的错误!这是由于模板具体实例化的特殊因素,导致编译器对分离模式的实现有巨大的复杂度,因而,分离模式至今未能获得大多数编译器的支持。所以在目前的编译环境下,请把模板的声明与定义全部放在.h文件中!否则,视不同的编译器,将会有不可预见的编译及链接错误生成。但我们可以直接include进来cpp文件以骗过编译器

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-10-30
  • 2021-11-24
  • 2022-02-04
  • 2022-12-23
  • 2021-09-17
猜你喜欢
  • 2022-12-23
  • 2022-01-11
  • 2021-08-26
  • 2022-12-23
  • 2021-11-04
  • 2022-12-23
  • 2022-01-02
相关资源
相似解决方案