From b21a875b22612a21ea21108b1fe8b7d99be342b0 Mon Sep 17 00:00:00 2001
From: Brandon Rodriguez <brodriguez8774@gmail.com>
Date: Fri, 13 Oct 2017 16:06:30 -0400
Subject: [PATCH] Add enqueue method that simulates a singly-linked linked list

All other main stack/queue methods use the head node.
Thus, there is no reason to add singly-linked simulation methods for those.
---
 .../cs3310/a1/DataStructures/CharQueue.java   | 29 +++++++++++++++
 a1/tests/DataStructures/CharQueueTests.java   | 36 +++++++++++++++++++
 2 files changed, 65 insertions(+)

diff --git a/a1/src/edu/wmich/cs3310/a1/DataStructures/CharQueue.java b/a1/src/edu/wmich/cs3310/a1/DataStructures/CharQueue.java
index 063211b..929a78b 100644
--- a/a1/src/edu/wmich/cs3310/a1/DataStructures/CharQueue.java
+++ b/a1/src/edu/wmich/cs3310/a1/DataStructures/CharQueue.java
@@ -69,6 +69,35 @@ public class CharQueue extends CharList {
     }
 
 
+    /**
+     * Adds new node to tail of list, by acting like list is
+     * only a singly-linked linked list.
+     * @param character Character for node to hold.
+     */
+    public void Enqueue_Singly(char character) {
+        CharNode tempNode;
+        CharNode newNode = new CharNode();
+        newNode.myData(character);
+
+        // Check if list is empty.
+        if (firstNode == null) {
+            firstNode = newNode;
+            lastNode = newNode;
+        } else {
+            tempNode = firstNode;
+
+            // Find last node in list.
+            while (tempNode.nextNode() != null) {
+                tempNode = tempNode.nextNode();
+            }
+
+            tempNode.nextNode(newNode);
+            newNode.prevNode(tempNode);
+            lastNode = newNode;
+        }
+    }
+
+
     /**
      * Removes node from list head.
      * @return Removed node or null if list is empty.
diff --git a/a1/tests/DataStructures/CharQueueTests.java b/a1/tests/DataStructures/CharQueueTests.java
index fc1a584..45d4048 100644
--- a/a1/tests/DataStructures/CharQueueTests.java
+++ b/a1/tests/DataStructures/CharQueueTests.java
@@ -63,6 +63,40 @@ public class CharQueueTests {
     }
 
 
+    @Test
+    public void Test_Enqueue_Singly() {
+        Assert.assertNull(aQueue.headNode());
+        Assert.assertNull(aQueue.tailNode());
+
+        // Test enqueueing with one node.
+        aQueue.Enqueue_Singly('a');
+        Assert.assertEquals('a', aQueue.headNode().myData());
+        Assert.assertNull(aQueue.headNode().prevNode());
+        Assert.assertNull(aQueue.tailNode().nextNode());
+        Assert.assertEquals(aQueue.headNode(), aQueue.tailNode());
+
+        // Test enqueueing with two nodes.
+        aQueue.Enqueue_Singly('b');
+        Assert.assertEquals('a', aQueue.headNode().myData());
+        Assert.assertEquals('b', aQueue.tailNode().myData());
+        Assert.assertNull(aQueue.headNode().prevNode());
+        Assert.assertNull(aQueue.tailNode().nextNode());
+        Assert.assertEquals(aQueue.headNode(), aQueue.tailNode().prevNode());
+        Assert.assertEquals(aQueue.tailNode(), aQueue.headNode().nextNode());
+
+        // Test enqueueing with three nodes.
+        aQueue.Enqueue_Singly('c');
+        Assert.assertEquals('a', aQueue.headNode().myData());
+        Assert.assertEquals('b', aQueue.headNode().nextNode().myData());
+        Assert.assertEquals('c', aQueue.tailNode().myData());
+        Assert.assertNull(aQueue.headNode().prevNode());
+        Assert.assertNull(aQueue.tailNode().nextNode());
+        Assert.assertEquals(aQueue.headNode(), aQueue.tailNode().prevNode().prevNode());
+        Assert.assertEquals(aQueue.headNode().nextNode(), aQueue.tailNode().prevNode());
+        Assert.assertEquals(aQueue.headNode().nextNode().nextNode(), aQueue.tailNode());
+    }
+
+
     @Test
     public void Test_Dequeue() {
         aQueue.Enqueue('a');
@@ -107,5 +141,7 @@ public class CharQueueTests {
         Assert.assertNull(aNode);
     }
 
+
+
     //endregion Tests
 }
-- 
GitLab