C++優先キューの実装の簡単な例
3753 ワード
C++優先キューの実装の簡単な例
優先キュークラステンプレートの実装:
BuildMaxHeap.hヘッダファイル:
PriorQUeue.h
main.cpp
以上がデータ構造優先キューの例ですが、ご質問があればメッセージまたは当駅コミュニティで交流して議論してください.読書に感謝し、皆さんを助けてほしいです.当駅のサポートに感謝します.
優先キュークラステンプレートの実装:
BuildMaxHeap.hヘッダファイル:
#include
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(lefta[i])
{
num=left;
}
// , else if, , else
if(righta[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]&&lefta[largest]&&right=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
#include "BuileMaxHeap.h"
using namespace std;
#define MAX 100
template class PriorQueue
{
private:
int length;
type a[MAX];
public:
PriorQueue ()
{
int i;
length=0;
for(i=0;ivoid PriorQueue::Init(type b[],int len)
{
int i;
this->length=len;
if(len<=0)
{
cout<void PriorQueue::BuildMaxHeapQueue()
{
Build_Max_Heap(a,length);
}
templatetype PriorQueue::Maxnum()
{
if(length<=0)
{
cout<bool PriorQueue::DeleteMax()
{
if(length<=0)
{
cout<void PriorQueue::IncreaseKey(int i,type key)
{
int num=i;
if(key0&&a[Parent(num)]void PriorQueue::Insert(type key)
{
if(length>=MAX)
{
cout<void PriorQueue::Print()
{
int i;
for(i=0;ivoid PriorQueue::Sort()
{
Heap_Sort(a,length);
}
main.cpp
#include"PriorQueue.h"
#include
using namespace std;
int main()
{
PriorQueue node;
int b[10]={4,1,3,2,16,9,10,14,8,7};
node.Init(b,10);
int i;
node.Print();
cout<
以上がデータ構造優先キューの例ですが、ご質問があればメッセージまたは当駅コミュニティで交流して議論してください.読書に感謝し、皆さんを助けてほしいです.当駅のサポートに感謝します.