124 lines
2.9 KiB
Java
124 lines
2.9 KiB
Java
package deque;
|
|
|
|
import deque.utility.DLNode;
|
|
import exceptions.EmptyDequeException;
|
|
|
|
/**
|
|
* Created with xgiovio.macbookair.
|
|
* User: xgiovio
|
|
* Date: 17/03/14
|
|
* Time: 16:26
|
|
*/
|
|
public class NodeDeque<E> implements Deque <E> {
|
|
|
|
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<E> temp = new DLNode<E>(element);
|
|
temp.setNext(header.getNext());
|
|
temp.getNext().setPrev(temp);
|
|
header.setNext(temp);
|
|
temp.setPrev(header);
|
|
nelements++;
|
|
|
|
}
|
|
|
|
@Override
|
|
public void addLast(E element) {
|
|
DLNode<E> temp = new DLNode<E>(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<E> 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<E> 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<E> 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<E> header = new DLNode<E>();
|
|
private DLNode<E> trailer = new DLNode<E>();
|
|
private int nelements = 0;
|
|
|
|
}
|