public class ArrayQueue implements Queue 
{

    static final int defaultsize = 100;

    Object data[];
    int head;
    int tail;
    int size;

    ArrayQueue(int maxsize) 
    {
        data = new Object[maxsize];
        head = 0;
        tail = 0;
        size = maxsize;
    }

    ArrayQueue() 
    {
        data = new Object[defaultsize];
        head = 0;
        tail = 0;
        size = defaultsize;
    }
    
    public void enqueue(Object elem) 
    {
	Assert.notFalse((tail+1)%size != head, "Queue Full");
	data[tail] = elem;
	tail = (tail + 1) % size;
    }
    
    public Object dequeue() 
    {
	Object retval;
	
	if (head == tail)
	    return null;
	retval = data[head];
	head = (head + 1) % size;
	return retval;
    }
    
    public boolean empty() 
    {
	return head == tail;
    }

    public String toString()
    {
	String result = "[";
        int tmpHead = head;
	if (tmpHead != tail)
	{
            result = result + data[tmpHead];
            tmpHead = (tmpHead + 1) % size;
            while (tmpHead != tail)
            {
		result = result + "," + data[tmpHead];
                tmpHead = (tmpHead + 1) % size;
	    }
	}
	result = result + "]";
	return result;
    }

}