/** * O(1) time. */ public int size() { return (top + 1); } /** * O(1) time. */ public boolean isEmpty() { return (top < 0); } /** * O(1) time. * @exception StackFullException if the array is full. */ public void push(Object obj) throws StackFullException { if (size() == capacity) throw new StackFullException("Stack overflow."); S[++top] = obj; } /** * O(1) time. */ public Object top() throws StackEmptyException { if (isEmpty()) throw new StackEmptyException("Stack is empty."); return S[top]; } /** * O(1) time. */ public Object pop() throws StackEmptyException { Object elem; if (isEmpty()) throw new StackEmptyException("Stack is Empty."); elem = S[top]; S[top--] = null; // dereference S[top] for garbage collection. return elem; } }