全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

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小时内与您取得联系。