您将创建一个优先级队列。优先级队列是一种特殊类型的队列,其中的项目可以有额外的信息来指定其优先级。这可以简单地用一个整数表示。项目的优先级在决定项目的排队顺序时将覆盖放置顺序。如果一个优先级较高的项目被排在优先级较低的项目之后,优先级较高的项目将在所有其他项目之前被取消排队。
例如,让我们想象一下,我们有一个有三个项目的优先级队列。
[['小猫', 2], ['狗', 2], ['兔子', 2]] 。 这里的第二个值(一个整数)代表项目的优先级。如果我们把['人',1]的优先级定为1(假设低优先级被赋予优先权),那么它将是第一个被取消排队的项目。这个集合将看起来像这样。
[['人', 1], ['小猫', 2], ['狗', 2], ['兔子', 2]] 。 在代码编辑器中编写一个PriorityQueue。
- 你需要添加一个enqueue方法用于添加具有优先级的项目,一个dequeue方法用于移除和返回项目,
- 一个size方法用于返回队列中的项目数量,
- 一个front方法用于返回队列前面的元素,
- 最后一个isEmpty方法,如果队列是空的,将返回true,如果不是则返回false。
enqueue应该接受如上所示格式的项目(['human', 1]),其中1代表优先级。dequeue和front应该只返回项目的名称,而不是其优先级。
function PriorityQueue () {
this.collection = [];
this.printCollection = function() {
console.log(this.collection);
};
this.enqueue = function(item){
let index = this.collection.findIndex(elem => elem[1] > item[1]);
if(index !== -1){
this.collection.splice(index, 0, item);
} else {
this.collection.push(item);
}}
this.dequeue = function() {
return this.collection.shift()[0];
}
this.size = function() {
return this.collection.length;
}
this.isEmpty = function() {
return this.size() === 0;
}
this.front = function() {
return this.collection[0][0];
}
}