Имплементация очереди с использованием двух стеков

Добавляйте элементы в первый стек. При извлечении, если второй пуст, переложите в него элементы первого: их порядок развернётся в FIFO.

Короткий ответ

Что ответить на собеседовании

Добавляйте элементы в первый стек. При извлечении, если второй пуст, переложите в него элементы первого: их порядок развернётся в FIFO.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо создать структуру данных — очередь, реализованную при помощи двух стеков, которые будут служить внутренним хранилищем. При этом операции добавления и удаления элементов должны работать в соответствии с принципом FIFO.


 class Stack {
  constructor() {
    this.storage = [];
  }

  push(data) {
    this.storage.push(data);
  }

  pop() {
    return this.storage.pop();
  }

  size() {
    return this.storage.length;
  }
}

class Queue {
  constructor() {
    this.stack1 = new Stack();
    this.stack2 = new Stack();
  }

  // Добавить в очередь
  enqueue(data)

Ответ

Добавляйте элементы в первый стек. При извлечении, если второй пуст, переложите в него элементы первого: их порядок развернётся в FIFO.

Используя Stack из условия:

class Queue {
  constructor() { this.stack1 = new Stack(); this.stack2 = new Stack(); }
  enqueue(data) { this.stack1.push(data); }
  dequeue() {
    if (this.stack2.size() === 0) {
      while (this.stack1.size() > 0) this.stack2.push(this.stack1.pop());
    }
    return this.stack2.pop();
  }
  size() { return this.stack1.size() + this.stack2.size(); }
}

Пустая очередь возвращает undefined. Каждая запись перекладывается не более одного раза: операции имеют амортизированную O(1) стоимость, хотя одно извлечение может занять O(n).

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее