aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrPatrickWarner <[email protected]>2024-05-29 12:39:18 -0700
committerrPatrickWarner <[email protected]>2024-05-29 12:39:18 -0700
commitc989a2da37f35a14bbf6a8efd8f96cba08bcf9bd (patch)
treeddd46719f9babb3ccd72b0ff30b3402895f419c5
parentTemplate node (diff)
downloadhomework-1-reecepwarner-c989a2da37f35a14bbf6a8efd8f96cba08bcf9bd.tar.xz
homework-1-reecepwarner-c989a2da37f35a14bbf6a8efd8f96cba08bcf9bd.zip
essentially completed
-rw-r--r--CST 126/Homework3/Node.hpp2
-rw-r--r--CST 126/Homework3/SinglyLinkedList.hpp43
-rw-r--r--CST 126/Homework3/main.cpp3
-rw-r--r--CST 126/UnitTester/UnitTester.cpp257
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;
}
- }
-
-
+ };
};