8.6 Очередь и кольцевой буфер

8.6.1 Кольцевая очередь команд

Условие

Реализуйте класс IntQueue, работающий по принципу FIFO: первым добавленный элемент извлекается первым. Храните элементы в закрытом массиве вместимости 1000; рабочую вместимость задайте конструктором. Используйте кольцевую индексацию. Добавление и извлечение должны выполняться за O(1), без сдвига элементов массива. Готовые контейнеры запрещены.

Предусмотрите методы bool push(int value), bool pop(int &value), bool front(int &value) const, int size() const, bool empty() const. При добавлении в заполненную очередь и чтении или извлечении из пустой операция возвращает false, сохраняя состояние и выходной параметр. В остальных случаях — true.

Обработайте команды PUSH value, POP, FRONT, SIZE, EMPTY.

Ограничения

Время: 2 секунды. Память: 64 МиБ. Вывод: до 2 МиБ. Язык: C++17.

Входные данные

В первой строке вводятся capacity и Q. Следующие Q строк содержат команды. Ограничения: 1 ≤ capacity ≤ 1000, 1 ≤ Q ≤ 10000, −10⁶ ≤ value ≤ 10⁶.

Выходные данные

Для PUSH выведите OK или FULL; для POP и FRONT — значение либо EMPTY; для SIZE — количество элементов; для EMPTY — YES или NO. Каждый ответ выведите с новой строки.

Примеры

Вход 1
3 7
PUSH 10
PUSH 20
FRONT
POP
FRONT
SIZE
EMPTY
Ожидаемый выход
OK
OK
10
10
20
1
NO
Вход 2
1 6
POP
PUSH 7
PUSH 8
POP
FRONT
EMPTY
Ожидаемый выход
EMPTY
OK
FULL
7
EMPTY
YES
Вход 3
2 8
PUSH 1
PUSH 2
POP
PUSH 3
POP
POP
SIZE
EMPTY
Ожидаемый выход
OK
OK
1
OK
2
3
0
YES

Пробный запуск

Код берётся из редактора. Запуск не создаёт посылку и не влияет на баллы.

Выберите пример или введите свои данные и нажмите «Запустить».

Текущая попытка

Отправьте решение. Этапы и результат появятся здесь автоматически.

Все попытки

Войдите, чтобы видеть свои попытки.

Редактор

Один файл до 64 КиБ · Tab / Shift+Tab — отступ · Esc — выход из редактора · черновик сохраняется для этого аккаунта, задачи и языка.