优先队列--模板类实现
来源:互联网 发布:淘宝10天不发货会怎样 编辑:程序博客网 时间:2024/06/11 17:09
#include<iostream>template<class Data>class PriQueue{public: PriQueue(); Data DelMin(); int Insert(Data); ~PriQueue(); //for debug=========== void List(); template<Data> friend std::ostream& operator << (std::ostream& , const PriQueue<Data>&); template<Data> friend std::istream& operator >> (std::istream& , PriQueue<Data>&); // ====for debugprivate: Data* data; unsigned int end;//最后一个元素的后一个下标,第一个可用单元 unsigned int remain;//剩下的可用单元 void swap(unsigned int,unsigned int); //测试用---- int Getdata(unsigned int); ////------------ };template<class Data>int PriQueue<Data>::Getdata(unsigned int index){ return data[index];}template<class Data>void PriQueue<Data>::List(){ if (end==1) return; for (int i=1;i<end;i++) std::cout<<data[i]<<" "; std::cout<<"end: "<<end<<"; remain: "<<remain<<std::endl;}template<class Data>PriQueue<Data>::PriQueue(){ end=1; data=new Data[100]; remain=99;}template<class Data>void PriQueue<Data>::swap(unsigned int index1,unsigned int index2){ Data tmp=data[index1]; data[index1]=data[index2]; data[index2]=tmp;}template<class Data>int PriQueue<Data>::Insert(Data elem){ if (remain==0) return 0; data[end]=elem; unsigned int tmp=end; while ( tmp/2>0 && data[tmp]<data[tmp/2])//上滤 { swap(tmp,tmp/2); tmp/=2; } end++; remain--; return 1;}template<class Data>Data PriQueue<Data>::DelMin(){ Data ret; if(end>1)ret=data[1];else return 0; unsigned int tmp=1; while (tmp*2+1<end) { if (data[2*tmp]<data[2*tmp+1]) { data[tmp]=data[tmp*2]; tmp*=2; } else { data[tmp]=data[tmp*2+1]; tmp=tmp*2+1; } } if(tmp*2+1==end) data[tmp]=data[2*tmp]; end--; remain++; return ret;}template<class Data>PriQueue<Data>::~PriQueue(){ delete[] data;}template<class Data>std::istream& operator >> (std::istream& is, PriQueue<Data>& ob){ Data da; is>>da; ob.Insert(da); return is;}template<class Data>std::ostream& operator<<(std::ostream &out,const PriQueue<Data>& s){ out<<s.Getdata(); return out;}int main(){ PriQueue<int> que; que.Insert(2); que.Insert(4); std::cout<<que.DelMin()<<std::endl; std::cout<<que.DelMin()<<std::endl; return 0;}
关于内存池的实现,哈哈,以后有时间在补上。。
- 优先队列--模板类实现
- 优先队列stl 模板
- 模板_优先队列
- 优先队列模板
- 优先队列+bfs 模板
- 优先队列模板
- 优先队列模板
- 优先队列模板
- C++模板类实现“堆”的经典案例学习+(优先队列)
- 堆的自行实现和c++优先队列模板
- STL模板库优先队列
- dijkstra+优先队列优化 模板
- Dijkstra模板(优先队列)
- [模板]堆和优先队列
- 类包装的优先队列 小顶堆实现
- Python实现优先队列
- 优先队列实现堆
- 优先队列的实现
- Trimslice版MeeGo智能电视
- android alertdialog的按钮点击后不消失
- 认识Android
- virtualbox四种联网方式在linux下的实现
- AC自动机算法详解
- 优先队列--模板类实现
- Java编程思想之15.2简单泛型
- 别人都linux更新咱来个linux降低版本试试!
- poj 3616
- 性能改造小记
- tar: Error exit delayed from previous errors 的问题解决办法!
- 有关容器的一点小小总结
- c#提高
- 唉,不得不写日记了.................