Implementing a Stack Using an Array
If we implement a stack as an array, we would need ...
public class ArrayStack<E> implements StackInt<E> { private E[] theData; int topOfStack = -1; private static final int INITIAL_CAPACITY = 10;
@SupressWarnings("unchecked") public ArrayStack() { theData = (E[])new Object[INITIAL_CAPACITY]; } |
public E push(E obj) { if (topOfStack == theData.length - 1){ reallocate(); } topOfStack++; theData[topOfStack] = obj; return obj; } |
@Override public E pop() { if (empty()) { throw new EmptyStackException(); } return theData[topOfStack--]; } |
import java.util.EmptyStackException; /** Implementation of the interface StackInt<E> using * an array. * @author Koffman & Wolfgang */ public class ArrayStack<E> implements StackInt<E> { // Data Fields /** Storage for stack. */ E[] theData; /** Index to top of stack. */ int topOfStack = -1; // Initially empty stack. private static final int INITIAL_CAPACITY = 10; /** * Construct an empty stack with the default * initial capacity. */ public ArrayStack() { theData = (E[]) new Object[INITIAL_CAPACITY]; } /** * Insert a new item on top of the stack. * @post The new item is the top item on the stack. * All other items are one position lower. * @param obj The item to be inserted * @return The item that was inserted */ @Override public E push(E obj) { if (topOfStack == theData.length - 1) { reallocate(); } topOfStack++; theData[topOfStack] = obj; return obj; } /** * Remove and return the top item on the stack. * @pre The stack is not empty. * @post The top item on the stack has been * removed and the stack is one item smaller. * @return The top item on the stack * @throws EmptyStackException if the stack is empty */ @Override public E pop() { if (empty()) { throw new EmptyStackException(); } return theData[topOfStack--]; } /*<exercise chapter="3" section="3" type="programming" number="2">*/ /** * Return the top item on the stack * Pre: The stack is not empty * Post: The stack remains unchanged * @return The top item on the stack * @throws EmptyStackException If the stack * is empty */ @Override public E peek() { if (empty()) { throw new EmptyStackException(); } return theData[topOfStack]; } /** * Return true if the stack is empty * @return True if the stack is empty */ @Override public boolean empty() { return topOfStack == -1; } /** * Method to reallocate the array containing the stack data * @post The size of the data array has been doubled * and all of the data has been copied to the new array */ private void reallocate() { E[] temp = (E[]) new Object[2 * theData.length]; System.arraycopy(theData, 0, temp, 0, theData.length); theData = temp; } }