#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;
}
}