diff --git a/src/main/java/net/jrtechs/www/DataStructures/Lists/Queue/IQueue.java b/src/main/java/net/jrtechs/www/DataStructures/Lists/Queue/IQueue.java new file mode 100644 index 0000000..b3b1895 --- /dev/null +++ b/src/main/java/net/jrtechs/www/DataStructures/Lists/Queue/IQueue.java @@ -0,0 +1,22 @@ +package net.jrtechs.www.DataStructures.Lists.Queue; + +/** + * @author Jeffery Russell 8-26-18 + */ +public interface IQueue +{ + /** + * Adds a new element to the end of the queue + * + * @param element object to add + */ + public void enqueue(E element); + + + /** + * Removes an object from the queue. + * + * @return the object removed + */ + public E dequeue(); +} diff --git a/src/main/java/net/jrtechs/www/DataStructures/Lists/Queue/Queue.java b/src/main/java/net/jrtechs/www/DataStructures/Lists/Queue/Queue.java new file mode 100644 index 0000000..6b9c231 --- /dev/null +++ b/src/main/java/net/jrtechs/www/DataStructures/Lists/Queue/Queue.java @@ -0,0 +1,84 @@ +package net.jrtechs.www.DataStructures.Lists.Queue; + + +import net.jrtechs.www.DataStructures.Node; + + +/** + * Data structure which stores objects in a linked + * list where objects inserted first are removed first, + * and where objects inserted last are removed last. + * + * @author Jeffery Russell 8-26-18 + * @param generic data type + */ +public class Queue implements IQueue +{ + /** Head node */ + private Node head; + + /**Stored tail to make insertions o(1) */ + private Node tail; + + + /** + * Creates an empty queue + */ + public Queue() + { + this.head = null; + this.tail = null; + } + + + /** + * Creates a queue with a single element in it + * + * @param element object to add to queue + */ + public Queue(E element) + { + this.head = new Node<>(element); + this.tail = head; + } + + + /** + * Adds a single element to the queue + * + * @param element object to add + */ + @Override + public void enqueue(E element) + { + Node newElement = new Node<>(element); + if(this.tail == null) + { + this.head = newElement; + this.tail = newElement; + } + else + { + this.tail.setNext(newElement); + this.tail = newElement; + } + } + + + /** + * Removes the element from the front of the queue + * + * @return element removed + */ + @Override + public E dequeue() + { + if(this.head != null) + { + E temp = this.head.getData(); + this.head = this.head.getNext(); + return temp; + } + return null; + } +} diff --git a/src/test/java/net/jrtechs/www/DataStructures/Lists/QueueTest.java b/src/test/java/net/jrtechs/www/DataStructures/Lists/QueueTest.java new file mode 100644 index 0000000..3586ef1 --- /dev/null +++ b/src/test/java/net/jrtechs/www/DataStructures/Lists/QueueTest.java @@ -0,0 +1,56 @@ +package net.jrtechs.www.DataStructures.Lists; + +import net.jrtechs.www.DataStructures.Lists.Queue.Queue; +import org.junit.Test; + +import static junit.framework.TestCase.assertNotNull; +import static junit.framework.TestCase.assertNull; +import static junit.framework.TestCase.assertTrue; + +/** + * JUnit tests for + * {@link net.jrtechs.www.DataStructures.Lists.Queue.Queue} + * + * @author Jeffery Russell 8-26-18 + */ +public class QueueTest +{ + @Test + public void testCreation() + { + assertNotNull(new Queue<>()); + + assertNotNull(new Queue<>(12.0)); + } + + + @Test + public void testInsertion() + { + Queue words = new Queue<>(); + + words.enqueue("One"); + + words.enqueue("Two"); + + words.enqueue("Three"); + + assertNotNull(words.dequeue()); + } + + @Test + public void testDequeue() + { + Queue words = new Queue<>(); + + words.enqueue("One"); + words.enqueue("Two"); + words.enqueue("Three"); + + assertTrue(words.dequeue().equals("One")); + assertTrue(words.dequeue().equals("Two")); + assertTrue(words.dequeue().equals("Three")); + + assertNull(words.dequeue()); + } +} diff --git a/src/test/java/net/jrtechs/www/DataStructures/Lists/StackTest.java b/src/test/java/net/jrtechs/www/DataStructures/Lists/StackTest.java index deed2d0..1f86781 100644 --- a/src/test/java/net/jrtechs/www/DataStructures/Lists/StackTest.java +++ b/src/test/java/net/jrtechs/www/DataStructures/Lists/StackTest.java @@ -7,6 +7,11 @@ import static junit.framework.TestCase.assertFalse; import static junit.framework.TestCase.assertNotNull; import static junit.framework.TestCase.assertTrue; +/** + * JUnit tests for {@link Stack} + * + * @author Jeffery Russell 8-25-18 + */ public class StackTest {