8.3 优先级队列
8.3.1 优先级队列ADT
优先级队列:每次从队列中取出的应该是具有最高优先权的元素,这种队列称为优先级队列(priority queue)。
优先级队列根据优先级的有界与否,分为两种类型:有界优先级队列和无界优先级队列。
有界优先级队列(bounded priority queue)的优先权p在一定的范围内,比如说[0, p)内的整数。而无界级优先队列(unbounded priority queue)对优先权p并无要求。
优先级队列ADT应具有如下属性:
- PriorityQueue():创建空的无界优先级队列;
- BPriorityQueue(numLevels):创建空的有界优先级队列,优先权为[0, numLevels)的整数;
- isEmpty():判断优先级队列是否为空;
- length():返回优先级队列的长度;
- enqueue(item, priority):将优先权为priority的元素item添加到优先级队列中;
- dequeue():删除队列中优先权最高,排在最前面的元素。
- 每一个元素都有一个优先权;
- 要删除的元素的优先级必须是当前队列中最高的;
- 如果有多个元素具有相同的优先权,则遵循普通队列的先进先出的原则,即FIFO。
元素的值以及其优先权都储存在一个储