Реализация структуры данных Стек (LIFO — Last In, First Out) для OneScript.
Объект Стек поддерживает базовый набор операций стека:
| Метод | Описание |
|---|---|
push(значение) |
Добавляет элемент на вершину стека |
pop() |
Удаляет и возвращает элемент с вершины стека. Бросает исключение, если стек пуст |
peek() |
Возвращает элемент с вершины стека, не удаляя его. Бросает исключение, если стек пуст |
count() |
Возвращает количество элементов в стеке |
empty() |
Возвращает Истина, если стек не содержит элементов |
clear() |
Удаляет все элементы из стека |
Стек может хранить значения любого типа, включая объекты — pop()/peek() возвращают тот же самый объект, который был передан в push(), без копирования.
Пакет пока не публикуется через opm — подключите файл src/stack.os в своём проекте как сценарий:
ПодключитьСценарий(ОбъединитьПути(ТекущийСценарий().Каталог, "src", "stack.os"), "Стек");После этого тип Стек доступен для создания через Новый Стек.
Стек = Новый Стек;
Стек.push(1);
Стек.push(2);
Стек.push(3);
Сообщить(Стек.count()); // 3
Сообщить(Стек.peek()); // 3, стек не изменился
Пока Не Стек.empty() Цикл
Сообщить(Стек.pop());
КонецЦикла;
// выведет: 3, 2, 1
Стек.push(1);
Стек.clear();
Сообщить(Стек.empty()); // ИстинаПопытка получить элемент из пустого стека (pop() или peek()) бросает исключение с текстом stack underflow:
Стек = Новый Стек;
Попытка
Стек.pop();
Исключение
Сообщить(ОписаниеОшибки()); // stack underflow: attempt to get element out of empty stack object
КонецПопытки;Тесты находятся в tests/stack.os и написаны с использованием библиотек asserts и 1testrunner. Для запуска установите оба пакета через opm, затем выполните:
opm install asserts
opm install 1testrunner
1testrunner -runall tests