1.优先队列(堆)heap priority_queue
1.1理论知识及实现方法
堆(二叉堆)堆是一棵完全二叉树,完全二叉树转换为顺序储存(数组)时不浪费储存空间,因此堆可以由数组储存。小顶堆:最小元在根节点,对于每一个节点x,x的父节点的值小于等于x的值。大顶堆:最大值在根节点,对于每一个节点x,x的值大于等于子节点的值。堆排序的实现方式就是使用堆这种数据结构。
插入节点:在可用位置(树的最下层最右侧节点的右侧,即数组的末尾)创建一个空穴,将空穴上移直到正确位置,称为上滤。
删除堆顶 由于根节点是最小元,删除最小元后需要将新的最小值作为根节点。因此在根节点中创建空穴,将空穴的左右节点的较小者放入空穴,那么空穴下移,循环操作,直至堆的最后一个节点(数组的最后一个元素)可以放入空穴。
实现 heap和priority_queue都是堆的实现形式,区别在于。priority_queue只能保持顺序,只能访问堆顶元素。heap可以访问任意成员,访问更自由