Каков наилучший способ создать очередь в javascript?

#javascript #object #data-structures #queue

#javascript #объект #структуры данных #очередь

Вопрос:

Я знаю, что javascript имеет свойства push / shift / pop, которые помогают создавать структуру данных такого типа. Но я понимаю, что использовать их для гигантских данных — не такая уж хорошая идея, потому что для выполнения действия они должны пройти через весь массив. Итак … как бы выглядел пример эффективного кода?

Это мой код, но при использовании «dequeue» при удалении элемента он все еще сохраняется в памяти, даже если он имеет значение «null», как я мог бы избежать этого?

 class Queue {
  constructor() {
    this.items = {},
      this.front = 0,
      this.end = 0;
  }

  enqueue(data) {
    this.items[this.end] = data;
    this.end  ;
  }

  dequeue() {
    if (this.front === this.end) {
      return null;
    }
    const data = this.item[this.front];
    this.front  ;
    return data;
  }

  getSize() {
    return this.end - this.front;
  }
}
  

Ответ №1:

Вот хорошая реализация для структуры данных очереди, которая решит вашу проблему.

 class Queue {

  constructor() {
    this.first = 0;
    this.last = 0;
    this.storage = {};
  }

  enqueue(value) {
    this.storage[this.last] = value;
    this.last  ;
  }

  dequeue() {
    if (this.last > this.first) {
      var value = this.storage[this.first];
      this.first  ;
      return value;
    } else {
      return 0;
    }
  }

  size() {
    return this.last - this.first;
  }

}