`

常用类之三----最小堆实现优先队列

阅读更多
作为最小堆应用,实现了另一个实用的类----优先队列.优先队列有着广泛的应用,在操作系统中,许多消息队列、等待队列等,使用了优先队列,在算法中,我们常用优先队列来实现广度搜索、贪心算法等。
Priority_Queue.h
#include"MinHeap.h"
template<class T>
class Priority_Queue{
 public:
  Priority_Queue();
  ~Priority_Queue();
  void Push(const T &x);
     T Pop();
  bool IsEmpty();
  bool IsFull();
 private:
  MinHeap<T> *m_heap;
  const int maxSize;
};

template<class T>
Priority_Queue<T>::Priority_Queue():maxSize(100){
     m_heap = new MinHeap<T>(maxSize);
}

template<class T>
Priority_Queue<T>::~Priority_Queue(){
  delete m_heap;
}

template<class T>
void Priority_Queue<T>::Push(const T &x){
  m_heap->Insert(x);
}

template<class T>
T  Priority_Queue<T>::Pop(){
  T temp;
  m_heap->RemoveMin(temp);
  return temp;
}

template<class T>
bool Priority_Queue<T>::IsEmpty(){
  return m_heap->IsEmpty();
}

template<class T>
bool Priority_Queue<T>::IsFull(){
  return m_heap->IsFull();
}

mainApp.cpp测试文件:

#include<iostream>
#include"Priority_Queue.h"
using namespace std;

void main(){
 int a[5] = {3,2,1,4,5};
 int i;
 Priority_Queue<int> p_queue;
 for(i = 0; i < 5; i++){
  p_queue.Push(a[i]);
 }
 while(!p_queue.IsEmpty()){
  cout<<p_queue.Pop()<<" ";
 }
 cout<<endl;
}
分享到:
评论
3 楼 raojl 2009-10-12  
自从看了你的blog,发现我要做的事还有很多!谢谢
2 楼 fuliang 2009-03-24  
Eric_2007 写道

这个不是Java代码啊

c++的
1 楼 Eric_2007 2009-03-24  
这个不是Java代码啊

相关推荐

    广东工业大学-优先队列和二叉堆.pdf

    优先队列的实现可以使用不同的数据结构,其中一种常用的是二叉堆。二叉堆分为最大堆和最小堆: - 最大堆:堆中的每个节点的值都大于或等于其子节点的值,因此堆顶元素是最大的。 - 最小堆:堆中的每个节点的值都...

    常用算法程序集-徐士良-常用算法程序集-徐士良

    8. 数据结构:如链表、栈、队列、哈希表、树(二叉树、平衡树、堆)等,它们是实现上述算法的基础。 9. 字符串匹配算法:如KMP算法、Boyer-Moore算法、Rabin-Karp算法,用于在文本中快速查找特定字符串。 10. 编程...

    09优先队列[参照].pdf

    最小优先队列的ADT与之类似,只是查找和删除操作针对的是最小优先级元素。 总的来说,优先队列是计算机科学中不可或缺的数据结构,它的高效性和灵活性使其在解决各种问题时表现出色,如排序、调度和编码等。理解并...

    优先队列是一种数据结构.pdf

    1. **高效性:** 通过二叉堆实现的优先队列能够在对数时间内完成插入和删除操作,非常适合处理大量数据。 2. **灵活性:** 用户可以根据需求为元素指定优先级,使其适应于各种应用场景。 **缺点:** 1. **空间...

    C 常用算法程序集-徐士良

    9. **数据结构**:链表、栈、队列、堆、树等数据结构的实现和操作,理解它们可以帮助设计更高效的算法。 10. **文件操作**:C语言中,文件操作包括读写文件、追加、文件定位等,这些在实际项目中非常实用。 通过...

    c语言常用算法-----列举C语言各种常用算法

    - 堆:如最大堆、最小堆,常用于优先队列。 以上是C语言中常见的算法类型,每种算法都有其特定的应用场景和优缺点。学习和掌握这些算法,对于编写高效、可靠的代码至关重要。在实际编程过程中,根据问题的特性选择...

    VC++2012编程演练数据结构《27》最小堆二叉树

    3. **优先队列**:最小堆是实现优先队列的一种常见方式,优先队列允许插入元素和删除最小元素。 4. **插入和删除操作**:掌握如何在最小堆中插入新元素以及如何删除并返回最小元素,理解这两个操作的实现原理。 5. *...

    分支限界法求解单源最短路径

    在这个问题中,"MinHeap.java"可能实现了最小堆,这是一种常用的优先队列结构,用于存储待处理的节点并按照路径长度排序,确保总是先处理路径较短的节点。 `BBShortest.java`可能是主算法实现,使用分支限界法求解...

    数据结构各种算法实现(链表、队列、树、栈、串、)

    堆是一种特殊的完全二叉树,分为最大堆和最小堆。 **重要成员函数:** - **Insert()**: 插入元素。 - **Extract()**: 删除根元素。 - **Adjust()**: 调整堆结构。 - **BuildHeap()**: 构建堆。 #### 14. 哈夫曼树...

    堆优化的dijkstra算法(dijkstra+邻接表+heap)

    在处理大规模数据时,原始的Dijkstra算法的时间复杂度较高,通常采用优先队列进行优化,即堆优化的Dijkstra算法。本篇文章将详细介绍如何利用邻接表和最小堆来实现Dijkstra算法,并分析其时间复杂度和空间复杂度。 ...

    优先队列与分支限界算法

    **算法思想**:优先队列式分支限界法可以通过使用一个极小堆来实现。该堆用于存储待扩展的活结点,并根据结点对应的当前路径长度来确定优先级。算法从源顶点开始,将源顶点扩展后,其所有相邻结点按照当前路径长度...

    CH6_c常用算法程序集-徐士良著_

    《CH6_c常用算法程序集-徐士良著》是一本专注于C语言编程中的常见算法实现的书籍。这本书的第六章涵盖了多个核心算法,通过C语言编写,旨在帮助读者理解和应用这些算法。徐士良是一位知名的计算机科学教育者,他的...

    c常用算法程序集-徐士良,介绍了常用的C语言算法

    《C常用算法程序集-徐士良》是一本专注于C语言算法实现的宝贵资源,适合初学者和有经验的程序员用来提升对算法的理解和实践能力。这本书涵盖了多种经典的算法,旨在帮助读者掌握如何用C语言高效地解决问题。下面将...

    c常用算法程序集-徐士良.rar

    《C常用算法程序集-徐士良》是一个包含多种C语言实现的经典算法集合,由知名计算机教育专家徐士良编撰。这个压缩包文件中,很可能是为了教学或自我提升目的,整理了一系列C语言实现的常见算法,涵盖了数据结构、排序...

    C常用算法程序集-徐士良著

    3. **图论与树算法**:如深度优先搜索(DFS)和广度优先搜索(BFS),以及最小生成树(Prim或Kruskal算法)、最短路径(Dijkstra算法)等。这些算法在解决网络问题、路由优化等问题时非常关键。 4. **动态规划**:...

    常用算法程序集-C语言描述

    - 深度优先搜索(DFS)和广度优先搜索(BFS):用于遍历或搜索图,DFS通常使用递归实现,而BFS则用队列辅助。 - 最短路径算法:如Dijkstra算法和Floyd-Warshall算法,用于寻找图中两点间的最短路径。 4. **动态...

    最小生成树c语言实现

    - 实现时,可以使用优先队列(如二叉堆)来存储边,根据权重快速找到最小边。 - 每次从队列中取出最小边,更新与之相连的顶点的状态,直到所有顶点都被包含在内。 2. **Kruskal算法**: - Kruskal算法首先按照边...

Global site tag (gtag.js) - Google Analytics