一 heap:
(1)heap概述:(heap是一种完全二叉树,这个完全二叉树满足堆的性质)
*heap不归属于STL容器组件,缺省情况下priority_queue利用一个max_heap来实现,max_heap以一个vector(或array)表现的complete binary tree实现。
*小技巧:vector的索引为0的位置保留,那么当complete binary tree中的某个节点位于vector的i处时,其左子节点必位于vector的2*i处,其右子结点必位于vector的2*i+1处,其父节点必位于“i/2”处。
(2)heap的类别:
*heap分为:min_heap和max_heap。
~min_heap:每个节点的键值都小于或等于其子节点的键值,最小值在根节点处,即位于vector的开头处。
~max_heap:每个节点的键值都大于或等于其子节点的键值,最大值在根节点处,即位于vector的开头处。
*STL供应的是max_heap。
(3)heap算法:(使用时需#include<algorithm>)
*push_heap(RandomAccessIterator first,RandomAccessIterator last)
*pop_heap(RandomAccessIterator first,RandomAccessIterator last)
*sort_heap(RandomAccessIterator first,RandomAccessIterator last)
*make_heap(RandomAccessIterator first,RandomAccessIterator last)
二 priority_queue(归类为container adapter)
(1)priority_queue概述:
*缺省情况下,priority_queue利用一个max_heap来实现,max_heap以一个vector表现的complete binary tree实现。
priority_queue没有迭代器,不提供遍历功能。
(2)priority_queue的核心接口:
*push():将一个元素置入priority_queue中。
*top():返回priority_queue中的“下一个元素”。
*pop():从priority_queue中移除一个元素。
本文深入探讨了堆的数据结构及其应用,包括堆的概念、类别、算法和优先队列的实现。详细解释了min_heap和max_heap的工作原理,以及如何使用STL库中的heap算法。同时介绍了优先队列的核心接口及其在实际编程中的使用方法。
1092

被折叠的 条评论
为什么被折叠?



