// Stack implemented as array, with exceptions. class MyPopEmptyStack extends Exception {} class MyOverflowStack extends Exception {} public class ArrayStack { private T[] stack; private int numElements = 0; // points to slot after top element public ArrayStack(T[] s) { stack = s; } public boolean emptyStack() { return numElements == 0; } public T top() { return stack[numElements-1]; } public void push(T X) throws MyOverflowStack { if (numElements >= stack.length) throw new MyOverflowStack(); stack[numElements] = X; numElements++; } public T pop() throws MyPopEmptyStack { numElements--; if (numElements < 0) throw new MyPopEmptyStack(); return stack[numElements]; } }