/**
* 
* Interface for a queue for an array implementation
*
*  Author Alex Rudniy
*/

public interface ArrayQueue {

  /**
  * enqueue: adds a new element to the end of the queue 
  * N - number of elements in the array
  *
  * @param item	The element to be inserted
  * @pre	size() < N
  * @post	size() == size()@pre + 1
  */
  public void enqueue(Object item);

  /**
  * dequeue: removes the element at the front of the queue and returns the element
  *
  * @pre	size() > 0
  * @post	size() == size()@pre - 1
  * @post	@result == first()@pre;
  */
  public Object dequeue();

  /**
  * size: returns the number of elements in the queue
  *
  * @pre	true
  * @post	@nochange
  */
  public int size();

  /**
  * first: returns the element at the front of the queue
  *
  * @pre	size() > 0
  * @post	@nochange
  */
  public Object first();

  /**
  * last: returns the element at the end of the queue
  * 
  * @pre size() > 0
  * @post = @nochange
  */
  public Object last();
}