8.5 Стек

8.5.1 Стек команд

Условие

Реализуйте класс IntStack, работающий по принципу LIFO: последним добавленный элемент извлекается первым. Храните элементы в закрытом массиве фиксированной вместимости 1000 и задайте рабочую вместимость capacity конструктором. Использование готовых контейнеров, включая std::stack и std::vector, запрещено.

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

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

Ограничения

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

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

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

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

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

Примеры

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

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

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

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

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

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

Все попытки

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

Редактор

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