diff options
| author | rPatrickWarner <[email protected]> | 2024-05-29 12:39:18 -0700 |
|---|---|---|
| committer | rPatrickWarner <[email protected]> | 2024-05-29 12:39:18 -0700 |
| commit | c989a2da37f35a14bbf6a8efd8f96cba08bcf9bd (patch) | |
| tree | ddd46719f9babb3ccd72b0ff30b3402895f419c5 | |
| parent | Template node (diff) | |
| download | homework-1-reecepwarner-c989a2da37f35a14bbf6a8efd8f96cba08bcf9bd.tar.xz homework-1-reecepwarner-c989a2da37f35a14bbf6a8efd8f96cba08bcf9bd.zip | |
essentially completed
| -rw-r--r-- | CST 126/Homework3/Node.hpp | 2 | ||||
| -rw-r--r-- | CST 126/Homework3/SinglyLinkedList.hpp | 43 | ||||
| -rw-r--r-- | CST 126/Homework3/main.cpp | 3 | ||||
| -rw-r--r-- | CST 126/UnitTester/UnitTester.cpp | 257 |
4 files changed, 203 insertions, 102 deletions
diff --git a/CST 126/Homework3/Node.hpp b/CST 126/Homework3/Node.hpp index ddc5b13..1bfbff2 100644 --- a/CST 126/Homework3/Node.hpp +++ b/CST 126/Homework3/Node.hpp @@ -42,7 +42,7 @@ namespace CST_126 template<typename T> inline void Node<T>::Data(const T& Data) { - _data = data; + _data = Data; } } diff --git a/CST 126/Homework3/SinglyLinkedList.hpp b/CST 126/Homework3/SinglyLinkedList.hpp index 0f79890..92f4a1f 100644 --- a/CST 126/Homework3/SinglyLinkedList.hpp +++ b/CST 126/Homework3/SinglyLinkedList.hpp @@ -17,8 +17,6 @@ struct SinglyLinkedList ListNode<T>* _head{ nullptr }; }; -//prototype all your functions! - template<typename T> @@ -39,7 +37,6 @@ inline bool Append(SinglyLinkedList<T>* list, ListNode<T>* node) TraverseNode->_next = node; list->_size++; return true; - } template<typename T> @@ -53,8 +50,8 @@ inline bool Prepend(SinglyLinkedList<T>* list, ListNode<T>* node) } node->_next = list->_head; list->_head = node; + list->_size++; return true; - } template<typename T> @@ -64,7 +61,6 @@ inline bool RemoveFirst(SinglyLinkedList<T>* list) { std::cout << "Empty list... there is nothing to delete!" << std::endl; return true; - } if (list->_size == 1) { @@ -72,11 +68,9 @@ inline bool RemoveFirst(SinglyLinkedList<T>* list) } else { - ListNode<T>* Temp = list->_head; list->_head = list->_head->_next; Temp->_next = nullptr; - list->_size--; } @@ -91,7 +85,7 @@ inline bool RemoveLast(SinglyLinkedList<T>* list) std::cout << "Empty list... there is nothing to delete!" << std::endl; return true; } - if (list->size == 1) + if (list->_size == 1) { list->_head = nullptr; list->_size--; @@ -116,11 +110,11 @@ inline bool InsertAfter(SinglyLinkedList<T>* List, const int Data, ListNode<T>* return true; } ListNode<T>* Traverse = List->_head; - for (auto i = 1u; i < Data && Traverse != nullptr; i++) + for (auto i = 1; i < Data && Traverse != nullptr; i++) { Traverse = Traverse->_next; } - node._next = Traverse->_next; + node->_next = Traverse->_next; Traverse->_next = node; List->_size++; @@ -131,7 +125,22 @@ inline bool InsertAfter(SinglyLinkedList<T>* List, const int Data, ListNode<T>* template <typename T> inline bool InsertBefore(SinglyLinkedList<T>* List, const int Data, ListNode<T>* node) { - return false; + if (List->_head == nullptr) + { + Append(List, node); + return true; + } + ListNode<T>* Traverse = List->_head; + ListNode<T>* Follower = nullptr; + for (auto i = 1; i < Data && Traverse != nullptr; i++) + { + Follower = Traverse; + Traverse = Traverse->_next; + } + node->_next = Follower->_next; + Follower->_next = node; + List->_size++; + return true; } template <typename T> @@ -150,7 +159,6 @@ inline bool Clear(SinglyLinkedList<T>* List) ListNode<T>* Traverse = List->_head; ListNode<T>* TempNode = Traverse; - do { TempNode = Traverse; @@ -187,13 +195,11 @@ inline bool Remove(SinglyLinkedList<T>* List, ListNode<T>* node) } if (Traverse->_next == nullptr) { - //return RemoveLast(List); - return true; + return RemoveLast(List); } Previous->_next = Traverse->_next; - //"delete" Traverse Traverse->_next = nullptr; Traverse->_data = 0; List->_size--; @@ -209,24 +215,19 @@ inline ListNode<T>* Extract(SinglyLinkedList<T>* List, const int Data) ListNode<T>* Temp = new ListNode<T>{ 0, nullptr }; ListNode<T>* Travel = nullptr; - //check if empty + if (Empty(List)) { std::cout << "Empty list, nothing to extract!" << std::endl; return Temp; } - for (Travel = List->_head; Travel->_data != Data && Travel->_next != nullptr;) { Travel = Travel->_next; } Temp->_data = Travel->_data; - //read through list - //find data - //return pointer to the node - //remove node from list if (Remove<T>(List, Travel)) { return Temp; diff --git a/CST 126/Homework3/main.cpp b/CST 126/Homework3/main.cpp index 9939411..fb631b8 100644 --- a/CST 126/Homework3/main.cpp +++ b/CST 126/Homework3/main.cpp @@ -8,8 +8,5 @@ int main(const int argc, char* argv[]) { - - - return 0; }
\ No newline at end of file diff --git a/CST 126/UnitTester/UnitTester.cpp b/CST 126/UnitTester/UnitTester.cpp index aa04fe1..83b51d9 100644 --- a/CST 126/UnitTester/UnitTester.cpp +++ b/CST 126/UnitTester/UnitTester.cpp @@ -54,7 +54,6 @@ namespace LinkedListUnitTests TraverseNode = TraverseNode->_next; } - } TEST_METHOD(One_Append_Clear_LinkedList_Success) @@ -62,7 +61,6 @@ namespace LinkedListUnitTests struct SinglyLinkedList<int> LinkedList = {}; ListNode<int>Node1 = { 1,nullptr }; - bool success = Append(&LinkedList, &Node1); Clear(&LinkedList); @@ -70,7 +68,6 @@ namespace LinkedListUnitTests Assert::AreEqual(0ull, LinkedList._size); Assert::IsNull(LinkedList._head); - } @@ -116,7 +113,7 @@ namespace LinkedListUnitTests Success = Append(&NewList, &Node3); Success = Append(&NewList, &Node5); - + InsertAfter(&NewList, 3, &Node4); ListNode<int>* TraverseNode = NewList._head; @@ -125,106 +122,211 @@ namespace LinkedListUnitTests Assert::AreEqual(i, TraverseNode->_data); TraverseNode = TraverseNode->_next; } - - //Assert - //Assert that list is corret } - //TEST_METHOD(DeleteFirstLinkWith0) - //{ - // SinglyLinkedList<int> LinkedList{}; - // ListNode<int>* node = new ListNode<int>{}; - // bool Success = RemoveFirst(&LinkedList); - // Assert::AreEqual(1, static_cast<int>(Success)); - // delete node; - //} - // - //TEST_METHOD(PREPENDLINKEDLIST) - //{ + TEST_METHOD(Insert_Before_UNO_List) + { + struct SinglyLinkedList<int> NewList{}; + ListNode<int> Node1 = { 1, nullptr }; + ListNode<int> Node2 = { 2, nullptr }; + bool Success = InsertBefore(&NewList, 1, &Node2); - //} + Assert::AreEqual(2, NewList._head->_data); + } - //TEST_METHOD(ExtractFirst_LinkedList_Success) - //{ - // struct SinglyLinkedList<int> NewList {}; - // ListNode<int> Node1 = { 1,nullptr }; - // ListNode<int>Node2 = { 2,nullptr }; - // ListNode<int>Node3 = { 3,nullptr }; - // ListNode<int>Node4 = { 4,nullptr }; - // ListNode<int>Node5 = { 5,nullptr }; + TEST_METHOD(Insert_Before_5_List) + { + struct SinglyLinkedList<int> NewList {}; + ListNode<int> Node1 = { 1,nullptr }; + ListNode<int>Node2 = { 2,nullptr }; + ListNode<int>Node3 = { 3,nullptr }; + ListNode<int>Node4 = { 4,nullptr }; + ListNode<int>Node5 = { 5,nullptr }; + + bool Success = Append(&NewList, &Node1); + Success = Append(&NewList, &Node2); + Success = Append(&NewList, &Node3); + Success = Append(&NewList, &Node5); + InsertBefore(&NewList, 5, &Node4); - // ListNode<int> NodeArray[] = { Node1, Node2, Node3, Node4, Node5 }; + ListNode<int>* Traverse = NewList._head; + for (auto i = 1; i < 5; i++) + { + Traverse = Traverse->_next; + } - // for (auto node : NodeArray) - // { - // Assert::IsTrue(Append(&NewList, &node)); - // } + Assert::AreEqual(4, Traverse->_data); + } + + TEST_METHOD(DeleteFirstLinkWith0) + { + SinglyLinkedList<int> LinkedList{}; + ListNode<int>* node = new ListNode<int>{}; + bool Success = RemoveFirst(&LinkedList); + Assert::AreEqual(1, static_cast<int>(Success)); + delete node; + } + + TEST_METHOD(Prepend_LinkedList_With_1) + { + struct SinglyLinkedList<int> NewList {}; + ListNode<int> Node1 = { 1,nullptr }; - // ListNode<int>* Temp = Extract(&NewList, Node1._data); - // - ///* size_t NodeAddress = reinterpret_cast<size_t>(&Node1); - // size_t TempAddress = reinterpret_cast<size_t>(&Temp);*/ - // //Assert::AreSame(&Node1, Temp); + Prepend(&NewList, &Node1); - // - // - // //Assert::AreEqual(&Node1, Extract(&NewList, Node1._data)); - // - // //Assert::AreEqual(NodeAddress, TempAddress); - // //Assert::AreEqual(4ull, NewList._size); + Assert::AreEqual(1, NewList._head->_data); + Assert::AreEqual(1ull, NewList._size); + } + TEST_METHOD(Prepend_LinkedList_With_5) + { + struct SinglyLinkedList<int> NewList {}; + ListNode<int> Node1 = { 1,nullptr }; + ListNode<int>Node2 = { 2,nullptr }; + ListNode<int>Node3 = { 3,nullptr }; + ListNode<int>Node4 = { 4,nullptr }; + ListNode<int>Node5 = { 5,nullptr }; + bool Success = Append(&NewList, &Node2); + Success = Append(&NewList, &Node3); + Success = Append(&NewList, &Node4); + Success = Append(&NewList, &Node5); + Prepend(&NewList, &Node1); - // delete Temp; - //} + Assert::AreEqual(1, NewList._head->_data); + Assert::AreEqual(5ull, NewList._size); + } + TEST_METHOD(ExtractFirst_LinkedList_Success) + { + struct SinglyLinkedList<int> NewList {}; + ListNode<int> Node1 = { 1,nullptr }; + ListNode<int>Node2 = { 2,nullptr }; + ListNode<int>Node3 = { 3,nullptr }; + ListNode<int>Node4 = { 4,nullptr }; + ListNode<int>Node5 = { 5,nullptr }; - //TEST_METHOD(Extract_Last_LinkedList_Success) - //{ - // struct SinglyLinkedList<int> NewList {}; - // ListNode<int> Node1 = { 1,nullptr }; - // ListNode<int>Node2 = { 2,nullptr }; - // ListNode<int>Node3 = { 3,nullptr }; - // ListNode<int>Node4 = { 4,nullptr }; - // ListNode<int>Node5 = { 5,nullptr }; + + bool Success = Append(&NewList, &Node1); + Success = Append(&NewList, &Node2); + Success = Append(&NewList, &Node3); + Success = Append(&NewList, &Node4); + Success = Append(&NewList, &Node5); - // ListNode<int> NodeArray[] = { Node1, Node2, Node3, Node4, Node5 }; - // for (auto node : NodeArray) - // { - // Assert::IsTrue(Append(&NewList, &node)); - // } + ListNode<int>* Temp = Extract(&NewList, Node1._data); + ListNode<int>* NullCheck = &Node1; + + Assert::AreEqual(1, Temp->_data); + Assert::IsNull(NullCheck->_next); - //} + delete Temp; + + } - //TEST_METHOD(Extract_Middle_LinkedList_Success) - //{ - // struct SinglyLinkedList<int> NewList {}; - // ListNode<int> Node1 = { 1,nullptr }; - // ListNode<int>Node2 = { 2,nullptr }; - // ListNode<int>Node3 = { 3,nullptr }; - // ListNode<int>Node4 = { 4,nullptr }; - // ListNode<int>Node5 = { 5,nullptr }; + TEST_METHOD(Extract_Last_LinkedList_Success) + { + struct SinglyLinkedList<int> NewList {}; + ListNode<int> Node1 = { 1,nullptr }; + ListNode<int>Node2 = { 2,nullptr }; + ListNode<int>Node3 = { 3,nullptr }; + ListNode<int>Node4 = { 4,nullptr }; + ListNode<int>Node5 = { 5,nullptr }; - // ListNode<int> NodeArray[] = { Node1, Node2, Node3, Node4, Node5 }; + bool Success = Append(&NewList, &Node1); + Success = Append(&NewList, &Node2); + Success = Append(&NewList, &Node3); + Success = Append(&NewList, &Node4); + Success = Append(&NewList, &Node5); - // for (auto node : NodeArray) - // { - // Assert::IsTrue(Append(&NewList, &node)); - // } + ListNode<int>* Temp = Extract(&NewList, Node5._data); + ListNode<int>* NullCheck = &Node4; + Assert::AreEqual(5, Temp->_data); + Assert::IsNull(NullCheck->_next); + + delete Temp; + } + TEST_METHOD(Extract_Middle_LinkedList_Success) + { + struct SinglyLinkedList<int> NewList {}; + ListNode<int> Node1 = { 1,nullptr }; + ListNode<int>Node2 = { 2,nullptr }; + ListNode<int>Node3 = { 3,nullptr }; + ListNode<int>Node4 = { 4,nullptr }; + ListNode<int>Node5 = { 5,nullptr }; + - //} + bool Success = Append(&NewList, &Node1); + Success = Append(&NewList, &Node2); + Success = Append(&NewList, &Node3); + Success = Append(&NewList, &Node4); + Success = Append(&NewList, &Node5); + + ListNode<int>* Temp = Extract(&NewList, Node3._data); + ListNode<int>* NullCheck = &Node3; + + Assert::AreEqual(3, Temp->_data); + Assert::IsNull(Node3._next); + delete Temp; + + } + + + TEST_METHOD(Clear_LinkedList_Full) + { + struct SinglyLinkedList<int> NewList {}; + ListNode<int> Node1 = { 1,nullptr }; + ListNode<int>Node2 = { 2,nullptr }; + ListNode<int>Node3 = { 3,nullptr }; + ListNode<int>Node4 = { 4,nullptr }; + ListNode<int>Node5 = { 5,nullptr }; + + + + bool Success = Append(&NewList, &Node1); + Success = Append(&NewList, &Node2); + Success = Append(&NewList, &Node3); + Success = Append(&NewList, &Node4); + Success = Append(&NewList, &Node5); + Clear(&NewList); + + Assert::AreEqual(0ull, NewList._size); + + } + + TEST_METHOD(Clear_LinkedList_Empty) + { + struct SinglyLinkedList<int> NewList {}; - + Clear(&NewList); + Assert::AreEqual(0ull, NewList._size); + + } + + TEST_METHOD(Clear_LinkedList_1) + { + struct SinglyLinkedList<int> NewList {}; + ListNode<int> Node1 = { 1,nullptr }; + bool Success = Append(&NewList, &Node1); + + Clear(&NewList); + Assert::AreEqual(0ull, NewList._size); + + } }; + + + + + TEST_CLASS(NodeUnitTests) { public: @@ -250,12 +352,13 @@ namespace LinkedListUnitTests Node<int>* NewNode = new Node<int>(5); Assert::IsNotNull(NewNode); + Assert::AreEqual(5, NewNode->Data()); + + delete NewNode; } - } - - + }; }; |