二叉队列的实现
来源:互联网 发布:允许网络博客的国家 编辑:程序博客网 时间:2024/05/04 09:14
头文件:
/**A class for Minimum BinaryHeap*writter:flyaway*Time:2012.5.22*description:*use the array to store data*This class provide public functions:*insert()*findMin()* deleteMin()* isEmpty()* makeEmpty()*/#ifndef BinaryHeap_H#define BinaryHeap_H#include<iostream>#include<vector>using namespace std;template< typename T >class BinaryHeap{public:explicit BinaryHeap(const int capacity = 100);explicit BinaryHeap(const vector< T > & item);bool isEmpty();T findMin() ;void insert(const T &k);void deleteMin();void makeEmpty();private:int currentsize;//number of elements in heapvector< T > array;//The heap arrayvoid buildHeap();void ShiftDown(int hole);};#endif下面是具体的实现:
#include "BinaryHeap.h"template< typename T >BinaryHeap< T > ::BinaryHeap(const int capacity){currentsize = capacity;array.resize(capacity+10);}template< typename T >BinaryHeap< T >::BinaryHeap(const vector< T > &item){int i;int n = item.size();array.resize(n+1);currentsize = n;for(i = 0;i < n;++i){array[i+1] = item[i];}buildHeap();}template< typename T >void BinaryHeap< T > ::buildHeap(){int i;for(i = currentsize/2;i >= 1;--i){ShiftDown(i);}}template< typename T >void BinaryHeap< T >::ShiftDown(int hole){T tmp = array[hole];int father = hole;int child ;for(;father * 2 <= currentsize;father = child){//find the smller childchild = father * 2; if(child != currentsize && array[child] > array[child+1]){child ++;}if(array[child] < tmp){array[father] = array[child];}//find the right place and break out the loopelse{break;}}array[father] = tmp;}template< typename T >T BinaryHeap< T >::findMin() {if(isEmpty()){cerr<<"Error! The Heap is empty!";exit(1);}else{return array[1];}}template< typename T >bool BinaryHeap< T > ::isEmpty(){return currentsize <= 0;}template< typename T >void BinaryHeap< T > ::insert(const T &k){++currentsize;int father = currentsize/2;int child = currentsize;for(;father > 0 && array[father] > k;){array[child] = array[father];child = father;father = child / 2; }if(father == 0){array[1] = k;}else{array[father] = k;}}template< typename T >void BinaryHeap< T > ::deleteMin(){array[1] = array[currentsize--];ShiftDown(1);}template< typename T >void BinaryHeap< T >::makeEmpty(){array.clear();currentsize = 0;}
作者博客:点击打开链接
- 二叉队列的实现
- 优先队列的实现--二叉堆
- 优先队列的数组、二叉堆实现
- 队列实现二叉树的遍历
- 数据结构 二叉树层序遍历的队列实现
- 栈,队列和二叉树的实现
- 优先队列的简单实现-二叉堆实现
- 二叉堆的实现和详解(优先队列的基础)
- 优先队列--二叉堆实现
- 二叉树 队列实现 模板
- 优先队列(堆)——二叉堆的实现
- 队列和堆栈实现二叉树的遍历
- 二叉树的宽度优先遍历(队列实现)
- 算法学习 - 优先队列的二叉堆实现
- 队列实现 二叉树的宽度优先遍历
- 挑战程序设计竞赛 二叉堆(优先队列)的实现
- C++ HOJ 求解二叉树的宽度(队列实现)
- 基于栈和队列实现二叉树的遍历
- poj1276 - Cash Machine
- 在Spring中进行国资源际化配置
- android内存泄露优化
- 设计模式之---Builder 模式
- Windows 7系统中的POSIX子系统
- 二叉队列的实现
- 【二分】总结120527
- 问题汇总
- JCL,JES运作流程
- pureftpd对虚拟用户的支持
- ADO与ODBC的区别
- WordCloud简单实现效果图
- 在Myeclipse中启动weblogic8.1时出现Transport dt_socket failed to initialize,rc=509错误
- 吉他基础乐理二