package net.datastructures;
//begin#fragment Deque
 /** 
  * Interface for a deque: a collection of objects that are inserted
  * and removed at both ends; a subset of java.util.LinkedList methods.
  * 
  * @author Roberto Tamassia
  * @author Michael Goodrich
  */

public interface Deque<E> {
 /**
  * Returns the number of elements in the deque.
  */
  public int size();
 /** 
  * Returns whether the deque is empty.
  */
  public boolean isEmpty();
 /** 
  * Returns the first element; an exception is thrown if deque is empty.
  */
  public E getFirst() throws EmptyDequeException;
 /** 
  * Returns the last element; an exception is thrown if deque is empty.
  */
  public E getLast() throws EmptyDequeException;
 /**
  * Inserts an element to be the first in the deque.
  */
  public void addFirst (E element); 
 /**
  * Inserts an element to be the last in the deque.
  */
  public void addLast (E element); 
 /** 
  * Removes the first element; an exception is thrown if deque is empty.
  */
  public E removeFirst() throws EmptyDequeException;
 /** 
  * Removes the last element; an exception is thrown if deque is empty.
  */
  public E removeLast() throws EmptyDequeException;
}
//end#fragment Deque
