创建一个优先队列类

186 阅读1分钟

您将创建一个优先级队列。优先级队列是一种特殊类型的队列,其中的项目可以有额外的信息来指定其优先级。这可以简单地用一个整数表示。项目的优先级在决定项目的排队顺序时将覆盖放置顺序。如果一个优先级较高的项目被排在优先级较低的项目之后,优先级较高的项目将在所有其他项目之前被取消排队。

例如,让我们想象一下,我们有一个有三个项目的优先级队列。

[['小猫', 2], ['狗', 2], ['兔子', 2]] 。 这里的第二个值(一个整数)代表项目的优先级。如果我们把['人',1]的优先级定为1(假设低优先级被赋予优先权),那么它将是第一个被取消排队的项目。这个集合将看起来像这样。

[['人', 1], ['小猫', 2], ['狗', 2], ['兔子', 2]] 。 在代码编辑器中编写一个PriorityQueue。

  1. 你需要添加一个enqueue方法用于添加具有优先级的项目,一个dequeue方法用于移除和返回项目,
  2. 一个size方法用于返回队列中的项目数量,
  3. 一个front方法用于返回队列前面的元素,
  4. 最后一个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];
  }
}