aboutsummaryrefslogtreecommitdiff
path: root/CST 126/Homework3
diff options
context:
space:
mode:
authorreecepwarner <[email protected]>2024-05-29 12:44:24 -0700
committerGitHub <[email protected]>2024-05-29 12:44:24 -0700
commita94e681196881e3f8fb18ecfd760ed3f59fa8ca1 (patch)
tree46158946d1c7aa12c44acc6043bcc595523a0c88 /CST 126/Homework3
parenthomework2 completed (diff)
downloadhomework-1-reecepwarner-a94e681196881e3f8fb18ecfd760ed3f59fa8ca1.tar.xz
homework-1-reecepwarner-a94e681196881e3f8fb18ecfd760ed3f59fa8ca1.zip
Template node branch to Develop Branch (#3)
* init * changes * changes * created insert and deletion functions * unit testing homework3 * more unit tests * unit tests added * unit test and memory check added * Template node * essentially completed --------- Co-authored-by: rPatrickWarner <[email protected]>
Diffstat (limited to 'CST 126/Homework3')
-rw-r--r--CST 126/Homework3/Homework3.vcxproj7
-rw-r--r--CST 126/Homework3/Homework3.vcxproj.filters8
-rw-r--r--CST 126/Homework3/Node.hpp53
-rw-r--r--CST 126/Homework3/SinglyLinkedList.hpp240
-rw-r--r--CST 126/Homework3/main.cpp9
5 files changed, 309 insertions, 8 deletions
diff --git a/CST 126/Homework3/Homework3.vcxproj b/CST 126/Homework3/Homework3.vcxproj
index 34e042a..0625066 100644
--- a/CST 126/Homework3/Homework3.vcxproj
+++ b/CST 126/Homework3/Homework3.vcxproj
@@ -70,6 +70,9 @@
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <IncludePath>C:\Users\rpwar\source\repos\CST126\homework-1-reecepwarner\CST 126\UnitTest1;$(IncludePath)</IncludePath>
+ </PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
@@ -129,6 +132,10 @@
<ItemGroup>
<ClCompile Include="main.cpp" />
</ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="Node.hpp" />
+ <ClInclude Include="SinglyLinkedList.hpp" />
+ </ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
diff --git a/CST 126/Homework3/Homework3.vcxproj.filters b/CST 126/Homework3/Homework3.vcxproj.filters
index ce0c35c..6f86576 100644
--- a/CST 126/Homework3/Homework3.vcxproj.filters
+++ b/CST 126/Homework3/Homework3.vcxproj.filters
@@ -19,4 +19,12 @@
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="SinglyLinkedList.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="Node.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
</Project> \ No newline at end of file
diff --git a/CST 126/Homework3/Node.hpp b/CST 126/Homework3/Node.hpp
new file mode 100644
index 0000000..1bfbff2
--- /dev/null
+++ b/CST 126/Homework3/Node.hpp
@@ -0,0 +1,53 @@
+#ifndef NODE_HPP
+#define NODE_HPP
+
+namespace CST_126
+{
+ template<typename T>
+ class Node
+ {
+ public:
+ Node() = default;
+ Node(const T& Data);
+
+ ~Node() = default;
+
+
+ T& Data();
+ T Data() const;
+ void Data(const T& Data);
+
+
+ private:
+
+ T _data{ 0 };
+
+ };
+
+ template<typename T>
+ Node<T>::Node(const T& Data) : _data(Data) {};
+
+ template<typename T>
+ inline T& Node<T>::Data()
+ {
+ return _data;
+ }
+
+ template<typename T>
+ inline T Node<T>::Data() const
+ {
+ return _data;
+ }
+
+ template<typename T>
+ inline void Node<T>::Data(const T& Data)
+ {
+ _data = Data;
+ }
+
+}
+
+
+
+
+#endif \ No newline at end of file
diff --git a/CST 126/Homework3/SinglyLinkedList.hpp b/CST 126/Homework3/SinglyLinkedList.hpp
new file mode 100644
index 0000000..92f4a1f
--- /dev/null
+++ b/CST 126/Homework3/SinglyLinkedList.hpp
@@ -0,0 +1,240 @@
+#ifndef SINGLY_LINKED_LIST_HPP
+#define SINGLY_LINKED_LIST_HPP
+#include <iostream>
+#include "Node.hpp"
+template<typename T>
+ struct ListNode
+ {
+ T _data{0};
+ ListNode* _next {nullptr};
+ };
+
+template<typename T>
+struct SinglyLinkedList
+{
+ size_t _size {0};
+
+ ListNode<T>* _head{ nullptr };
+
+};
+
+
+template<typename T>
+inline bool Append(SinglyLinkedList<T>* list, ListNode<T>* node)
+{
+ if (list->_size == 0)
+ {
+ list->_head = node;
+ list->_size++;
+ return true;
+ }
+ ListNode<T>* TraverseNode = nullptr;
+ for (TraverseNode = list->_head; TraverseNode->_next != nullptr;)
+ {
+ TraverseNode = TraverseNode->_next;
+ }
+
+ TraverseNode->_next = node;
+ list->_size++;
+ return true;
+}
+
+template<typename T>
+inline bool Prepend(SinglyLinkedList<T>* list, ListNode<T>* node)
+{
+ if (list->_size == 0)
+ {
+ list->_head = node;
+ list->_size++;
+ return true;
+ }
+ node->_next = list->_head;
+ list->_head = node;
+ list->_size++;
+ return true;
+}
+
+template<typename T>
+inline bool RemoveFirst(SinglyLinkedList<T>* list)
+{
+ if (list->_size == 0)
+ {
+ std::cout << "Empty list... there is nothing to delete!" << std::endl;
+ return true;
+ }
+ if (list->_size == 1)
+ {
+ list->_head =nullptr;
+ }
+ else
+ {
+ ListNode<T>* Temp = list->_head;
+ list->_head = list->_head->_next;
+ Temp->_next = nullptr;
+ list->_size--;
+ }
+
+ return true;
+}
+
+template<typename T>
+inline bool RemoveLast(SinglyLinkedList<T>* list)
+{
+ if (list->_size == 0)
+ {
+ std::cout << "Empty list... there is nothing to delete!" << std::endl;
+ return true;
+ }
+ if (list->_size == 1)
+ {
+ list->_head = nullptr;
+ list->_size--;
+ return true;
+ }
+ ListNode<T>* TraverseNode = list->_head;
+ while (TraverseNode->_next->_next != nullptr)
+ {
+ TraverseNode = TraverseNode->_next;
+ }
+ TraverseNode->_next = nullptr;
+ list->_size--;
+ return true;
+}
+
+template <typename T>
+inline bool InsertAfter(SinglyLinkedList<T>* List, const int Data, ListNode<T>* node)
+{
+ if (List->_head == nullptr)
+ {
+ Append(List, node);
+ return true;
+ }
+ ListNode<T>* Traverse = List->_head;
+ for (auto i = 1; i < Data && Traverse != nullptr; i++)
+ {
+ Traverse = Traverse->_next;
+ }
+ node->_next = Traverse->_next;
+
+ Traverse->_next = node;
+ List->_size++;
+
+ return true;
+}
+
+template <typename T>
+inline bool InsertBefore(SinglyLinkedList<T>* List, const int Data, ListNode<T>* node)
+{
+ 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>
+inline bool Clear(SinglyLinkedList<T>* List)
+{
+ if (List->_size == 0)
+ {
+ return true;
+ }
+ if (List->_size == 1)
+ {
+ List->_head = nullptr;
+ List->_size--;
+ return true;
+ }
+ ListNode<T>* Traverse = List->_head;
+ ListNode<T>* TempNode = Traverse;
+
+ do
+ {
+ TempNode = Traverse;
+ Traverse = Traverse->_next;
+ TempNode->_data = 0;
+ TempNode->_next = nullptr;
+ } while (Traverse->_next != nullptr);
+
+ List->_size = 0;
+ List->_head = nullptr;
+ return true;
+}
+
+template <typename T>
+inline bool Empty(SinglyLinkedList<T>* List)
+{
+ return (List->_size == 0 && List->_head == nullptr);
+}
+
+template <typename T>
+inline bool Remove(SinglyLinkedList<T>* List, ListNode<T>* node)
+{
+
+ ListNode<T>* Traverse = List->_head;
+ ListNode<T>* Previous = nullptr;
+ while (Traverse != node)
+ {
+ Previous = Traverse;
+ Traverse = Traverse->_next;
+ }
+ if (Traverse == List->_head)
+ {
+ return RemoveFirst(List);
+ }
+ if (Traverse->_next == nullptr)
+ {
+ return RemoveLast(List);
+ }
+
+ Previous->_next = Traverse->_next;
+
+ Traverse->_next = nullptr;
+ Traverse->_data = 0;
+ List->_size--;
+
+ return true;
+}
+
+
+
+template <typename T>
+inline ListNode<T>* Extract(SinglyLinkedList<T>* List, const int Data)
+{
+ ListNode<T>* Temp = new ListNode<T>{ 0, nullptr };
+
+ ListNode<T>* Travel = nullptr;
+
+ 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;
+
+ if (Remove<T>(List, Travel))
+ {
+ return Temp;
+ }
+
+ return nullptr;
+}
+
+
+#endif \ No newline at end of file
diff --git a/CST 126/Homework3/main.cpp b/CST 126/Homework3/main.cpp
index 6771ba7..fb631b8 100644
--- a/CST 126/Homework3/main.cpp
+++ b/CST 126/Homework3/main.cpp
@@ -2,18 +2,11 @@
//Date:5/8/24
//Assignment:Homework3
-
+#include "SinglyLinkedList.hpp"
int main(const int argc, char* argv[])
{
-
-
-
-
-
-
-
return 0;
} \ No newline at end of file