public class ArrayStack implements Stack { private Object data[]; private int top; private int size; public static final int DEFAULT_INITIAL_SIZE = 100; public ArrayStack() { data = new Object[DEFAULT_INITIAL_SIZE]; top = 0; size = DEFAULT_INITIAL_SIZE; } public ArrayStack(int initsize) { data = new Object[initsize]; top = 0; size = initsize; } public boolean empty() { return top == 0; } public void push(Object elem) { if (top == size) Grow_Stack(); data[top++] = elem; } public Object pop() { Object poppedvalue; if (top > 0) return data[--top]; else return null; } public String toString() { String result = "["; if (top > 0) { result = result + data[top-1]; } for (int i = top - 2; i >= 0; i--) { result = result + "," + data[i]; } result = result + "]"; return result; } protected void Grow_Stack() { int i; Object newdata[]; newdata = new Object[size * 2]; for (i=0; i<size; i++) newdata[i] = data[i]; data = newdata; size = size * 2; } }