数据结构(C++)最小优先权队列实现<模板类>
来源:互联网 发布:烟台鼎鸿网络拖欠工资 编辑:程序博客网 时间:2024/05/16 06:02
1.优先级队列:
每一次都能取出队列中的具有最高优先权的元素,这种队列就是优先级队列。
2.代码实现
模板类PQueue:
#ifndef PQUEUE_H#define PQUEUE_H#include<assert.h>#include<iostream>#include<stdlib.h>using namespace std;const int DefaultSize=50;template <class T>class PQueue{public: /** Default constructor */ PQueue(int sz=DefaultSize):maxSize(sz),num(0) { //创建队列空间 pqelements=new T[maxSize]; //断言,动态存储分配是否成功 assert(NULL!=pqelements); } /** Default destructor */ ~PQueue() { delete [] pqelements; } bool Insert(const T & x) { if(num==maxSize) return false; pqelements[num++]=x; Adjust(); } bool RemoveMin(T & x) { if(0==num) { return false; } x=pqelements[0]; for(int i=1; i<num; i++) { pqelements[i-1]=pqelements[i]; } num--; return true; } bool GetFront(T &x) const { if(0==num) { return false; } else { x=pqelements[0]; return true; } } void MakeEmpty() { num=0; } bool IsEmpty()const { return num==0?true:false; } bool IsFull() const { return num==maxSize?true:false; } int getSize() const { return num; }protected: T * pqelements; int num; int maxSize; void Adjust() { //将队尾元素按其优先权调整到适当的位置,保持所有元素优先权从小到大有序 T temp=pqelements[num-1]; for(int j=num-2; j>0; j--) { if(pqelements[j]<=temp) break; else pqelements[j+1]=pqelements[j]; pqelements[j]=temp; } }};#endif // PQUEUE_H
main函数:
#include <iostream>#include<PQueue.h>using namespace std;int main(){ PQueue<int> *pq=new PQueue<int>(5); for(int i=1; i<6; i++) pq->Insert(i*5); int value; if(pq->GetFront(value)) cout<<"当前最小优先权队列的队首元素是:"<<value<<endl; for(int i=0;i<5;i++) { pq->RemoveMin(value); cout<<"删除了最小的元素:"<<value<<endl; } return 0;}
3.运行结果:
完整工程代码请点解我的GitHub
0 0
- 数据结构(C++)最小优先权队列实现<模板类>
- 《C++实现数据结构》:优先权队列
- 数据结构(c++)最小堆模板类
- 数据结构实现(队列类模板)
- 优先权队列的实现
- 数据结构C++实现——堆和优先权队列
- <C/C++数据结构>队列(C++模板实现)
- 数据结构------堆和优先权队列
- [数据结构]最小堆的类模板实现
- 数据结构实现(优先级队列及堆排序类模板)
- 数据结构实现之最小优先队列(最小堆)
- java最小堆实现优先权队列和求最大的n个数问题
- [数据结构]队列之顺序队列的类模板实现
- [数据结构]队列之链式队列的类模板实现
- C数据结构实现队列
- 数据结构学习系类七-循环队列(c++实现且应用模板)
- 数据结构——循环队列(顺序队列)模板类实现
- 数据结构:队列(C语言实现)
- Linux 执行命令或脚本的屏幕输出(正常输出、警告、错误等信息)重定向输出到文件
- DDX_Control
- 第二节 html字体颜色
- MyBatis简介与配置MyBatis+Spring+MySql
- Python 数据集处理之连接与追加
- 数据结构(C++)最小优先权队列实现<模板类>
- eclipse 安装php插件 并配置环境
- 1181_建立链表
- ios用AFNetWorking判断网络状态
- restore NuGet packages不动的问题和vs中布置缺少的dll
- ideal的一些不太好找的设置(献给eclipse的老用户)--持续更新
- 有利于排名的网页标题和描述创作
- 2017.2.10自测(noip2002)
- C#中textbox控件实现输入字符筛选后显示