#include<stdio.h>
#include<stdlib.h>
#define MaxData 0x7fffffff
typedef struct HeapStruct
{
int *Elements;
int Size;
int Capacity;
}* MaxHeap;
MaxHeap Create(int Maxsize);
int IsFull(MaxHeap H);
void Insert(MaxHeap H, int X);
int IsEmpty(MaxHeap H);
int DeleteMax(MaxHeap H);
int main()
{
int Maxsize = 100;
MaxHeap H;
H = Create(Maxsize);
system("pause");
return 0;
}
MaxHeap Create(int Maxsize)
{
MaxHeap H;
H = (MaxHeap)malloc(sizeof(struct HeapStruct));
H->Elements = (int *)malloc((Maxsize + 1) * sizeof(int));
H->Size = 0;
H->Capacity = Maxsize;
H->Elements[0] = MaxData;
return H;
}
int IsFull(MaxHeap H)
{
if (H->Size == H->Capacity)
return 1;
else
return 0;
}
int IsEmpty(MaxHeap H)
{
if (H->Size == 0)
return 1;
else
return 0;
}
int DeleteMax(MaxHeap H)
{
int MaxV, temp;
int parent, child;
if (IsEmpty(H))
return 0;
MaxV = H->Elements[1];
temp = H->Elements[H->Size--];
for (parent = 1; parent * 2 <= H->Size; parent = child)
{
child = parent * 2;
if (child != H->Size&&H->Elements[child] < H->Elements[child + 1])
child++;
if (temp > H->Elements[child])
break;
else
H->Elements[parent] = H->Elements[child];
}
H->Elements[parent] = temp;
return MaxV;
}
void Insert(MaxHeap H, int X)
{
int i;
if (IsFull(H))
return;
i = ++H->Size;
for (; H->Elements[i / 2] < X; i /= 2)
{
H->Elements[i] = H->Elements[i / 2];
}
H->Elements[i] = X;
}
最大堆
最新推荐文章于 2024-09-09 17:38:55 发布