堆(Heap)
堆(heap)也被称为优先队列(priority queue)。队列中允许的操作是先进先出(FIFO),在队尾插入元素,在队头取出元素。而堆也是一样,在堆底插入元素(并不是直接插到堆底完事,而是从堆底往上浮到对应的位置)在堆顶取出元素,但是堆中元素的排列不是按照到来的先后顺序,而是按照一定的优先顺序排列的。这个优先顺序可以是元素的大小或者其他规则。
堆可以看成一个二叉树,所以可以考虑使用二叉树的表示方法来表示堆。但是因为堆中元素按照一定的优先顺序排列,因此可以使用更简单的方法:数组,来表示,这样可以节省子节点指针空间,并且可以快速访问每个节点。
下面以最小堆为例,给出了一些堆的基本操作的伪代码,便于理解各项操作原理。
1 | /*A是数组,假设数组的index从1开始而非从0开始*/ |