优先级队列的特点
与普通队列不同的是,优先级队列在插入队列的时候会根据优先级的高低来插入到正确的为止。以至于优先级高的队列可以优先移除队列。他的原则其实就是“优先级高的先出”
生活中的优先级队列
程序其实在很多时候就是生活的抽象,优先级队列的在生活中也是很常见的一种模式。
- 举个最简单的例子,我们日常生活中习惯将紧急的事情优先进行处理,不紧急的事情往后进行排,这也是优先级队列的一种体现。
- 虽然每个航空公司的安排可能不太一样,但是大体上都是按照这样的优先级顺序进行登机。首先是特殊旅客最早登机(包括老年人,孕妇,轮椅旅客,或者携带小孩的需要特殊帮助的旅客)其次就按照仓位进行(头等舱-公务-持有航空公司会员卡的普通仓旅客)余下的按照座位号由靠舱后的旅客先登记,靠近舱门的旅客最后登机)
…
优先级队列的实现
function PriorityQueue(){
this.items = []
function QueueItem(value,priority){
this.value = value
this.priority = priority
}
PriorityQueue.prototype.enqueue = function (value,priority){
let queueItem = new QueueItem(value,priority)
if (this.items.length == 0){
this.items.push(queueItem)
}else {
let isAdd = false
for(let i = 0 ;i<this.items.length;i++){
if (this.items[i].priority<queueItem.priority){
this.items.splice(i,0,queueItem)
isAdd = true
break;
}
}
if (isAdd == false){
this.items.push(queueItem)
}
}
}
PriorityQueue.prototype.dequeue = function (){
return this.items.shift()
}
PriorityQueue.prototype.font = function (){
return this.items[0]
}
PriorityQueue.prototype.isEmpty = function (){
if (this.items.length!=0){
return false
}else {
return true
}
}
PriorityQueue.prototype.size = function (){
return this.items.length
}
PriorityQueue.prototype.toString = function (){
let str = ""
this.items.forEach(function (item,index,arr){
str+=`${item.value}-${item.priority};`
})
return str
}
}
let priorityQueue = new PriorityQueue()
console.log(priorityQueue.isEmpty());
priorityQueue.enqueue("张三",100)
priorityQueue.enqueue("李四",300)
priorityQueue.enqueue("王五",200)
console.log(priorityQueue.toString());
priorityQueue.dequeue()
console.log(priorityQueue.toString());
console.log(priorityQueue.isEmpty());
console.log(priorityQueue.font().value);
console.log(priorityQueue.size());
运行结果: 
|