大家好,我是猿二哥,今天我想和大家一起分享一下我最近的学习数据结构的心得,今天我们学习利用js的数组实现优先级队列。
原理:优先级队列类似与开始那种队列的升级版本,比如说有人排队买菜,本来我们是排队,后来呢,有认识VIP,他就具有优先级,而我们的优先级队列就是按照优先级这个序列来排序的。
//封装对象
function queueObj(element, priority) {
this.element = element;
this.priority = priority;
}
class priorityQueue {
constructor() {
this.items = [];
}
enqueue(element, priority) {
let queueobj = new queueObj(element, priority);
console.log(queueobj);
if (this.isEmpty()) {
this.items.push(queueobj); //添加元素到末尾
} else {
let addad = false;
for (let i = 0; i < this.items.length; i++) {
if (priority < this.items[i].priority) {
this.items.splice(i, 0, queueobj);
addad = true;
break;
}
}
if (!addad) {
this.items.push(queueobj);
}
}
}
isEmpty() {
return this.items.length === 0;
}
size() {
return this.items.length;
}
dequeue() {
/**
*push()方法可以在数组的末属添加一个或多个元素
*shift()方法把数组中的第一个元素删除
*unshift()方法可以在数组的前端添加一个或多个元素
*pop()方法把数组中的最后一个元素删除
*/
return this.items.shift(); //移除数组的前一个项,长度减1
}
print() {
return console.info(this.items);
}
}
let queue = new priorityQueue();
console.log("队列是否为空: " + queue.isEmpty());
queue.enqueue("Mr.A", 5);
queue.enqueue("Mr.B", 4);
queue.enqueue("Mr.C", 3);
console.log("当前队列:");
queue.print();
console.log("出队的人: " + queue.dequeue());
console.log("当前队列:");
queue.print();