📅  最后修改于: 2023-12-03 15:37:41.606000             🧑  作者: Mango
堆(Heap)是一种基于树形结构的数据结构。它可以用来进行排序,也可以用来实现优先级队列等数据结构。
一般的堆分为两种:小根堆和大根堆。在小根堆中,父节点的值小于等于它的子节点的值;在大根堆中,父节点的值大于等于它的子节点的值。
在堆中插入元素,需要遵循以下步骤:
def insert(heap, value):
heap.append(value)
index = len(heap) - 1
parent = (index - 1) // 2
while parent >= 0 and heap[index] > heap[parent]:
heap[index], heap[parent] = heap[parent], heap[index]
index = parent
parent = (index - 1) // 2
这是一个在大根堆中插入元素的 Python 实现,我们用 heap
来表示堆,value
来表示要插入的元素。首先将元素插入到堆的最后一个位置,然后进行比较并交换位置,直到元素到达它应该在的位置。
在堆中删除元素,需要遵循以下步骤:
def delete(heap):
heap[0], heap[-1] = heap[-1], heap[0]
value = heap.pop()
index = 0
child = index * 2 + 1
while child < len(heap):
if child + 1 < len(heap) and heap[child + 1] > heap[child]:
child += 1
if heap[child] > heap[index]:
heap[child], heap[index] = heap[index], heap[child]
index = child
child = index * 2 + 1
else:
break
return value
这是一个在大根堆中删除元素的 Python 实现,我们用 heap
来表示堆。首先将堆的最后一个元素移动到要删除的元素的位置,然后进行比较并交换位置,直到元素到达它应该在的位置或者到达了堆的叶子节点。最后将要删除的元素从堆中取出并返回。