/
victor_t
/
simple_navigator
Обзор
Документация
Войти
/
victor_t
/
simple_navigator
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
1
CI/CD
Аналитика
Безопасность
master
src/graph/Stack.java
102 строки
3 KB
Victor
fix: library classes
06 июл 2026, 01:06
06 июл 2026, 01:06
41665e7
Код
Авторство
О чём код?
package graph; /** * Реализация стека (структуры данных LIFO — Last In, First Out). * * <p>Стек хранит элементы таким образом, что последний добавленный элемент * извлекается первым.</p> * * @param <E> тип элементов, хранимых в стеке */ public class Stack<E> implements DataStructure { private static final int DEFAULT_CAPACITY = 10; private Object[] data; private int size; /** * Создаёт пустой стек с начальной ёмкостью по умолчанию. */ public Stack() { this.data = new Object[DEFAULT_CAPACITY]; this.size = 0; } /** * Добавляет элемент на вершину стека. * * <p>При заполнении внутреннего массива его размер автоматически увеличивается в 2 раза.</p> * * @param element элемент, который нужно добавить в стек */ public void push(E element) { if (size == data.length) { grow(); } data[size++] = element; } /** * Удаляет и возвращает верхний элемент стека. * * @return верхний элемент стека * @throws IllegalStateException если стек пуст */ @SuppressWarnings("unchecked") public E pop() { if (isEmpty()) { throw new IllegalStateException("Stack is empty"); } E result = (E) data[size - 1]; data[--size] = null; return result; } /** * Возвращает количество элементов в стеке. * * @return текущий размер стека */ @Override public int getSize() { return size; } /** * Возвращает верхний элемент стека без его удаления. * * @return верхний элемент стека * @throws IllegalStateException если стек пуст */ public E top() { if (isEmpty()) { throw new IllegalStateException("Stack is empty"); } return (E) data[size - 1]; } /** * Проверяет, пуст ли стек. * * @return {@code true}, если стек пуст, иначе {@code false} */ @Override public boolean isEmpty() { return size == 0; } /** * Увеличивает внутренний массив в 2 раза. * * <p>Вызывается автоматически при заполнении текущего массива.</p> */ private void grow() { Object[] newData = new Object[data.length * 2]; if (size >= 0) { System.arraycopy(data, 0, newData, 0, size); } data = newData; } }