Stack Array List

package com.thealgorithms.datastructures.stacks;

import java.util.ArrayList;
import java.util.EmptyStackException;

/**
 * This class implements a Stack using an ArrayList.
 *
 * <p>
 * A stack is exactly what it sounds like. An element gets added to the top of
 * the stack and only the element on the top may be removed.
 *
 * <p>
 * This is an ArrayList Implementation of a stack, where size is not a problem
 * we can extend the stack as much as we want.
 */
public class StackArrayList {

    /**
     * Driver Code
     */
    public static void main(String[] args) {
        StackArrayList stack = new StackArrayList();
        assert stack.isEmpty();

        for (int i = 1; i <= 5; ++i) {
            stack.push(i);
            assert stack.size() == i;
        }

        assert stack.size() == 5;
        assert stack.peek() == 5 && stack.pop() == 5 && stack.peek() == 4;

        /* pop elements at the top of this stack one by one */
        while (!stack.isEmpty()) {
            stack.pop();
        }
        assert stack.isEmpty();

        try {
            stack.pop();
            assert false;
            /* this should not happen */
        } catch (EmptyStackException e) {
            assert true;
            /* this should happen */
        }
    }

    /**
     * ArrayList representation of the stack
     */
    private ArrayList<Integer> stack;

    /**
     * Constructor
     */
    public StackArrayList() {
        stack = new ArrayList<>();
    }

    /**
     * Adds value to the end of list which is the top for stack
     *
     * @param value value to be added
     */
    public void push(int value) {
        stack.add(value);
    }

    /**
     * Removes the element at the top of this stack and returns
     *
     * @return Element popped
     * @throws EmptyStackException if the stack is empty.
     */
    public int pop() {
        if (isEmpty()) {
            throw new EmptyStackException();
        }

        /* remove the element on the top of the stack */
        return stack.remove(stack.size() - 1);
    }

    /**
     * Test if the stack is empty.
     *
     * @return {@code true} if this stack is empty, {@code false} otherwise.
     */
    public boolean isEmpty() {
        return stack.isEmpty();
    }

    /**
     * Return the element at the top of this stack without removing it from the
     * stack.
     *
     * @return the element at the top of this stack.
     */
    public int peek() {
        if (isEmpty()) {
            throw new EmptyStackException();
        }
        return stack.get(stack.size() - 1);
    }

    /**
     * Return size of this stack.
     *
     * @return size of this stack.
     */
    public int size() {
        return stack.size();
    }
}
Algerlogo

Β© Alger 2022

About us

We are a group of programmers helping each other build new things, whether it be writing complex encryption programs, or simple ciphers. Our goal is to work together to document and model beautiful, helpful and interesting algorithms using code. We are an open-source community - anyone can contribute. We check each other's work, communicate and collaborate to solve problems. We strive to be welcoming, respectful, yet make sure that our code follows the latest programming guidelines.