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;
}
}