Задать вопрос
@MishaXXL

По какому принципу работает алгоритм с массивом очереди?

Есть бесконечно поступающие запросы
Как я понимаю, все это дело мы записываем в массив и у нас получается
const tasks = [task1, task2, task3, ...task100000000]

Из него уже начинаем брать наши таски на обработку, но после выполнения task1не удаляем его из начала массива, чтобы каждый таске его не перебирать
Как тогда достигается актуальное хранение текущей очереди, чтобы наш массив бесконечно не рос?
  • Вопрос задан
  • 796 просмотров
Подписаться 3 Простой 6 комментариев
Решения вопроса 2
wataru
@wataru Куратор тега Алгоритмы
Разработчик на С++, экс-олимпиадник.
Много разных вариантов для структур данных. Например, кольцевой буфер. Или связный список. В этом случае можно удалять элемент с начала, не сдвигая все элементы в массиве.
Ответ написан
Вот вам готовая простейшая очередь в виде объекта без всяких переборов:

class Queue {
  constructor() {
    this.items = {};
    this.front = 0;
    this.rear = 0;
  }
  enqueue(item) {
    this.items[this.rear] = item;
    this.rear++;
  }
  dequeue() {
    const item = this.items[this.front];
    delete this.items[this.front];
    this.front++;
    return item;
  }
  peek() {
    return this.items[this.front];
  }
  get size() {
    return this.rear - this.front;
  }
  isEmpty() {
    return this.rear == 0;
  }
}
const queue = new Queue();
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
queue.enqueue(4);
queue.enqueue(5);

console.log("Объект очереди: ", queue);

const removed_element = queue.dequeue();
console.log("Обработанный (удаленный) элемент: ", removed_element);

console.log("Объект очереди:", queue);

const top_element = queue.peek();
console.log("Текущий элемент очереди для обработки (без удаления): ", top_element);

const queue_length = queue.size;
console.log("Размер очереди: ", queue_length);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
saboteur_kiev
@saboteur_kiev
software engineer
Вы определитесь с формулированием вопроса.
Если хранить задачи в массиве вам кажется слишком напряжно, можно использовать другие структуры, удаление которых не требует пересоздания (двухсторонний список, например).
Чем пересборка массива мешает - также не понимаю. Нужно ж понимать как часто у вас добавляются/удаляются задачи, сколько времени занимает пересборка.
Может быть можно просто помечать задачи как удаленные, и удалять раз в сутки в нерабочее время.

В общем у вас вопрос слишком абстрактный
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы