| @ -0,0 +1,22 @@ | |||
| package net.jrtechs.www.DataStructures.Lists.Queue; | |||
| /** | |||
| * @author Jeffery Russell 8-26-18 | |||
| */ | |||
| public interface IQueue<E> | |||
| { | |||
| /** | |||
| * 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(); | |||
| } | |||
| @ -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 <E> generic data type | |||
| */ | |||
| public class Queue<E> implements IQueue<E> | |||
| { | |||
| /** Head node */ | |||
| private Node<E> head; | |||
| /**Stored tail to make insertions o(1) */ | |||
| private Node<E> 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<E> 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; | |||
| } | |||
| } | |||
| @ -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<String> words = new Queue<>(); | |||
| words.enqueue("One"); | |||
| words.enqueue("Two"); | |||
| words.enqueue("Three"); | |||
| assertNotNull(words.dequeue()); | |||
| } | |||
| @Test | |||
| public void testDequeue() | |||
| { | |||
| Queue<String> 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()); | |||
| } | |||
| } | |||