优先级队列与队列最大的区别是在新增的时候,优先级队列会按照大小顺序插入数据。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
function PriorityQueue() {
function QueueElement(element, priority) {
this.element = element
this.priority = priority
}
this.queue = [];
PriorityQueue.prototype.enqueue = function (element, priority) {
const queueElement = new QueueElement(element, priority)
if (this.queue.length === 0) {
this.queue.push(queueElement)
} else {
const added = false
for (let i = 0; i < this.queue.length; i++) {
if (queueElement.priority < this.queue[i]) {
this.queue.splice(i, 0, queueElement)
added = true
break
}
}
if (!added) {
this.queue.push(queueElement)
}
}
}
// 队列删除前端元素
PriorityQueue.prototype.dequeue = function () {
return this.queue.shift();
};
// 队列第一个元素
PriorityQueue.prototype.front = function () {
return this.queue[0];
};
// 队列是否有元素
PriorityQueue.prototype.isEmpty = function () {
return this.queue.length === 0;
};
// 队列元素个数
PriorityQueue.prototype.size = function () {
return this.queue.length;
};
// 将队列内容转为字符串
PriorityQueue.prototype.toString = function () {
return this.queue.map(item => item.element).join('');
};
}
let pq = new PriorityQueue()
pq.enqueue('A', 2);
pq.enqueue('B', 1);
pq.enqueue('C', 3);
console.log('队列是否为空', pq.isEmpty());
console.log('队列元素个数', pq.size());
console.log('队列首元素', pq.front().element);
console.log('出队列', pq.dequeue().element);
console.log('队列内容以字符串返回', pq.toString());
</script>
</body>
</html>