chapter12 优先级队列, priority queue
在优先级队列中,元素出队列的顺序由元素的优先级决定。
堆是实现优先级队列效率很高的数据结构——堆,是一棵完全二叉树,用数组表示:1,1左2,1右3,2左4,2右5,3左6,3右7.
12.1 定义和应用
优先级队列是0个或多个元素的集合,每个元素都有一个优先权或值。top查找,push插入,pop删除。在最小优先级队列(min priority queue)中,查找和删除的元素都是优先级最小的元素;max priority queue中相反。优先级队列的元素可以有相同的优先级,对这样的元素,查找和删除可以按任意数序处理。
12.2 抽象数据类型(Abstract Data Type, ADT)
在优先级队列中,元素出队列的顺序由元素的优先级决定。
堆是实现优先级队列效率很高的数据结构——堆,是一棵完全二叉树,用数组表示:1,1左2,1右3,2左4,2右5,3左6,3右7.
12.1 定义和应用
优先级队列是0个或多个元素的集合,每个元素都有一个优先权或值。top查找,push插入,pop删除。在最小优先级队列(min priority queue)中,查找和删除的元素都是优先级最小的元素;max priority queue中相反。优先级队列的元素可以有相同的优先级,对这样的元素,查找和删除可以按任意数序处理。
12.2 抽象数据类型(Abstract Data Type, ADT)
template<class T>
class maxPriorityQueue
{
public:
virtual ~maxPriorityQueue(){}
virtual bool empty() const = 0; //return true, when the queue is empty.
virtual int size() const = 0; //return the number of elements in the queue.
virtual const T& top() = 0; //return the reference of element with the biggest priority.
virtual void pop() = 0; //delete the head element of the queue.