#define ElementType int
#define MaxData 1000
typedef struct HeapStruct *MaxHeap;
struct HeapStruct
{
ElementType *Elements;
int Size;
int Capacity;
};
MaxHeap Create(int MaxSize)
{
MaxHeap H = (MaxHeap)malloc(sizeof(struct HeapStruct));
H->Elements = (int*)malloc((MaxSize + 1)*sizeof(ElementType));
H->Capacity = MaxSize;
H->Size = 0;
H->Elements[0] = MaxData;
}
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;
}
void Insert(MaxHeap H,ElementType Item)
{
int i;
if (IsFull(H))
{
printf("栈已满\n");
return;
}
i = ++H->Size;
for (; H->Elements[i / 2] < Item;i/=2)
{
H->Elements[i] = H->Elements[i / 2];
}
H->Elements[i] = Item;
}
ElementType DeleteMax(MaxHeap H)
{
int Parent, Child;
ElementType MaxItem, Temp;
if (IsEmpty(H))
{
printf("栈已空\n");
return;
}
MaxItem = 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;
}
堆的 创建 - 插入 - 删除
猜你喜欢
转载自blog.csdn.net/qq_41750725/article/details/80216718
今日推荐
周排行