C++ 实现优先队列的简单实例

优先队列类模版实现:
BuildMaxHeap.h头文件:
#include<iostream>
using namespace std;
#define Left(i) i*2+1
#define Right(i) i*2+2
#define Parent(i) (i-1)/2
void Max_Heapify(int a[],int length,int i)
{
int left,right;
left=Left(i);
right=Right(i);
int num=i;
if(left<length&&a[left]>a[i])
{
num=left;
}
//此处逻辑判断出错,开始为else if,发现不能正确排序,改为else之后正确
if(right<length&&a[right]>a[num])
{
num=right;
}
if(num!=i)
{
int temp;
temp=a[i];
a[i]=a[num];
a[num]=temp;
Max_Heapify(a,length,num);
}
}
//此处添加利用循环方式代替递归Max_Heapify的函数,该函数可以替代Max_Heapify
//在某些情况下能取得更好 的效果
void Max_Heapify1(int a[],int length,int i)
{
int left,right,num=i,largest=i;
left=Left(i);
right=Right(i);
while(1)
{
if(a[left]>a[num]&&left<length)
{
largest=left;
}
//此处逻辑判断出错,开始为else if,发现不能正确排序,改为else之后正确
if(a[right]>a[largest]&&right<length)
{
largest=right;
}
if(num!=largest)
{
int temp;
temp=a[num];
a[num]=a[largest];
a[largest]=temp;
num=largest;
left=Left(num);
right=Right(num);
}
else
{
break;
}
}
}
void Build_Max_Heap(int a[],int length )
{
int i;
for(i=(length-1)/2;i>=0;i--)
{
Max_Heapify1(a,length,i);
}
}
void Heap_Sort(int a[],int length)
{
Build_Max_Heap(a,length);
int i;
int temp;
for(i=length-1;i>=1;i--)
{
temp=a[i];
a[i]=a[0];
a[0]=temp;
length-=1;
Max_Heapify1(a,length,0);
}
}
PriorQUeue.h
#include<iostream>
#include "BuileMaxHeap.h"
using namespace std;
#define MAX 100
template <typename type>class PriorQueue
{
private:
int length;
type a[MAX];
public:
PriorQueue ()
{
int i;
length=0;
for(i=0;i<MAX;i++)
{
a[i]=0;
}
}
~PriorQueue()
{
}
void BuildMaxHeapQueue();
void Init(type b[],int len);
type Maxnum();
bool DeleteMax();
void IncreaseKey(int i,type key);
void Insert(type key);
void Print();
void Sort();
};
template<typename type>void PriorQueue<type>::Init(type b[],int len)
{
int i;
this->length=len;
if(len<=0)
{
cout<<"Init failed !"<<endl;
}
for(i=0;i<len;i++)
{
a[i]=b[i];
}
BuildMaxHeapQueue();
}
template<typename type>void PriorQueue<type>::BuildMaxHeapQueue()
{
Build_Max_Heap(a,length);
}
template<typename type>type PriorQueue<type>::Maxnum()
{
if(length<=0)
{
cout<<"the queue is empty!"<<endl;
return -1;
}
return a[0];
}
template<typename type>bool PriorQueue<type>::DeleteMax()
{
if(length<=0)
{
cout<<"the queue is empty!"<<endl;
return 0;
}
a[0]=a[length-1];
length-=1;
Max_Heapify1(a,length,0);
return 1;
}
template<typename type>void PriorQueue<type>::IncreaseKey(int i,type key)
{
int num=i;
if(key<a[num])
{
cout<<"key is error!"<<endl;
return ;
}
a[num]=key;
while(num>0&&a[Parent(num)]<a[num])
{
type temp;
temp=a[num];
a[num]=a[Parent(num)];
a[Parent(num)]=temp;
num=Parent(num);
}
}
template<typename type>void PriorQueue<type>::Insert(type key)
{
if(length>=MAX)
{
cout<<"the queue is full can't add more!"<<endl;
return ;
}
length+=1;
a[length-1]=key;
IncreaseKey(length-1,key);
}
template<typename type>void PriorQueue<type>::Print()
{
int i;
for(i=0;i<length;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
}
template<typename type>void PriorQueue<type>::Sort()
{
Heap_Sort(a,length);
}
main.cpp
#include"PriorQueue.h"
#include<iostream>
using namespace std;
int main()
{
PriorQueue<int> node;
int b[10]={4,1,3,2,16,9,10,14,8,7};
node.Init(b,10);
int i;
node.Print();
cout<<endl;
cout<<node.Maxnum()<<endl;
node.DeleteMax();
node.Print();
node.Insert(232);
node.Sort();
node.Print();
return 0;
}
以上就是数据结构优先队列的实例,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# C++
# 实现优先队列的实例
# 算法之优先队列的实现
# c++优先队列(priority_queue)用法详解
# c++优先队列用法知识点总结
# C++优先队列用法案例详解
# 详解c++优先队列priority_queue的用法
# C++高级数据结构之优先队列
# C++实现优先队列的示例详解
# C++示例详解Prim算法与优先队列
# 深入了解C++优先队列(priority_queue)的使用方法
# C++中STL的优先队列priority_queue详解
# C++优先队列的使用小结
# C++的实现优先队列(Priority Queue)的实现
# 递归
# 如有
# 数据结构
# 希望能
# 谢谢大家
# 疑问请
# 情况下
# 头文件
# 在某些
# amp
# length
# int
# Max_Heapify
# num
# left
# temp
# Build_Max_Heap
# Heap_Sort
# PriorQUeue
# largest
相关文章:
如何快速搭建FTP站点实现文件共享?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
c# 在ASP.NET Core中管理和取消后台任务
如何注册花生壳免费域名并搭建个人网站?
如何在IIS中配置站点IP、端口及主机头?
如何在宝塔面板中创建新站点?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
Swift中循环语句中的转移语句 break 和 continue
如何在IIS7中新建站点?详细步骤解析
如何用IIS7快速搭建并优化网站站点?
高端网站建设与定制开发一站式解决方案 中企动力
山东网站制作公司有哪些,山东大源集团官网?
b2c电商网站制作流程,b2c水平综合的电商平台?
免费ppt制作网站,有没有值得推荐的免费PPT网站?
赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?
如何在阿里云通过域名搭建网站?
油猴 教程,油猴搜脚本为什么会网页无法显示?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
深圳网站制作案例,网页的相关名词有哪些?
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
,网站推广常用方法?
如何通过VPS建站实现广告与增值服务盈利?
python的本地网站制作,如何创建本地站点?
大学网站设计制作软件有哪些,如何将网站制作成自己app?
建站与域名管理如何高效结合?
如何快速搭建个人网站并优化SEO?
广平建站公司哪家专业可靠?如何选择?
建站主机默认首页配置指南:核心功能与访问路径优化
电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
建站10G流量真的够用吗?如何应对访问高峰?
上海网站制作开发公司,上海买房比较好的网站有哪些?
小程序网站制作需要准备什么资料,如何制作小程序?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
如何快速查询域名建站关键信息?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
建站主机服务器选型指南与性能优化方案解析
如何快速生成专业多端适配建站电话?
如何选择高效响应式自助建站源码系统?
网站专业制作公司有哪些,做一个公司网站要多少钱?
建站ABC备案流程中有哪些关键注意事项?
江苏网站制作公司有哪些,江苏书法考级官方网站?
建站之星伪静态规则如何正确配置?
建站之星客服服务时间及联系方式如何?
打鱼网站制作软件,波克捕鱼官方号怎么注册?
如何在IIS中新建站点并配置端口与物理路径?
Python路径拼接规范_跨平台处理说明【指导】
,交易猫的商品怎么发布到网站上去?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
*请认真填写需求信息,我们会在24小时内与您取得联系。