堆是什么?
堆是一种基本的数据结构,它是一棵完全二叉树,其中每个节点的值都大于等于(或小于等于)其左右子节点的值。堆可以用来实现优先队列、排序算法等。
堆的基本操作
堆的基本操作有两个:插入和删除。插入操作将一个元素添加到堆中,而删除操作则从堆中删除一个元素。
插入操作
插入操作通常会在堆的末尾添加一个元素,然后将其与父节点比较,如果比父节点大(或小),则交换它们的位置,直到满足堆的性质。
void insert(int x) { heap[++n] = x; int i = n; while (i > 1 && heap[i] > heap[i / 2]) { swap(heap[i], heap[i / 2]); i /= 2; } }
删除操作
删除操作通常会删除堆的根节点,然后将堆的最后一个元素放到根节点上,并将其与子节点比较,如果比其中一个子节点小(或大),则与其交换位置,直到满足堆的性质。
int remove() { int x = heap[1]; heap[1] = heap[n--]; int i = 1; while (i * 2