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