package deque; import deque.utility.DLNode; import exceptions.EmptyDequeException; /** * Created with xgiovio.macbookair. * User: xgiovio * Date: 17/03/14 * Time: 16:26 */ //Copyright (c) 2003 Brown University, Providence, RI //Additional modifications and methods by xgiovio public class NodeDeque implements Deque { public NodeDeque(){ header.setNext(trailer); trailer.setPrev(header); } @Override public int size() { return nelements; } @Override public boolean isEmpty() { if (nelements == 0){ return true; } else{ return false; } } @Override public E getFirst() throws EmptyDequeException { if (isEmpty()){ throw new EmptyDequeException(); } else { return header.getNext().getElement(); } } @Override public E getLast() throws EmptyDequeException { if (isEmpty()){ throw new EmptyDequeException(); } else { return trailer.getPrev().getElement(); } } @Override public void addFirst(E element) { DLNode temp = new DLNode(element); temp.setNext(header.getNext()); temp.getNext().setPrev(temp); header.setNext(temp); temp.setPrev(header); nelements++; } @Override public void addLast(E element) { DLNode temp = new DLNode(element); temp.setPrev(trailer.getPrev()); temp.getPrev().setNext(temp); temp.setNext(trailer); trailer.setPrev(temp); nelements++; } @Override public E removeFirst() throws EmptyDequeException { if (isEmpty()){ throw new EmptyDequeException(); } else { DLNode temp = header.getNext(); header.setNext( header.getNext().getNext()); header.getNext().setPrev(header); nelements--; return temp.getElement(); } } @Override public E removeLast() throws EmptyDequeException { if (isEmpty()){ throw new EmptyDequeException(); } else { DLNode temp = trailer.getPrev(); trailer.setPrev(trailer.getPrev().getPrev()); trailer.getPrev().setNext(trailer); nelements--; return temp.getElement(); } } @Override public String toString() { String to_return = ""; to_return = to_return + "["; for ( DLNode temp = header.getNext(); temp != trailer ; temp = temp.getNext()){ if ( temp.getNext() == trailer){ to_return+=(temp.getElement().toString()); }else{ to_return+=( temp.getElement().toString() + ","); } } to_return = to_return + "]"; return to_return; } private DLNode header = new DLNode(); private DLNode trailer = new DLNode(); private int nelements = 0; }