队列应用-优先队列
作者:互联网
代码定义
/**
* 优先级队列主要考虑的问题为:
* 每个元素不再只是一个数据,还包含数据的优先级;
* 在添加数据过程中,根据优先级放入到正确位置;
*/
// 封装优先级队列
function PriorityQueue() {
// 封装属性
this.items = []
//内部类:在类里面再封装一个类;表示带优先级的数据
QueueElement = function (element, priority) {
this.element = element;
this.priority = priority;
}
// 1.实现按照优先级插入方法
PriorityQueue.prototype.enQueue = (element, priority) => {
// 1.1.创建QueueElement对象
let queueElement = new QueueElement(element, priority)
// 如果优先队列为空,直接添加
if (this.items.length == 0) {
this.items.push(queueElement)
} else {
// 定义一个变量记录是否成功添加了新元素
let added = false
for (let i = 0; i < this.items.length; i++) {
// 让新插入的元素与原有元素进行优先级比较(priority越小,优先级越大)
if (queueElement.priority < this.items[i].priority) {
this.items.splice(i, 0, queueElement)
added = true
// 新元素已经找到插入位置了可以使用break停止循环
break
}
}
// 新元素没有成功插入,就把它放在队列的后边
if (!added) {
this.items.push(queueElement)
}
}
}
// 2.dequeue():从队列中删除前端元素
PriorityQueue.prototype.deQueue = () => {
return this.items.shift()
}
// 3.front():查看前端的元素
PriorityQueue.prototype.front = () => {
return this.items[0]
}
// 4.isEmpty():查看队列是否为空
PriorityQueue.prototype.isEmpty = () => {
return this.items.length == 0;
}
// 5.size():查看队列中元素的个数
PriorityQueue.prototype.size = () => {
return this.items.length
}
// 6.toString():以字符串形式输出队列中的元素
PriorityQueue.prototype.toString = () => {
let resultString = ''
for (let i of this.items) {
resultString += i.element + '-' + i.priority + ' '
}
return resultString
}
}
module.exports = PriorityQueue
测试代码
let PriorityQueue = require('./05优先队列')
let priorityQueue = new PriorityQueue
priorityQueue.enQueue('tom', 100)
priorityQueue.enQueue('alice', 120)
priorityQueue.enQueue('lxl',7)
priorityQueue.enQueue('hellen', 150)
priorityQueue.enQueue('mary', 80)
priorityQueue.enQueue('gogo', 12)
priorityQueue.enQueue('jim', 2)
priorityQueue.enQueue('jack', 17)
priorityQueue.enQueue('gtc', 1)
priorityQueue.enQueue('zlj', 19)
console.log(priorityQueue);
结果
标签:PriorityQueue,优先,队列,items,priorityQueue,enQueue,应用,priority 来源: https://www.cnblogs.com/NaziriteGTC/p/16417670.html