Array Stack
public class Stack
{
	private int count;//element number in stack
	private int top;//top element
	private int MAXSIZE = 10;//capacity
	private int space [];//array

	public Stack()
	{
		space = new int[MAXSIZE];
		count = 0;
		top = -1;
	}

	//inspectors
	public boolean isEmpty()
	{
		return (count <= 0);
	}

	public int getSize()
	{
		return count;
	}

	public int stackTop()
	{
		return top;
	}

	public boolean equals(Stack s)
	{
		if(count == s.count) return false;
		for(int i = 0; i < count; i++)
			if(space[i] != s.space[i])
				return false;
		return true;
	}

	public String toString()
	{
		String str = "[";
		for(int i = 0; i < count; i++)
			str = str + " "+space[i];
		str = str + "]";

		return str;
	}

	//Modifiers
	/*public void push(int e)
	{
		space[count] = e;
		top = e;
		count++;
	}*/
	public void push(int e)
	{
		if(count == MAXSIZE)
		{
			int [] space2 = new int[MAXSIZE*2];
			for(int i = 0; i < count; i++)
				space2[i] = space[i];
			MAXSIZE = MAXSIZE*2;
			space = space2;
		}
		space[count] = e;
		top = e;
		count++;
	}

	public boolean pop()
	{
		if(count <= 0) return false;
		count--;
		if(count == 0)
			top = -1;
		else
			top = space[count-1];
		return true;
	}

	public Stack copyStack()
	{
		Stack cp = new Stack();
		if(isEmpty()) return cp;

		for(int i = 0; i < count; i++)
			cp.push(space[i]);

		return cp;
	}
}
			
public class StackTest
{
	public static void main(String args[])
	{
		Stack s = new Stack();

		for(int i = 0; i < 11; i++)
			s.push(i);

		System.out.println(s);

		while(!s.isEmpty())
		{
			s.pop();
			System.out.println(s);
		}
	}
}