原文地址:JS优先队列
另外:欢迎大家来我的个人网站 TanJia-前端技术分享
实现优先级队列相对队列主要考虑两个地方:
- 优先级队列中每一个元素由元素的值与元素优先级组成
- 添加元素时,要考虑到优先级。将新插入元素的优先级与队列中已经存在的元素优先级进行比较,以获得自己正确的位置
实现代码如下:
<script type="text/javascript">
function PriorityQueue(){
/* 重新创建一个类 */
function QueueElement(element,priority){
this.element = element
this.priority = priority
}
/* 封装属性 */
this.items = []
/* 实现插入方法 */
PriorityQueue.prototype.enqueue = function(element,priority){
/* 1.创建QueueElement对象 */
let queueElement = new QueueElement(element,priority)
/* 2.判断队列是否为空 */
if(this.items.length === 0){
this.items.push(queueElement)
}else{
var added = false
for(let 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()
pq.enqueue('aaa',123)
pq.enqueue('bbb',54)
pq.enqueue('ccc',67)
pq.enqueue('ddd',567)
pq.enqueue('eee',90)
console.log(pq.toString()) /*bbb-54 ccc-67 eee-90 aaa-123 ddd-567 */
</script>