From 9328c4c25efe8d665430f8cca57f36180cfa06fa Mon Sep 17 00:00:00 2001 From: Giovanni Di Grezia Date: Mon, 24 Mar 2014 11:22:54 +0100 Subject: [PATCH] Implementata completamente la deque --- com/xgiovio/DequeTest.java | 106 +++++++++++++++++++++++++++++++++++++ deque/NodeDeque.java | 83 ++++++++++++++++++++++++++--- deque/utility/DLNode.java | 40 +++++++++++++- 3 files changed, 222 insertions(+), 7 deletions(-) create mode 100644 com/xgiovio/DequeTest.java diff --git a/com/xgiovio/DequeTest.java b/com/xgiovio/DequeTest.java new file mode 100644 index 0000000..f611f36 --- /dev/null +++ b/com/xgiovio/DequeTest.java @@ -0,0 +1,106 @@ +package com.xgiovio; + +import deque.Deque; +import deque.NodeDeque; +import general_utility.test_object; +import stack.NodeStack; + +/** + * Created with xgiovio.macbookair. + * User: xgiovio + * Date: 23/03/14 + * Time: 20:37 + */ +public class DequeTest { + + public static void main(String[] args) { + NodeDeque a = new NodeDeque(); + + System.out.print(a.isEmpty()); + System.out.print(a.size()); + System.out.print(a); + a.addFirst(new test_object(10)); + System.out.print(a.size()); + System.out.print(a); + a.addFirst(new test_object(20)); + System.out.print(a.size()); + System.out.print(a); + a.addLast(new test_object(30)); + System.out.print(a.size()); + System.out.print(a); + a.addLast(new test_object(40)); + System.out.print(a.size()); + System.out.print(a); + a.addLast(new test_object(50)); + a.addLast(new test_object(60)); + a.addLast(new test_object(70)); + System.out.print(a.size()); + System.out.print(a.isEmpty()); + System.out.println(a); + + a.removeFirst(); + System.out.println(a); + a.removeFirst(); + System.out.println(a); + a.removeFirst(); + System.out.println(a); + System.out.print(a.size()); + System.out.print(a.isEmpty()); + + a.removeLast(); + System.out.println(a); + a.removeLast(); + System.out.println(a); + a.removeLast(); + System.out.println(a); + a.removeLast(); + System.out.println(a); + System.out.print(a.size()); + System.out.print(a.isEmpty()); + + + a.addFirst(new test_object(10)); + System.out.print(a.size()); + System.out.print(a); + a.addFirst(new test_object(20)); + System.out.print(a.size()); + System.out.print(a); + a.addLast(new test_object(30)); + System.out.print(a.size()); + System.out.print(a); + a.addLast(new test_object(40)); + System.out.print(a.size()); + System.out.print(a); + a.addLast(new test_object(50)); + a.addLast(new test_object(60)); + a.addLast(new test_object(70)); + System.out.print(a.size()); + System.out.print(a.isEmpty()); + System.out.println(a); + + a.removeFirst(); + System.out.println(a); + a.removeFirst(); + System.out.println(a); + a.removeFirst(); + System.out.println(a); + System.out.print(a.size()); + System.out.print(a.isEmpty()); + + a.removeLast(); + System.out.println(a); + a.removeLast(); + System.out.println(a); + a.removeLast(); + System.out.println(a); + a.removeLast(); + System.out.println(a); + System.out.print(a.size()); + System.out.print(a.isEmpty()); + + + + + } + +} diff --git a/deque/NodeDeque.java b/deque/NodeDeque.java index dbfed1d..8715f04 100644 --- a/deque/NodeDeque.java +++ b/deque/NodeDeque.java @@ -1,5 +1,6 @@ package deque; +import deque.utility.DLNode; import exceptions.EmptyDequeException; /** @@ -10,43 +11,113 @@ import exceptions.EmptyDequeException; */ public class NodeDeque implements Deque { + public NodeDeque(){ + header.setNext(trailer); + trailer.setPrev(header); + } + @Override public int size() { - return 0; + return nelements; } @Override public boolean isEmpty() { - return false; + if (nelements == 0){ + return true; + } else{ + return false; + } } @Override public E getFirst() throws EmptyDequeException { - return null; + if (isEmpty()){ + throw new EmptyDequeException(); + } else { + return header.getNext().getElement(); + } } @Override public E getLast() throws EmptyDequeException { - return null; + 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 { - return null; + 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 { - return null; + 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; + } diff --git a/deque/utility/DLNode.java b/deque/utility/DLNode.java index 02b42e0..34ad38a 100644 --- a/deque/utility/DLNode.java +++ b/deque/utility/DLNode.java @@ -6,5 +6,43 @@ package deque.utility; * Date: 17/03/14 * Time: 16:32 */ -public class DLNode { +public class DLNode { + + public DLNode (){ + element = null;; + } + + public DLNode (E in_element){ + element = in_element; + } + + public void setElement (E in_element){ + element = in_element; + } + + public void setNext (DLNode in_next){ + next = in_next; + } + + public void setPrev (DLNode in_prev){ + prev = in_prev; + } + + public E getElement (){ + return element; + } + + public DLNode getNext() { + return next; + } + + public DLNode getPrev() { + return prev; + } + + private DLNode next = null; + private DLNode prev = null; + private E element; + + }