Реализация стека на Java — пошаговая реализация с массивом

Чтобы понять этот пример, нужно знать следующие темы:

  • Класс Stack в Java

  • Дженерики в Java

Пример 1: Программа Java для реализации Stack

// Реализация стека в Java

class Stack {

  // хранит элементы стека
  private int arr[];
  // представляет вершину стека
  private int top;
  // общая ёмкость стека
  private int capacity;

  // создание стека
  Stack(int size) {
    // инициализация массива
    // инициализация переменных стека
    arr = new int[size];
    capacity = size;
    top = -1;
  }

  // помещаем элементы на вершину стека
  public void push(int x) {
    if (isFull()) {
      System.out.println("Stack OverFlow");

      // завершает программу
      System.exit(1);
    }

    // вставляем элемент на вершину стека
    System.out.println("Inserting " + x);
    arr[++top] = x;
  }

  // снимаем элементы с вершины стека
  public int pop() {

    // если стек пуст
    // нет элемента для снятия
    if (isEmpty()) {
      System.out.println("STACK EMPTY");
      // завершает программу
      System.exit(1);
    }

    // снимаем элемент с вершины стека
    return arr[top--];
  }

  // возвращаем размер стека
  public int getSize() {
    return top + 1;
  }

  // проверяем, пуст ли стек
  public Boolean isEmpty() {
    return top == -1;
  }

  // проверяем, заполнен ли стек
  public Boolean isFull() {
    return top == capacity - 1;
  }

  // печатаем элементы стека
  public void printStack() {
    for (int i = 0; i <= top; i++) {
      System.out.print(arr[i] + ", ");
    }
  }

  public static void main(String[] args) {
    Stack stack = new Stack(5);

    stack.push(1);
    stack.push(2);
    stack.push(3);

    System.out.print("Stack: ");
    stack.printStack();

    // удаляем элемент из стека
    stack.pop();
    System.out.println("\nAfter popping out");
    stack.printStack();

  }
}

Вывод:

Inserting 1
Inserting 2
Inserting 3
Stack: 1, 2, 3,
After popping out
1, 2,

В примере выше мы реализовали структуру данных стек в Java.

Совет

Чтобы узнать больше, посетите Структура данных Стек.

Пример 2: Реализация стека с помощью класса Stack

Java предоставляет встроенный класс Stack, который можно использовать для реализации стека.

import java.util.Stack;

class Main {
  public static void main(String[] args) {

    // создаём объект класса Stack
    Stack<String> animals= new Stack<>();

    // помещаем элементы на вершину стека
    animals.push("Dog");
    animals.push("Horse");
    animals.push("Cat");
    System.out.println("Stack: " + animals);

    // снимаем элемент с вершины стека
    animals.pop();
    System.out.println("Stack after pop: " + animals);
    }
}

Вывод:

Stack: [Dog, Horse, Cat]
Stack after pop: [Dog, Horse]

В примере выше мы использовали класс Stack, чтобы реализовать стек в Java. Здесь:

  • animals.push() — вставляет элементы на вершину стека

  • animals.pop() — удаляет элемент с вершины стека

Обратите внимание: мы использовали угловые скобки <String> при создании стека. Это означает, что стек — обобщённого типа.