Найти тему
DEBAGanov

Java 213. Как реализовать свой Stack?

Stack - это простая структура данных, которая работает по принципу "последний вошел - первый вышел" (LIFO). Реализовать свой Stack можно с помощью массива или списка (LinkedList).

Вот пример реализации Stack с использованием массива:

public class MyStack<T> {
private T[] stackArray;
private int top;

public MyStack(int capacity) {
stackArray = (T[]) new Object[capacity];
top = -1;
}

public void push(T item) {
if (top == stackArray.length - 1) {
throw new IllegalStateException("Stack overflow");
}
stackArray[++top] = item;
}

public T pop() {
if (top == -1) {
throw new IllegalStateException("Stack underflow");
}
return stackArray[top--];
}

public T peek() {
if (top == -1) {
throw new IllegalStateException("Stack is empty");
}
return stackArray[top];
}

public boolean isEmpty() {
return (top == -1);
}

public int size() {
return (top + 1);
}
}

В этом примере мы создаем обобщенный класс MyStack, который хранит элементы типа T. Внутри класса мы объявляем массив stackArray для хранения элементов и переменную top для отслеживания индекса последнего элемента. Метод push добавляет элемент в вершину стека, метод pop удаляет и возвращает элемент из вершины стека, метод peek возвращает элемент, находящийся в вершине стека, без его удаления. Методы isEmpty и size используются для проверки наличия элементов в стеке и получения количества элементов в стеке соответственно.

Пример использования MyStack:

MyStack<Integer> stack = new MyStack<>(10);
stack.push(10);
stack.push(20);
stack.push(30);
System.out.println(stack.pop()); // 30 System.out.println(stack.peek());
// 20
System.out.println(stack.isEmpty()); // false System.out.println(stack.size()); // 2

В этом примере мы создаем объект MyStack с начальной емкостью 10, добавляем в него три элемента и выполняем несколько операций со стеком.

1606 вопрос-ответ по Java: https://github.com/DEBAGanov/interview_questions

Tелеграмм канал: https://t.me/DEBAGanov

Мое резюме: https://github.com/DEBAGanov