堆的 创建 - 插入 - 删除

#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