Files
unisa_strutture_dati_2013_2014/deque/NodeDeque.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;
}