diff --git a/a2/src/edu/wmich/cs3310/a2/Controller.java b/a2/src/edu/wmich/cs3310/a2/Controller.java index 86db3c6aeb1345be71b8855e19686013d761def2..1f0a59de6fa7656a5e7a1182624412f29f8ca422 100644 --- a/a2/src/edu/wmich/cs3310/a2/Controller.java +++ b/a2/src/edu/wmich/cs3310/a2/Controller.java @@ -3,8 +3,8 @@ package edu.wmich.cs3310.a2; import java.util.Random; import java.util.Scanner; -import edu.wmich.cs3310.a2.DataStructures.CharNode; -import edu.wmich.cs3310.a2.DataStructures.CharQueue; +import edu.wmich.cs3310.a2.DataStructures.LinkedNode; +import edu.wmich.cs3310.a2.DataStructures.LinkedQueue; /** @@ -24,11 +24,11 @@ public class Controller { private char[] mergeArray; private char[] insertArray; private char[] bInsertArray; - private CharQueue bubbleList = new CharQueue(); - private CharQueue selectList = new CharQueue(); - private CharQueue mergeList = new CharQueue(); - private CharQueue insertList = new CharQueue(); - private CharQueue bInsertList = new CharQueue(); + private LinkedQueue bubbleList = new LinkedQueue(); + private LinkedQueue selectList = new LinkedQueue(); + private LinkedQueue mergeList = new LinkedQueue(); + private LinkedQueue insertList = new LinkedQueue(); + private LinkedQueue bInsertList = new LinkedQueue(); //endregion Variables @@ -75,8 +75,8 @@ public class Controller { protected void PopulateData() { int index = 0; int randomInt; - CharNode tempNode; - CharQueue tempQueue = new CharQueue(); + LinkedNode tempNode; + LinkedQueue tempQueue = new LinkedQueue(); // Initialize arrays. bubbleArray = new char[charNumber]; @@ -96,16 +96,16 @@ public class Controller { // Take unsorted list and populate all other data structures with. index = 0; while ((tempNode = tempQueue.Dequeue()) != null) { - bubbleArray[index] = tempNode.myData(); - bubbleList.Enqueue(tempNode.myData()); - selectArray[index] = tempNode.myData(); - selectList.Enqueue(tempNode.myData()); - mergeArray[index] = tempNode.myData(); - mergeList.Enqueue(tempNode.myData()); - insertArray[index] = tempNode.myData(); - insertList.Enqueue(tempNode.myData()); - bInsertArray[index] = tempNode.myData(); - bInsertList.Enqueue(tempNode.myData()); + bubbleArray[index] = tempNode.data(); + bubbleList.Enqueue(tempNode.data()); + selectArray[index] = tempNode.data(); + selectList.Enqueue(tempNode.data()); + mergeArray[index] = tempNode.data(); + mergeList.Enqueue(tempNode.data()); + insertArray[index] = tempNode.data(); + insertList.Enqueue(tempNode.data()); + bInsertArray[index] = tempNode.data(); + bInsertList.Enqueue(tempNode.data()); index++; } } @@ -166,8 +166,8 @@ public class Controller { protected void ListBubbleSort() { boolean wasSorted = true; char tempChar; - CharNode currentNode = bubbleList.headNode(); - CharNode lastUnsortedNode = bubbleList.tailNode(); + LinkedNode currentNode = bubbleList.headNode(); + LinkedNode lastUnsortedNode = bubbleList.tailNode(); // Loop until one iteration does NOT change values. while (wasSorted) { @@ -176,16 +176,16 @@ public class Controller { // Loop through all unsorted values. while (currentNode != lastUnsortedNode) { // Check current and next values. - if (currentNode.myData() > currentNode.nextNode().myData()) { - tempChar = currentNode.myData(); - currentNode.myData(currentNode.nextNode().myData()); - currentNode.nextNode().myData(tempChar); + if (currentNode.data() > currentNode.next().data()) { + tempChar = currentNode.data(); + currentNode.data(currentNode.next().data()); + currentNode.next().data(tempChar); wasSorted = true; } - currentNode = currentNode.nextNode(); + currentNode = currentNode.next(); } currentNode = bubbleList.headNode(); - lastUnsortedNode = lastUnsortedNode.prevNode(); + lastUnsortedNode = lastUnsortedNode.prev(); } } @@ -231,33 +231,33 @@ public class Controller { protected void ListSelectionSort() { int currentIndex; int selectedIndex; - CharNode tempNode; - CharNode currentNode; - CharNode selectedNode; - CharQueue tempQueue = new CharQueue(); + LinkedNode tempNode; + LinkedNode currentNode; + LinkedNode selectedNode; + LinkedQueue tempQueue = new LinkedQueue(); // Loop until all values are sorted. while (selectList.headNode() != null) { selectedIndex = 0; currentIndex = 1; selectedNode = selectList.headNode(); - currentNode = selectedNode.nextNode(); + currentNode = selectedNode.next(); // Find node of "highest" letter. while(currentNode != null) { // Compare values. - if (currentNode.myData() < selectedNode.myData()) { + if (currentNode.data() < selectedNode.data()) { selectedIndex = currentIndex; selectedNode = currentNode; } currentIndex++; - currentNode = currentNode.nextNode(); + currentNode = currentNode.next(); } // Remove found node and add to new "sorted" list. tempNode = selectList.Delete(selectedIndex); - tempQueue.Enqueue(tempNode.myData()); + tempQueue.Enqueue(tempNode.data()); } selectList = tempQueue; @@ -332,16 +332,16 @@ public class Controller { * @param highIndex Highest index for given queue section. * @return */ - protected CharQueue ListMergeSort(CharQueue unsortedQueue, int lowIndex, int highIndex) { + protected LinkedQueue ListMergeSort(LinkedQueue unsortedQueue, int lowIndex, int highIndex) { int index; int midIndex; - CharNode tempNode; - CharQueue firstHalf = new CharQueue(); - CharQueue secondHalf = new CharQueue(); - CharQueue sortedQueue; + LinkedNode tempNode; + LinkedQueue firstHalf = new LinkedQueue(); + LinkedQueue secondHalf = new LinkedQueue(); + LinkedQueue sortedQueue; // Base Case. If list is only one node large, back out of recursion. - if ((unsortedQueue.headNode() == null) || (unsortedQueue.headNode().nextNode() == null)) { + if ((unsortedQueue.headNode() == null) || (unsortedQueue.headNode().next() == null)) { return unsortedQueue; } @@ -352,15 +352,15 @@ public class Controller { tempNode = mergeList.Retrieve(lowIndex); for (index = 0; index < ((midIndex + 1) - lowIndex); index++) { - firstHalf.Enqueue(tempNode.myData()); - tempNode = tempNode.nextNode(); + firstHalf.Enqueue(tempNode.data()); + tempNode = tempNode.next(); } // Right half. tempNode = mergeList.Retrieve(midIndex + 1); for (index = 0; index < (highIndex - midIndex); index++) { - secondHalf.Enqueue(tempNode.myData()); - tempNode = tempNode.nextNode(); + secondHalf.Enqueue(tempNode.data()); + tempNode = tempNode.next(); } firstHalf = ListMergeSort(firstHalf, lowIndex, midIndex); secondHalf = ListMergeSort(secondHalf, (midIndex + 1), highIndex); @@ -378,9 +378,9 @@ public class Controller { * @param midIndex Ending index of first half/starting index of second half. * @param highIndex Ending index of second half. */ - protected CharQueue MergeList(CharQueue firstHalf, CharQueue secondHalf, int lowIndex, int midIndex, int highIndex) { - CharNode tempNode; - CharQueue sortedQueue = new CharQueue(); + protected LinkedQueue MergeList(LinkedQueue firstHalf, LinkedQueue secondHalf, int lowIndex, int midIndex, int highIndex) { + LinkedNode tempNode; + LinkedQueue sortedQueue = new LinkedQueue(); // Loop until all passed values have been looked at. while ((firstHalf.headNode()) != null || (secondHalf.headNode() != null)) { @@ -388,20 +388,20 @@ public class Controller { // Check if left side is done but right is not. if (firstHalf.headNode() == null) { tempNode = secondHalf.Dequeue(); - sortedQueue.Enqueue(tempNode.myData()); + sortedQueue.Enqueue(tempNode.data()); } else { // Check if right side is done but left is not. if (secondHalf.headNode() == null) { tempNode = firstHalf.Dequeue(); - sortedQueue.Enqueue(tempNode.myData()); + sortedQueue.Enqueue(tempNode.data()); } else { // Both sides not done. compare left and right values. - if (firstHalf.headNode().myData() > secondHalf.headNode().myData()) { + if (firstHalf.headNode().data() > secondHalf.headNode().data()) { tempNode = secondHalf.Dequeue(); - sortedQueue.Enqueue(tempNode.myData()); + sortedQueue.Enqueue(tempNode.data()); } else { tempNode = firstHalf.Dequeue(); - sortedQueue.Enqueue(tempNode.myData()); + sortedQueue.Enqueue(tempNode.data()); } } } @@ -444,23 +444,23 @@ public class Controller { protected void ListInsertionSort() { int currentIndex; char tempChar; - CharNode currentNode = insertList.headNode().nextNode(); - CharNode tempNode; - CharNode highestNode = insertList.headNode(); + LinkedNode currentNode = insertList.headNode().next(); + LinkedNode tempNode; + LinkedNode highestNode = insertList.headNode(); // Loop until all values are sorted. for (currentIndex = 1; currentIndex < charNumber; currentIndex++) { // Compare values. Continually loop until null pointer or proper order is found. tempNode = highestNode; - while ((currentNode.prevNode() != null) && (currentNode.myData() < tempNode.myData())) { - tempChar = currentNode.myData(); - currentNode.myData(tempNode.myData()); - tempNode.myData(tempChar); - tempNode = tempNode.prevNode(); - currentNode = currentNode.prevNode(); + while ((currentNode.prev() != null) && (currentNode.data() < tempNode.data())) { + tempChar = currentNode.data(); + currentNode.data(tempNode.data()); + tempNode.data(tempChar); + tempNode = tempNode.prev(); + currentNode = currentNode.prev(); } - highestNode = highestNode.nextNode(); - currentNode = highestNode.nextNode(); + highestNode = highestNode.next(); + currentNode = highestNode.next(); } } @@ -550,17 +550,17 @@ public class Controller { */ protected void ListBinaryInsertionSort() { int currentIndex; - CharNode currentNode = bInsertList.headNode().nextNode(); - CharNode highestNode = bInsertList.headNode(); + LinkedNode currentNode = bInsertList.headNode().next(); + LinkedNode highestNode = bInsertList.headNode(); // Loop until all values are sorted. for (currentIndex = 1; currentIndex < charNumber; currentIndex++) { // Compare values. Continually loop until null pointer or proper order is found. - if (currentNode.myData() < highestNode.myData()) { + if (currentNode.data() < highestNode.data()) { ListBinaryInsert(bInsertList.headNode(), currentNode, 0, currentIndex); } - highestNode = highestNode.nextNode(); - currentNode = highestNode.nextNode(); + highestNode = highestNode.next(); + currentNode = highestNode.next(); } } @@ -573,24 +573,24 @@ public class Controller { * @param lowIndex The node number of the lower bound. * @param highIndex The node number of the upper bound. */ - protected void ListBinaryInsert(CharNode lowNode, CharNode highNode, int lowIndex, int highIndex) { + protected void ListBinaryInsert(LinkedNode lowNode, LinkedNode highNode, int lowIndex, int highIndex) { int index; int midIndex; char tempChar; - CharNode midNode; + LinkedNode midNode; // Check if end of search. if (lowNode == highNode) { // End of search. - tempChar = highNode.myData(); + tempChar = highNode.data(); // Insert value at appropriate location. - if (lowNode.myData() > tempChar) { - lowNode.nextNode().myData(lowNode.myData()); - highNode = highNode.prevNode(); + if (lowNode.data() > tempChar) { + lowNode.next().data(lowNode.data()); + highNode = highNode.prev(); } - highNode.myData(tempChar); + highNode.data(tempChar); } else { @@ -598,34 +598,34 @@ public class Controller { midIndex = (lowIndex + highIndex) / 2; midNode = lowNode; for (index = lowIndex; index < midIndex; index++) { - midNode = midNode.nextNode(); + midNode = midNode.next(); } // Check for value match. - if (midNode.myData() == highNode.myData()) { + if (midNode.data() == highNode.data()) { - tempChar = highNode.myData(); - while (highNode != midNode.nextNode()) { - highNode.myData(highNode.prevNode().myData()); - highNode = highNode.prevNode(); + tempChar = highNode.data(); + while (highNode != midNode.next()) { + highNode.data(highNode.prev().data()); + highNode = highNode.prev(); } - midNode.nextNode().myData(tempChar); + midNode.next().data(tempChar); ListBinaryInsert(lowNode, midNode, lowIndex, midIndex); } else { - if (midNode.myData() > highNode.myData()) { + if (midNode.data() > highNode.data()) { // Move all prior values down by one since second half of list was eliminated. - tempChar = highNode.myData(); + tempChar = highNode.data(); while (highNode != midNode) { - highNode.myData(highNode.prevNode().myData()); - highNode = highNode.prevNode(); + highNode.data(highNode.prev().data()); + highNode = highNode.prev(); } - midNode.myData(tempChar); + midNode.data(tempChar); ListBinaryInsert(lowNode, midNode, lowIndex, midIndex); } else { - ListBinaryInsert((midNode.nextNode()), highNode, (midIndex + 1), highIndex); + ListBinaryInsert((midNode.next()), highNode, (midIndex + 1), highIndex); } } } @@ -673,7 +673,7 @@ public class Controller { */ protected void PrintAllDataStructures() { int index; - CharNode tempNode; + LinkedNode tempNode; System.out.println(); @@ -689,8 +689,8 @@ public class Controller { System.out.println(); System.out.print(" List: "); while (tempNode != null) { - System.out.print(" " + tempNode.myData()); - tempNode = tempNode.nextNode(); + System.out.print(" " + tempNode.data()); + tempNode = tempNode.next(); } System.out.println(); System.out.println(); @@ -707,8 +707,8 @@ public class Controller { System.out.println(); System.out.print(" List: "); while (tempNode != null) { - System.out.print(" " + tempNode.myData()); - tempNode = tempNode.nextNode(); + System.out.print(" " + tempNode.data()); + tempNode = tempNode.next(); } System.out.println(); System.out.println(); @@ -725,8 +725,8 @@ public class Controller { System.out.println(); System.out.print(" List: "); while (tempNode != null) { - System.out.print(" " + tempNode.myData()); - tempNode = tempNode.nextNode(); + System.out.print(" " + tempNode.data()); + tempNode = tempNode.next(); } System.out.println(); System.out.println(); @@ -743,8 +743,8 @@ public class Controller { System.out.println(); System.out.print(" List: "); while (tempNode != null) { - System.out.print(" " + tempNode.myData()); - tempNode = tempNode.nextNode(); + System.out.print(" " + tempNode.data()); + tempNode = tempNode.next(); } System.out.println(); System.out.println(); @@ -761,8 +761,8 @@ public class Controller { System.out.println(); System.out.print(" List: "); while (tempNode != null) { - System.out.print(" " + tempNode.myData()); - tempNode = tempNode.nextNode(); + System.out.print(" " + tempNode.data()); + tempNode = tempNode.next(); } System.out.println(); System.out.println(); diff --git a/a2/src/edu/wmich/cs3310/a2/DataStructures/CharNode.java b/a2/src/edu/wmich/cs3310/a2/DataStructures/CharNode.java deleted file mode 100644 index 7ef6193b651f0823d5146c161234463886134411..0000000000000000000000000000000000000000 --- a/a2/src/edu/wmich/cs3310/a2/DataStructures/CharNode.java +++ /dev/null @@ -1,77 +0,0 @@ -package edu.wmich.cs3310.a2.DataStructures; - - -/** - * Node class for linked list. - */ -public class CharNode { - - //region Variables - - private char data; - private CharNode nextNode; - private CharNode prevNode; - - //endregion Variables - - - - //region Properties - - /** - * Getter for node char. - * @return The char that node holds. - */ - public char myData() { - return data; - } - - - - /** - * Setter for node char. - * @param data The char for node to hold. - */ - public void myData(char data) { - this.data = data; - } - - - /** - * Getter for next node. - * @return The next node. - */ - public CharNode nextNode() { - return nextNode; - } - - - /** - * Setter for next node. - * @param nextNode The next node to hold. - */ - public void nextNode(CharNode nextNode) { - this.nextNode = nextNode; - } - - - /** - * Getter for previous node. - * @return The previous node. - */ - public CharNode prevNode() { - return prevNode; - } - - - /** - * Setter for previous node. - * @param prevNode The previous node. - */ - public void prevNode(CharNode prevNode) { - this.prevNode = prevNode; - } - - //endregion Properties - -} diff --git a/a2/src/edu/wmich/cs3310/a2/DataStructures/CharList.java b/a2/src/edu/wmich/cs3310/a2/DataStructures/LinkedList.java similarity index 66% rename from a2/src/edu/wmich/cs3310/a2/DataStructures/CharList.java rename to a2/src/edu/wmich/cs3310/a2/DataStructures/LinkedList.java index 31c0c8fa637800125ba9a5b7453c99d693e37bb4..422a1e20eb485f15995d5838d1f8dd631a76b1ee 100644 --- a/a2/src/edu/wmich/cs3310/a2/DataStructures/CharList.java +++ b/a2/src/edu/wmich/cs3310/a2/DataStructures/LinkedList.java @@ -2,14 +2,14 @@ package edu.wmich.cs3310.a2.DataStructures; /** - * Doubly linked list using CharNode for nodes. + * Doubly linked list using LinkedNode for nodes. */ -public class CharList { +public class LinkedList { //region Variables - protected CharNode firstNode; - protected CharNode lastNode; + protected LinkedNode firstNode; + protected LinkedNode lastNode; //endregion Variables @@ -20,7 +20,7 @@ public class CharList { /** * Base constructor. */ - public CharList() { + public LinkedList() { } @@ -34,7 +34,7 @@ public class CharList { * Getter for first node in list. * @return First node of list. */ - public CharNode firstNode() { + public LinkedNode firstNode() { return firstNode; } @@ -43,7 +43,7 @@ public class CharList { * Getter for last node in list. * @return Last node of list. */ - public CharNode lastNode() { + public LinkedNode lastNode() { return lastNode; } @@ -59,8 +59,8 @@ public class CharList { * @param index Index of node to retrieve. * @return Retrieved node or null if failure. */ - public CharNode Retrieve(int index) { - CharNode tempNode; + public LinkedNode Retrieve(int index) { + LinkedNode tempNode; int tempIndex = 0; // Check that index is valid. @@ -72,7 +72,7 @@ public class CharList { // Loop until index is found or all nodes are searched. while (tempIndex < index && tempNode != null) { - tempNode = tempNode.nextNode(); + tempNode = tempNode.next(); tempIndex++; } @@ -87,10 +87,10 @@ public class CharList { * @return True on success or false on failure. */ public Boolean Insert(char character, int index) { - CharNode newNode = new CharNode(); - CharNode tempNode; - CharNode nextPlaceholder; - CharNode prevPlaceholder; + LinkedNode newNode = new LinkedNode(); + LinkedNode tempNode; + LinkedNode nextPlaceholder; + LinkedNode prevPlaceholder; // Get node directly before desired index. tempNode = Retrieve((index - 1)); @@ -100,7 +100,7 @@ public class CharList { return false; } - newNode.myData(character); + newNode.data(character); // Check if list is empty. if (firstNode == null) { @@ -110,18 +110,18 @@ public class CharList { nextPlaceholder = Retrieve(index); prevPlaceholder = tempNode; - // Set nextNode properties. - newNode.nextNode(nextPlaceholder); + // Set next properties. + newNode.next(nextPlaceholder); if (nextPlaceholder != null) { - nextPlaceholder.prevNode(newNode); + nextPlaceholder.prev(newNode); } else { lastNode = newNode; } - // Set prevNode properties. - newNode.prevNode(prevPlaceholder); + // Set prev properties. + newNode.prev(prevPlaceholder); if (prevPlaceholder != null) { - prevPlaceholder.nextNode(newNode); + prevPlaceholder.next(newNode); } else { firstNode = newNode; } @@ -135,10 +135,10 @@ public class CharList { * @param index Index of node to delete. * @return Deleted node or null on failure. */ - public CharNode Delete(int index) { - CharNode foundNode; - CharNode nextPlaceholder; - CharNode prevPlaceholder; + public LinkedNode Delete(int index) { + LinkedNode foundNode; + LinkedNode nextPlaceholder; + LinkedNode prevPlaceholder; foundNode = Retrieve(index); @@ -147,25 +147,25 @@ public class CharList { return null; } - nextPlaceholder = foundNode.nextNode(); - prevPlaceholder = foundNode.prevNode(); + nextPlaceholder = foundNode.next(); + prevPlaceholder = foundNode.prev(); // Handling for next property. if (prevPlaceholder != null) { - prevPlaceholder.nextNode(nextPlaceholder); + prevPlaceholder.next(nextPlaceholder); } else { firstNode = nextPlaceholder; } // Handling for prev property. if (nextPlaceholder != null) { - nextPlaceholder.prevNode(prevPlaceholder); + nextPlaceholder.prev(prevPlaceholder); } else { lastNode = prevPlaceholder; } - foundNode.nextNode(null); - foundNode.prevNode(null); + foundNode.next(null); + foundNode.prev(null); return foundNode; } @@ -175,20 +175,20 @@ public class CharList { * @param character Character to delete. * @return Deleted node or null on failure. */ - public CharNode Delete(char character) { - CharNode tempNode = firstNode; - CharNode foundNode = null; - CharNode nextPlaceholder; - CharNode prevPlaceholder; + public LinkedNode Delete(char character) { + LinkedNode tempNode = firstNode; + LinkedNode foundNode = null; + LinkedNode nextPlaceholder; + LinkedNode prevPlaceholder; // Continue until character is found or all nodes are searched. while (tempNode != null) { - if (tempNode.myData() == character) { + if (tempNode.data() == character) { foundNode = tempNode; tempNode = null; } else { - tempNode = tempNode.nextNode(); + tempNode = tempNode.next(); } } @@ -196,25 +196,25 @@ public class CharList { if (foundNode == null) { return null; } else { - nextPlaceholder = foundNode.nextNode(); - prevPlaceholder = foundNode.prevNode(); + nextPlaceholder = foundNode.next(); + prevPlaceholder = foundNode.prev(); // Handling for next property. if (prevPlaceholder != null) { - prevPlaceholder.nextNode(nextPlaceholder); + prevPlaceholder.next(nextPlaceholder); } else { firstNode = nextPlaceholder; } // Handling for prev property. if (nextPlaceholder != null) { - nextPlaceholder.prevNode(prevPlaceholder); + nextPlaceholder.prev(prevPlaceholder); } else { lastNode = prevPlaceholder; } - foundNode.nextNode(null); - foundNode.prevNode(null); + foundNode.next(null); + foundNode.prev(null); return foundNode; } } diff --git a/a2/src/edu/wmich/cs3310/a2/DataStructures/LinkedNode.java b/a2/src/edu/wmich/cs3310/a2/DataStructures/LinkedNode.java new file mode 100644 index 0000000000000000000000000000000000000000..c258d7e165449cb711bcefb69f9f1d32eec4a978 --- /dev/null +++ b/a2/src/edu/wmich/cs3310/a2/DataStructures/LinkedNode.java @@ -0,0 +1,95 @@ +package edu.wmich.cs3310.a2.DataStructures; + + +/** + * Node class for linked list. + */ +public class LinkedNode { + + //region Variables + + private int stabilityInt; // Optional int value to help determine if sort method is stable. + private char aChar; // Primary data object for node to hold. + private LinkedNode nextNode; // Pointer to next node. + private LinkedNode prevNode; // Pointer to prev node. + + //endregion Variables + + + + //region Properties + + /** + * Getter for node int. + * @return The int that node holds. + */ + public int stabilityInt() { + return stabilityInt; + } + + + /** + * Setter for node int. + * @param data The int for node to hold. + */ + public void stabilityInt(int data) { + this.stabilityInt = data; + } + + + /** + * Getter for node char. + * @return The char that node holds. + */ + public char data() { + return aChar; + } + + + /** + * Setter for node char. + * @param data The char for node to hold. + */ + public void data(char data) { + this.aChar = data; + } + + + /** + * Getter for next node. + * @return The next node. + */ + public LinkedNode next() { + return nextNode; + } + + + /** + * Setter for next node. + * @param nextNode The next node to hold. + */ + public void next(LinkedNode nextNode) { + this.nextNode = nextNode; + } + + + /** + * Getter for previous node. + * @return The previous node. + */ + public LinkedNode prev() { + return prevNode; + } + + + /** + * Setter for previous node. + * @param prevNode The previous node. + */ + public void prev(LinkedNode prevNode) { + this.prevNode = prevNode; + } + + //endregion Properties + +} diff --git a/a2/src/edu/wmich/cs3310/a2/DataStructures/CharQueue.java b/a2/src/edu/wmich/cs3310/a2/DataStructures/LinkedQueue.java similarity index 51% rename from a2/src/edu/wmich/cs3310/a2/DataStructures/CharQueue.java rename to a2/src/edu/wmich/cs3310/a2/DataStructures/LinkedQueue.java index f04063038af08114afed97073d1c9c87da939f1b..cf227aa363afd18239ea083ee67946943ac26965 100644 --- a/a2/src/edu/wmich/cs3310/a2/DataStructures/CharQueue.java +++ b/a2/src/edu/wmich/cs3310/a2/DataStructures/LinkedQueue.java @@ -4,7 +4,7 @@ package edu.wmich.cs3310.a2.DataStructures; /** * Queue implementation of linked list. */ -public class CharQueue extends CharList { +public class LinkedQueue extends LinkedList { //region Variables @@ -16,7 +16,7 @@ public class CharQueue extends CharList { //region Controllers - public CharQueue() { + public LinkedQueue() { } @@ -30,7 +30,7 @@ public class CharQueue extends CharList { * Getter for queue head node. * @return Node currently in head position. */ - public CharNode headNode() { + public LinkedNode headNode() { return firstNode; } @@ -39,7 +39,7 @@ public class CharQueue extends CharList { * Getter for queue tail node. * @return Node currently in tail position. */ - public CharNode tailNode() { + public LinkedNode tailNode() { return lastNode; } @@ -54,45 +54,16 @@ public class CharQueue extends CharList { * @param character Character for node to hold. */ public void Enqueue(char character) { - CharNode newNode = new CharNode(); - newNode.myData(character); + LinkedNode newNode = new LinkedNode(); + newNode.data(character); // Check if list is empty. if (firstNode == null) { firstNode = newNode; lastNode = newNode; } else { - newNode.prevNode(lastNode); - lastNode.nextNode(newNode); - lastNode = newNode; - } - } - - - /** - * 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); + newNode.prev(lastNode); + lastNode.next(newNode); lastNode = newNode; } } @@ -102,22 +73,22 @@ public class CharQueue extends CharList { * Removes node from list head. * @return Removed node or null if list is empty. */ - public CharNode Dequeue() { - CharNode tempNode = new CharNode(); + public LinkedNode Dequeue() { + LinkedNode tempNode = new LinkedNode(); // Check if list is empty. if (firstNode == null) { return null; } else { tempNode = firstNode; - firstNode = firstNode.nextNode(); - tempNode.nextNode(null); + firstNode = firstNode.next(); + tempNode.next(null); // Check if list was only one element. if (firstNode == null) { lastNode = null; } else { - firstNode.prevNode(null); + firstNode.prev(null); } } return tempNode; diff --git a/a2/src/edu/wmich/cs3310/a2/DataStructures/CharStack.java b/a2/src/edu/wmich/cs3310/a2/DataStructures/LinkedStack.java similarity index 73% rename from a2/src/edu/wmich/cs3310/a2/DataStructures/CharStack.java rename to a2/src/edu/wmich/cs3310/a2/DataStructures/LinkedStack.java index acbf05b09b2975c41ca373001444ead71351cf53..144d74efc0b9a6261fb2bb20255822ba61bf5cab 100644 --- a/a2/src/edu/wmich/cs3310/a2/DataStructures/CharStack.java +++ b/a2/src/edu/wmich/cs3310/a2/DataStructures/LinkedStack.java @@ -4,7 +4,7 @@ package edu.wmich.cs3310.a2.DataStructures; /** * Stack implementation of linked list. */ -public class CharStack extends CharList { +public class LinkedStack extends LinkedList { //region Variables @@ -16,7 +16,7 @@ public class CharStack extends CharList { //region Controllers - public CharStack() { + public LinkedStack() { } @@ -31,7 +31,7 @@ public class CharStack extends CharList { * Getter for stack head node. * @return Node currently in head position. */ - public CharNode headNode() { + public LinkedNode headNode() { return firstNode; } @@ -46,16 +46,16 @@ public class CharStack extends CharList { * @param character Character for node to hold. */ public void Push(char character) { - CharNode newNode = new CharNode(); - newNode.myData(character); + LinkedNode newNode = new LinkedNode(); + newNode.data(character); // Check if list is empty. if (firstNode == null) { firstNode = newNode; lastNode = newNode; } else { - newNode.nextNode(firstNode); - firstNode.prevNode(newNode); + newNode.next(firstNode); + firstNode.prev(newNode); firstNode = newNode; } } @@ -65,22 +65,22 @@ public class CharStack extends CharList { * Removes top node from list head. * @return Removed node or null if list is empty. */ - public CharNode Pop() { - CharNode tempNode; + public LinkedNode Pop() { + LinkedNode tempNode; // Check if list is empty. if (firstNode == null) { return null; } else { tempNode = firstNode; - firstNode = firstNode.nextNode(); - tempNode.nextNode(null); + firstNode = firstNode.next(); + tempNode.next(null); // Check if list was only one element. if (firstNode == null) { lastNode = null; } else { - firstNode.prevNode(null); + firstNode.prev(null); } } return tempNode; diff --git a/a2/tests/DataStructures/CharNodeTests.java b/a2/tests/DataStructures/CharNodeTests.java deleted file mode 100644 index becdd1e2aafd539e2e6d24d1e7231c61f4dd7893..0000000000000000000000000000000000000000 --- a/a2/tests/DataStructures/CharNodeTests.java +++ /dev/null @@ -1,62 +0,0 @@ -package DataStructures; - -import org.junit.Before; -import org.junit.Assert; -import org.junit.Test; - -import edu.wmich.cs3310.a2.DataStructures.CharNode; - - -/** - * Tests for CharNode class. - */ -public class CharNodeTests { - - //region Variables - - CharNode aNode; - - //endregion Variables - - - - //region Tests - - @Before - public void setUp() { - aNode = new CharNode(); - } - - - @Test - public void TestNodeData() { - aNode.myData('a'); - Assert.assertEquals('a', aNode.myData()); - aNode.myData('b'); - Assert.assertEquals('b', aNode.myData()); - } - - - @Test - public void TestNextNode() { - Assert.assertNull(aNode.nextNode()); - CharNode nextNode = new CharNode(); - nextNode.myData('c'); - aNode.nextNode(nextNode); - Assert.assertEquals(nextNode, aNode.nextNode()); - Assert.assertEquals('c', aNode.nextNode().myData()); - } - - - @Test - public void TestPrevNode() { - Assert.assertNull(aNode.prevNode()); - CharNode prevNode = new CharNode(); - prevNode.myData('d'); - aNode.prevNode(prevNode); - Assert.assertEquals(prevNode, aNode.prevNode()); - Assert.assertEquals('d', aNode.prevNode().myData()); - } - - //endregion Tests -} diff --git a/a2/tests/DataStructures/CharQueueTests.java b/a2/tests/DataStructures/CharQueueTests.java deleted file mode 100644 index c75aac17ad49c4425128c778d2f91c6f37c7dc76..0000000000000000000000000000000000000000 --- a/a2/tests/DataStructures/CharQueueTests.java +++ /dev/null @@ -1,147 +0,0 @@ -package DataStructures; - -import org.junit.Before; -import org.junit.Assert; -import org.junit.Test; - -import edu.wmich.cs3310.a2.DataStructures.CharQueue; -import edu.wmich.cs3310.a2.DataStructures.CharNode; - - -/** - * Tests for CharQueue class. - */ -public class CharQueueTests { - - //region Variables - - CharNode aNode; - CharQueue aQueue; - - //endregion Variables - - //region Tests - - @Before - public void setUp() { - aNode = new CharNode(); - aQueue = new CharQueue(); - } - - - @Test - public void Test_Enqueue() { - Assert.assertNull(aQueue.headNode()); - Assert.assertNull(aQueue.tailNode()); - - // Test enqueueing with one node. - aQueue.Enqueue('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('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('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_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'); - aQueue.Enqueue('b'); - aQueue.Enqueue('c'); - - // Test dequeueing with three nodes. - aNode = aQueue.Dequeue(); - Assert.assertNotNull(aNode); - Assert.assertEquals('a', aNode.myData()); - Assert.assertNull(aNode.prevNode()); - Assert.assertNull(aNode.nextNode()); - Assert.assertEquals('b', aQueue.headNode().myData()); - Assert.assertEquals('c', 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 dequeueing with two nodes. - aNode = aQueue.Dequeue(); - Assert.assertNotNull(aNode); - Assert.assertEquals('b', aNode.myData()); - Assert.assertNull(aNode.prevNode()); - Assert.assertNull(aNode.nextNode()); - Assert.assertEquals('c', aQueue.headNode().myData()); - Assert.assertNull(aQueue.headNode().prevNode()); - Assert.assertNull(aQueue.headNode().nextNode()); - Assert.assertEquals(aQueue.headNode(), aQueue.tailNode()); - - // Test dequeueing with one node. - aNode = aQueue.Dequeue(); - Assert.assertNotNull(aNode); - Assert.assertEquals('c', aNode.myData()); - Assert.assertNull(aNode.prevNode()); - Assert.assertNull(aNode.nextNode()); - Assert.assertNull(aQueue.headNode()); - Assert.assertNull(aQueue.tailNode()); - - // Test dequeueing with zero nodes. - aNode = aQueue.Dequeue(); - Assert.assertNull(aNode); - } - - - - //endregion Tests -} diff --git a/a2/tests/DataStructures/CharStackTests.java b/a2/tests/DataStructures/CharStackTests.java deleted file mode 100644 index bb5db1bfbfd28d4ff0350924fb5554f3246b0782..0000000000000000000000000000000000000000 --- a/a2/tests/DataStructures/CharStackTests.java +++ /dev/null @@ -1,101 +0,0 @@ -package DataStructures; - -import org.junit.Before; -import org.junit.Assert; -import org.junit.Test; - -import edu.wmich.cs3310.a2.DataStructures.CharStack; -import edu.wmich.cs3310.a2.DataStructures.CharNode; - - -/** - * Tests for CharStack class. - */ -public class CharStackTests { - - //region Variables - - CharNode aNode; - CharStack aStack; - - //endregion Variables - - //region Tests - - @Before - public void setUp() { - aNode = new CharNode(); - aStack = new CharStack(); - } - - - @Test - public void Test_Push() { - Assert.assertNull(aStack.headNode()); - - // Test pushing with 1 node. - aStack.Push('a'); - Assert.assertEquals('a', aStack.headNode().myData()); - Assert.assertNull(aStack.headNode().prevNode()); - Assert.assertNull(aStack.headNode().nextNode()); - - // Test pushing with 2 nodes. - aStack.Push('b'); - Assert.assertEquals('b', aStack.headNode().myData()); - Assert.assertEquals('a', aStack.headNode().nextNode().myData()); - Assert.assertNull(aStack.headNode().prevNode()); - Assert.assertNull(aStack.headNode().nextNode().nextNode()); - - - // Test pushing with 3 nodes. - aStack.Push('c'); - Assert.assertEquals('c', aStack.headNode().myData()); - Assert.assertEquals('b', aStack.headNode().nextNode().myData()); - Assert.assertEquals('a', aStack.headNode().nextNode().nextNode().myData()); - Assert.assertNull(aStack.headNode().prevNode()); - Assert.assertNull(aStack.headNode().nextNode().nextNode().nextNode()); - } - - - @Test - public void Test_Pop() { - aStack.Push('a'); - aStack.Push('b'); - aStack.Push('c'); - - // Test popping with 3 nodes. - aNode = aStack.Pop(); - Assert.assertNotNull(aNode); - Assert.assertEquals('c', aNode.myData()); - Assert.assertNull(aNode.prevNode()); - Assert.assertNull(aNode.nextNode()); - Assert.assertEquals('b', aStack.headNode().myData()); - Assert.assertEquals('a', aStack.headNode().nextNode().myData()); - Assert.assertNull(aStack.headNode().prevNode()); - Assert.assertNull(aStack.headNode().nextNode().nextNode()); - - // Test popping with 2 nodes. - aNode = aStack.Pop(); - Assert.assertNotNull(aNode); - Assert.assertEquals('b', aNode.myData()); - Assert.assertNull(aNode.prevNode()); - Assert.assertNull(aNode.nextNode()); - Assert.assertEquals('a', aStack.headNode().myData()); - Assert.assertNull(aStack.headNode().prevNode()); - Assert.assertNull(aStack.headNode().nextNode()); - - // Test popping with 1 node. - aNode = aStack.Pop(); - Assert.assertNotNull(aNode); - Assert.assertEquals('a', aNode.myData()); - Assert.assertNull(aNode.prevNode()); - Assert.assertNull(aNode.nextNode()); - Assert.assertNull(aStack.headNode()); - - // Test popping with 0 nodes. - aNode = aStack.Pop(); - Assert.assertNull(aNode); - } - - //endregion Tests -} diff --git a/a2/tests/DataStructures/CharListTests.java b/a2/tests/DataStructures/LinkedListTests.java similarity index 63% rename from a2/tests/DataStructures/CharListTests.java rename to a2/tests/DataStructures/LinkedListTests.java index b1f5ab72b5108f6b6b2309452ea59ec4e8b15566..b98df7989cdc5b309459dabbd100b722c5b696bf 100644 --- a/a2/tests/DataStructures/CharListTests.java +++ b/a2/tests/DataStructures/LinkedListTests.java @@ -1,22 +1,22 @@ package DataStructures; +import edu.wmich.cs3310.a2.DataStructures.LinkedList; import org.junit.Before; import org.junit.Assert; import org.junit.Test; -import edu.wmich.cs3310.a2.DataStructures.CharList; -import edu.wmich.cs3310.a2.DataStructures.CharNode; +import edu.wmich.cs3310.a2.DataStructures.LinkedNode; /** - * Tests for CharList class. + * Tests for LinkedList class. */ -public class CharListTests { +public class LinkedListTests { //region Variables - CharNode aNode; - CharList aList; + LinkedNode aNode; + LinkedList aList; //endregion Variables @@ -26,8 +26,8 @@ public class CharListTests { @Before public void setUp() { - aNode = new CharNode(); - aList = new CharList(); + aNode = new LinkedNode(); + aList = new LinkedList(); } @@ -38,23 +38,23 @@ public class CharListTests { // Test inserting with 1 node. Assert.assertTrue(aList.Insert('a', 0)); - Assert.assertEquals('a', aList.firstNode().myData()); + Assert.assertEquals('a', aList.firstNode().data()); Assert.assertEquals(aList.firstNode(), aList.lastNode()); // Test inserting with 2 nodes. Assert.assertTrue(aList.Insert('b', 0)); - Assert.assertEquals('b', aList.firstNode().myData()); - Assert.assertEquals('a', aList.lastNode().myData()); - Assert.assertEquals(aList.firstNode(), aList.lastNode().prevNode()); - Assert.assertEquals(aList.lastNode(), aList.firstNode().nextNode()); + Assert.assertEquals('b', aList.firstNode().data()); + Assert.assertEquals('a', aList.lastNode().data()); + Assert.assertEquals(aList.firstNode(), aList.lastNode().prev()); + Assert.assertEquals(aList.lastNode(), aList.firstNode().next()); // Test inserting with 3 nodes. Assert.assertTrue(aList.Insert('c', 0)); - Assert.assertEquals('c', aList.firstNode().myData()); - Assert.assertEquals('b', aList.firstNode().nextNode().myData()); - Assert.assertEquals(aList.firstNode(), aList.lastNode().prevNode().prevNode()); - Assert.assertEquals(aList.firstNode().nextNode(), aList.lastNode().prevNode()); - Assert.assertEquals(aList.firstNode().nextNode().nextNode(), aList.lastNode()); + Assert.assertEquals('c', aList.firstNode().data()); + Assert.assertEquals('b', aList.firstNode().next().data()); + Assert.assertEquals(aList.firstNode(), aList.lastNode().prev().prev()); + Assert.assertEquals(aList.firstNode().next(), aList.lastNode().prev()); + Assert.assertEquals(aList.firstNode().next().next(), aList.lastNode()); } @@ -65,23 +65,23 @@ public class CharListTests { // Test inserting with 1 node. Assert.assertTrue(aList.Insert('a', 0)); - Assert.assertEquals('a', aList.firstNode().myData()); + Assert.assertEquals('a', aList.firstNode().data()); Assert.assertEquals(aList.firstNode(), aList.lastNode()); // Test inserting with 2 nodes. Assert.assertTrue(aList.Insert('b', 1)); - Assert.assertEquals('a', aList.firstNode().myData()); - Assert.assertEquals('b', aList.lastNode().myData()); - Assert.assertEquals(aList.firstNode(), aList.lastNode().prevNode()); - Assert.assertEquals(aList.lastNode(), aList.firstNode().nextNode()); + Assert.assertEquals('a', aList.firstNode().data()); + Assert.assertEquals('b', aList.lastNode().data()); + Assert.assertEquals(aList.firstNode(), aList.lastNode().prev()); + Assert.assertEquals(aList.lastNode(), aList.firstNode().next()); // Test inserting with 3 nodes. Assert.assertTrue(aList.Insert('c', 2)); - Assert.assertEquals('c', aList.lastNode().myData()); - Assert.assertEquals('b', aList.lastNode().prevNode().myData()); - Assert.assertEquals(aList.firstNode(), aList.lastNode().prevNode().prevNode()); - Assert.assertEquals(aList.firstNode().nextNode(), aList.lastNode().prevNode()); - Assert.assertEquals(aList.firstNode().nextNode().nextNode(), aList.lastNode()); + Assert.assertEquals('c', aList.lastNode().data()); + Assert.assertEquals('b', aList.lastNode().prev().data()); + Assert.assertEquals(aList.firstNode(), aList.lastNode().prev().prev()); + Assert.assertEquals(aList.firstNode().next(), aList.lastNode().prev()); + Assert.assertEquals(aList.firstNode().next().next(), aList.lastNode()); } @@ -111,29 +111,29 @@ public class CharListTests { // Test deleting with 3 nodes. aNode = aList.Delete(0); Assert.assertNotNull(aNode); - Assert.assertEquals('a', aNode.myData()); - Assert.assertNull(aNode.nextNode()); - Assert.assertNull(aNode.prevNode()); - Assert.assertEquals('b', aList.firstNode().myData()); - Assert.assertEquals('c', aList.lastNode().myData()); - Assert.assertEquals(aList.firstNode(), aList.lastNode().prevNode()); - Assert.assertEquals(aList.lastNode(), aList.firstNode().nextNode()); + Assert.assertEquals('a', aNode.data()); + Assert.assertNull(aNode.next()); + Assert.assertNull(aNode.prev()); + Assert.assertEquals('b', aList.firstNode().data()); + Assert.assertEquals('c', aList.lastNode().data()); + Assert.assertEquals(aList.firstNode(), aList.lastNode().prev()); + Assert.assertEquals(aList.lastNode(), aList.firstNode().next()); // Test deleting with 2 nodes. aNode = aList.Delete(0); Assert.assertNotNull(aNode); - Assert.assertEquals('b', aNode.myData()); - Assert.assertNull(aNode.nextNode()); - Assert.assertNull(aNode.prevNode()); - Assert.assertEquals('c', aList.firstNode().myData()); + Assert.assertEquals('b', aNode.data()); + Assert.assertNull(aNode.next()); + Assert.assertNull(aNode.prev()); + Assert.assertEquals('c', aList.firstNode().data()); Assert.assertEquals(aList.firstNode(), aList.lastNode()); // Test deleting with 1 nodes. aNode = aList.Delete(0); Assert.assertNotNull(aNode); - Assert.assertEquals('c', aNode.myData()); - Assert.assertNull(aNode.nextNode()); - Assert.assertNull(aNode.prevNode()); + Assert.assertEquals('c', aNode.data()); + Assert.assertNull(aNode.next()); + Assert.assertNull(aNode.prev()); Assert.assertNull(aList.firstNode()); Assert.assertNull(aList.lastNode()); } @@ -148,29 +148,29 @@ public class CharListTests { // Test deleting with 3 nodes. aNode = aList.Delete(2); Assert.assertNotNull(aNode); - Assert.assertEquals('c', aNode.myData()); - Assert.assertNull(aNode.nextNode()); - Assert.assertNull(aNode.prevNode()); - Assert.assertEquals('a', aList.firstNode().myData()); - Assert.assertEquals('b', aList.lastNode().myData()); - Assert.assertEquals(aList.firstNode(), aList.lastNode().prevNode()); - Assert.assertEquals(aList.lastNode(), aList.firstNode().nextNode()); + Assert.assertEquals('c', aNode.data()); + Assert.assertNull(aNode.next()); + Assert.assertNull(aNode.prev()); + Assert.assertEquals('a', aList.firstNode().data()); + Assert.assertEquals('b', aList.lastNode().data()); + Assert.assertEquals(aList.firstNode(), aList.lastNode().prev()); + Assert.assertEquals(aList.lastNode(), aList.firstNode().next()); // Test deleting with 2 nodes. aNode = aList.Delete(1); Assert.assertNotNull(aNode); - Assert.assertEquals('b', aNode.myData()); - Assert.assertNull(aNode.nextNode()); - Assert.assertNull(aNode.prevNode()); - Assert.assertEquals('a', aList.firstNode().myData()); + Assert.assertEquals('b', aNode.data()); + Assert.assertNull(aNode.next()); + Assert.assertNull(aNode.prev()); + Assert.assertEquals('a', aList.firstNode().data()); Assert.assertEquals(aList.firstNode(), aList.lastNode()); // Test deleting with 1 nodes. aNode = aList.Delete(0); Assert.assertNotNull(aNode); - Assert.assertEquals('a', aNode.myData()); - Assert.assertNull(aNode.nextNode()); - Assert.assertNull(aNode.prevNode()); + Assert.assertEquals('a', aNode.data()); + Assert.assertNull(aNode.next()); + Assert.assertNull(aNode.prev()); Assert.assertNull(aList.firstNode()); Assert.assertNull(aList.lastNode()); } @@ -202,30 +202,30 @@ public class CharListTests { // Test deleting with 3 nodes. aNode = aList.Delete('c'); Assert.assertNotNull(aNode); - Assert.assertEquals('c', aNode.myData()); - Assert.assertNull(aNode.nextNode()); - Assert.assertNull(aNode.prevNode()); - Assert.assertEquals('a', aList.firstNode().myData()); - Assert.assertEquals('b', aList.lastNode().myData()); - Assert.assertEquals(aList.firstNode(), aList.lastNode().prevNode()); - Assert.assertEquals(aList.lastNode(), aList.firstNode().nextNode()); + Assert.assertEquals('c', aNode.data()); + Assert.assertNull(aNode.next()); + Assert.assertNull(aNode.prev()); + Assert.assertEquals('a', aList.firstNode().data()); + Assert.assertEquals('b', aList.lastNode().data()); + Assert.assertEquals(aList.firstNode(), aList.lastNode().prev()); + Assert.assertEquals(aList.lastNode(), aList.firstNode().next()); // Test deleting with 2 nodes. aNode = aList.Delete('b'); Assert.assertNotNull(aNode); - Assert.assertEquals('b', aNode.myData()); - Assert.assertNull(aNode.nextNode()); - Assert.assertNull(aNode.prevNode()); - Assert.assertEquals('a', aList.firstNode().myData()); + Assert.assertEquals('b', aNode.data()); + Assert.assertNull(aNode.next()); + Assert.assertNull(aNode.prev()); + Assert.assertEquals('a', aList.firstNode().data()); Assert.assertEquals(aList.firstNode(), aList.lastNode()); // Test deleting with 1 nodes. aNode = aList.Delete('a'); Assert.assertNotNull(aNode); - Assert.assertEquals('a', aNode.myData()); - Assert.assertNull(aNode.nextNode()); - Assert.assertNull(aNode.prevNode()); + Assert.assertEquals('a', aNode.data()); + Assert.assertNull(aNode.next()); + Assert.assertNull(aNode.prev()); Assert.assertNull(aList.firstNode()); Assert.assertNull(aList.lastNode()); } diff --git a/a2/tests/DataStructures/LinkedNodeTests.java b/a2/tests/DataStructures/LinkedNodeTests.java new file mode 100644 index 0000000000000000000000000000000000000000..1ab63cecb1115f01b9b3cb216eeeef3dfea16ff4 --- /dev/null +++ b/a2/tests/DataStructures/LinkedNodeTests.java @@ -0,0 +1,61 @@ +package DataStructures; + +import edu.wmich.cs3310.a2.DataStructures.LinkedNode; +import org.junit.Before; +import org.junit.Assert; +import org.junit.Test; + + +/** + * Tests for LinkedNode class. + */ +public class LinkedNodeTests { + + //region Variables + + LinkedNode aNode; + + //endregion Variables + + + + //region Tests + + @Before + public void setUp() { + aNode = new LinkedNode(); + } + + + @Test + public void TestNodeData() { + aNode.data('a'); + Assert.assertEquals('a', aNode.data()); + aNode.data('b'); + Assert.assertEquals('b', aNode.data()); + } + + + @Test + public void TestNextNode() { + Assert.assertNull(aNode.next()); + LinkedNode nextNode = new LinkedNode(); + nextNode.data('c'); + aNode.next(nextNode); + Assert.assertEquals(nextNode, aNode.next()); + Assert.assertEquals('c', aNode.next().data()); + } + + + @Test + public void TestPrevNode() { + Assert.assertNull(aNode.prev()); + LinkedNode prevNode = new LinkedNode(); + prevNode.data('d'); + aNode.prev(prevNode); + Assert.assertEquals(prevNode, aNode.prev()); + Assert.assertEquals('d', aNode.prev().data()); + } + + //endregion Tests +} diff --git a/a2/tests/DataStructures/LinkedQueueTests.java b/a2/tests/DataStructures/LinkedQueueTests.java new file mode 100644 index 0000000000000000000000000000000000000000..1ba21781d37fec4fe93f1aa7bb450638cf7540a5 --- /dev/null +++ b/a2/tests/DataStructures/LinkedQueueTests.java @@ -0,0 +1,113 @@ +package DataStructures; + +import edu.wmich.cs3310.a2.DataStructures.LinkedQueue; +import org.junit.Before; +import org.junit.Assert; +import org.junit.Test; + +import edu.wmich.cs3310.a2.DataStructures.LinkedNode; + + +/** + * Tests for LinkedQueue class. + */ +public class LinkedQueueTests { + + //region Variables + + LinkedNode aNode; + LinkedQueue aQueue; + + //endregion Variables + + //region Tests + + @Before + public void setUp() { + aNode = new LinkedNode(); + aQueue = new LinkedQueue(); + } + + + @Test + public void Test_Enqueue() { + Assert.assertNull(aQueue.headNode()); + Assert.assertNull(aQueue.tailNode()); + + // Test enqueueing with one node. + aQueue.Enqueue('a'); + Assert.assertEquals('a', aQueue.headNode().data()); + Assert.assertNull(aQueue.headNode().prev()); + Assert.assertNull(aQueue.tailNode().next()); + Assert.assertEquals(aQueue.headNode(), aQueue.tailNode()); + + // Test enqueueing with two nodes. + aQueue.Enqueue('b'); + Assert.assertEquals('a', aQueue.headNode().data()); + Assert.assertEquals('b', aQueue.tailNode().data()); + Assert.assertNull(aQueue.headNode().prev()); + Assert.assertNull(aQueue.tailNode().next()); + Assert.assertEquals(aQueue.headNode(), aQueue.tailNode().prev()); + Assert.assertEquals(aQueue.tailNode(), aQueue.headNode().next()); + + // Test enqueueing with three nodes. + aQueue.Enqueue('c'); + Assert.assertEquals('a', aQueue.headNode().data()); + Assert.assertEquals('b', aQueue.headNode().next().data()); + Assert.assertEquals('c', aQueue.tailNode().data()); + Assert.assertNull(aQueue.headNode().prev()); + Assert.assertNull(aQueue.tailNode().next()); + Assert.assertEquals(aQueue.headNode(), aQueue.tailNode().prev().prev()); + Assert.assertEquals(aQueue.headNode().next(), aQueue.tailNode().prev()); + Assert.assertEquals(aQueue.headNode().next().next(), aQueue.tailNode()); + } + + + @Test + public void Test_Dequeue() { + aQueue.Enqueue('a'); + aQueue.Enqueue('b'); + aQueue.Enqueue('c'); + + // Test dequeueing with three nodes. + aNode = aQueue.Dequeue(); + Assert.assertNotNull(aNode); + Assert.assertEquals('a', aNode.data()); + Assert.assertNull(aNode.prev()); + Assert.assertNull(aNode.next()); + Assert.assertEquals('b', aQueue.headNode().data()); + Assert.assertEquals('c', aQueue.tailNode().data()); + Assert.assertNull(aQueue.headNode().prev()); + Assert.assertNull(aQueue.tailNode().next()); + Assert.assertEquals(aQueue.headNode(), aQueue.tailNode().prev()); + Assert.assertEquals(aQueue.tailNode(), aQueue.headNode().next()); + + // Test dequeueing with two nodes. + aNode = aQueue.Dequeue(); + Assert.assertNotNull(aNode); + Assert.assertEquals('b', aNode.data()); + Assert.assertNull(aNode.prev()); + Assert.assertNull(aNode.next()); + Assert.assertEquals('c', aQueue.headNode().data()); + Assert.assertNull(aQueue.headNode().prev()); + Assert.assertNull(aQueue.headNode().next()); + Assert.assertEquals(aQueue.headNode(), aQueue.tailNode()); + + // Test dequeueing with one node. + aNode = aQueue.Dequeue(); + Assert.assertNotNull(aNode); + Assert.assertEquals('c', aNode.data()); + Assert.assertNull(aNode.prev()); + Assert.assertNull(aNode.next()); + Assert.assertNull(aQueue.headNode()); + Assert.assertNull(aQueue.tailNode()); + + // Test dequeueing with zero nodes. + aNode = aQueue.Dequeue(); + Assert.assertNull(aNode); + } + + + + //endregion Tests +} diff --git a/a2/tests/DataStructures/LinkedStackTests.java b/a2/tests/DataStructures/LinkedStackTests.java new file mode 100644 index 0000000000000000000000000000000000000000..00b6f9dec026ea711042180ff8df2602a6201842 --- /dev/null +++ b/a2/tests/DataStructures/LinkedStackTests.java @@ -0,0 +1,100 @@ +package DataStructures; + +import edu.wmich.cs3310.a2.DataStructures.LinkedNode; +import edu.wmich.cs3310.a2.DataStructures.LinkedStack; +import org.junit.Before; +import org.junit.Assert; +import org.junit.Test; + + +/** + * Tests for LinkedStack class. + */ +public class LinkedStackTests { + + //region Variables + + LinkedNode aNode; + LinkedStack aStack; + + //endregion Variables + + //region Tests + + @Before + public void setUp() { + aNode = new LinkedNode(); + aStack = new LinkedStack(); + } + + + @Test + public void Test_Push() { + Assert.assertNull(aStack.headNode()); + + // Test pushing with 1 node. + aStack.Push('a'); + Assert.assertEquals('a', aStack.headNode().data()); + Assert.assertNull(aStack.headNode().prev()); + Assert.assertNull(aStack.headNode().next()); + + // Test pushing with 2 nodes. + aStack.Push('b'); + Assert.assertEquals('b', aStack.headNode().data()); + Assert.assertEquals('a', aStack.headNode().next().data()); + Assert.assertNull(aStack.headNode().prev()); + Assert.assertNull(aStack.headNode().next().next()); + + + // Test pushing with 3 nodes. + aStack.Push('c'); + Assert.assertEquals('c', aStack.headNode().data()); + Assert.assertEquals('b', aStack.headNode().next().data()); + Assert.assertEquals('a', aStack.headNode().next().next().data()); + Assert.assertNull(aStack.headNode().prev()); + Assert.assertNull(aStack.headNode().next().next().next()); + } + + + @Test + public void Test_Pop() { + aStack.Push('a'); + aStack.Push('b'); + aStack.Push('c'); + + // Test popping with 3 nodes. + aNode = aStack.Pop(); + Assert.assertNotNull(aNode); + Assert.assertEquals('c', aNode.data()); + Assert.assertNull(aNode.prev()); + Assert.assertNull(aNode.next()); + Assert.assertEquals('b', aStack.headNode().data()); + Assert.assertEquals('a', aStack.headNode().next().data()); + Assert.assertNull(aStack.headNode().prev()); + Assert.assertNull(aStack.headNode().next().next()); + + // Test popping with 2 nodes. + aNode = aStack.Pop(); + Assert.assertNotNull(aNode); + Assert.assertEquals('b', aNode.data()); + Assert.assertNull(aNode.prev()); + Assert.assertNull(aNode.next()); + Assert.assertEquals('a', aStack.headNode().data()); + Assert.assertNull(aStack.headNode().prev()); + Assert.assertNull(aStack.headNode().next()); + + // Test popping with 1 node. + aNode = aStack.Pop(); + Assert.assertNotNull(aNode); + Assert.assertEquals('a', aNode.data()); + Assert.assertNull(aNode.prev()); + Assert.assertNull(aNode.next()); + Assert.assertNull(aStack.headNode()); + + // Test popping with 0 nodes. + aNode = aStack.Pop(); + Assert.assertNull(aNode); + } + + //endregion Tests +}