JavaScript 数据结构之优先级队列思维导图:
JavaScript 数据结构之优先级队列源码:
<html>
<body>
<script>
console.log('JavasScript 数据结构之优先级队列')
function PriorityQueue() {
this.items = [];
}
PriorityQueue.prototype = {
//添加元素方法
enqueue: function (element, priority) {
//1.根据传入的元素,创建新的QueueElement
var queueElement = new QueueElemnet(element, priority);
//2.获取传入元素应该在正确的位置
if (this.isEmpty()) {
this.items.push(queueElement);
} else {
var added = false;
var _that = this;
this.items.every(function (item, index) {
//数字越小,优先级越高
if (queueElement.priority < item.priority) {
//在对应位置插入元素
_that.items.splice(index, 0, queueElement);
added =true;
return false;
}
});
//遍历完所有元素,优先级都大于插入的元素时,就插到最后
if (!added) {
this.items.push(queueElement);
}
}
},
//删除元素方法
delqueue: function () {
return this.items.shift();
},
//获取前端元素
front: function () {
return this.items[0]
},
//查看队列是否为空
isEmpty: function () {
return this.items.length === 0;
},
//获取队列元素个数
size: function () {
return this.items.length
}
};
//封装一个新的构造函数,用于保存元素和元素优先级
function QueueElemnet(element, priority) {
this.element = element;
this.priority = priority;
}
// 优先级队列功能代码测试
var queue = new PriorityQueue();
// 优先级队列元素添加
queue.enqueue(1, 1);
// 判断优先级队列元素是否为空
console.log("priority queue is empty:" + queue.isEmpty());
// 查看优先级队列中元素的数量
console.log("priority queue size is:" + queue.size());
// 再次向优先级队列中添加元素
queue.enqueue(2, 10);
queue.enqueue(3, 15);
// 再次查看优先级队列中元素的数量
console.log("priority queue size is:" + queue.size());
// 查看优先级队列中的前端元素
console.log("priority queue front element is:" + queue.front().element);
// 优先级队列元素出队
queue.delqueue();
// 再次查看优先级队列中元素的数量
console.log("priority queue size is:" + queue.size());
</script>
</body>
</html>