diff --git a/Stack.java b/Stack.java new file mode 100644 index 0000000..a2b9460 --- /dev/null +++ b/Stack.java @@ -0,0 +1,49 @@ +public class Stack { + private static final int DEFAULT_CAPACITY = 10; + private Object[] elements; + private int size; + + public Stack() { + elements = new Object[DEFAULT_CAPACITY]; + size = 0; + } + + public void push(T item) { + ensureCapacity(); + elements[size++] = item; + } + + @SuppressWarnings("unchecked") + public T pop() { + if (isEmpty()) { + throw new IllegalStateException("Stack is empty"); + } + T item = (T) elements[--size]; + elements[size] = null; // Help with garbage collection + return item; + } + + public T peek() { + if (isEmpty()) { + throw new IllegalStateException("Stack is empty"); + } + @SuppressWarnings("unchecked") + T item = (T) elements[size - 1]; + return item; + } + + public boolean isEmpty() { + return size == 0; + } + + public int size() { + return size; + } + + private void ensureCapacity() { + if (size == elements.length) { + int newCapacity = elements.length * 2; + elements = Arrays.copyOf(elements, newCapacity); + } + } +}