diff --git a/a1/src/edu/wmich/cs3310/a1/DataStructures/CharQueue.java b/a1/src/edu/wmich/cs3310/a1/DataStructures/CharQueue.java index 063211bff7d287a3c8d720d66f12270abc6dc5f3..929a78b1ff449455aa0609d6cbdbf55b38fba923 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 fc1a5849f757d2343212ffa5e5443fca1b86f189..45d404826b85068e4a9dc4b1e46012d38823b237 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 }