优先级队列的定义:
优先级队列(priority_queue)其实,不满足先进先出的条件,更像是数据类型中的“堆”。优先级队列每次出队的元素是队列中优先级最高的那个元素,而不是队首的元素。这个优先级可以通过元素的大小等进行定义。比如定义元素越小优先级越高,那么每次出队,都是将当前队列中最小的那个元素出队。即表示优先级小的都会放在优先级大的元素的前面,每次插入元素的时候都会进行由优先级判断的,代码实现如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>优先级队列</title>
</head>
<body>
<script>
// 封装优先级队列
function PriorityQueue() {
// 在PriorityQueue重新创建了一个类:可以理解为内部类
function QueueElement(element,priority) {
this.element = element
this.priority = priority
}
// 封装属性
this.items = []
// 实现插入方法
PriorityQueue.prototype.enqueue = function(element,priority) {
// 创建QueueElement对象
var queueElement = new QueueElement(element,priority)
// 判断队列是否为空
if(this.items.length == 0) {
this.items.push(queueElement)
}else {
var added = false
for(var i = 0 ; i < this.items.length ; i++) {
if(queueElement.priority < this.items[i].priority) {
this.items.splice(i,0,queueElement)
added = true
break
}
}
if(!added) {
this.items.push(queueElement)
}
}
}
// 从队列中删除元素
PriorityQueue.prototype.dequeue = function() {
return this.items.shift()
}
// 查看前端的元素
PriorityQueue.prototype.front = function() {
return this.items[0]
}
// 查看队列是否为空
PriorityQueue.prototype.isEmpty = function() {
return this.items.length == 0
}
// 查看队列中元素的个数
PriorityQueue.prototype.size = function() {
return this.items.length
}
// toString方法
PriorityQueue.prototype.toString = function() {
var resultString = ''
for(var i = 0 ; i < this.items.length ; i++) {
resultString += this.items[i].element+'-'+this.items[i].priority+' '
}
return resultString
}
}
// 测试代码
var pq = new PriorityQueue()
// enqueue方法
pq.enqueue('abc',222)
pq.enqueue('hyw',330)
pq.enqueue('lingxiaohu',80)
pq.enqueue('xiaonaihu',40)
alert(pq)
</script>
</body>
</html>