diff --git a/cpp/datastructs/binarysearchtree/CMakeLists.txt b/cpp/datastructs/binarysearchtree/CMakeLists.txt index fc1f748..afc9cbc 100644 --- a/cpp/datastructs/binarysearchtree/CMakeLists.txt +++ b/cpp/datastructs/binarysearchtree/CMakeLists.txt @@ -5,7 +5,7 @@ ## ## ## Contact: shaunrd0@gmail.com | URL: www.shaunreed.com | GitHub: shaunrd0 ## ############################################################################## -## vector.cpp +## CMakeLists.txt # cmake_minimum_required(VERSION 3.2) diff --git a/cpp/datastructs/binarysearchtree/bst.cpp b/cpp/datastructs/binarysearchtree/bst.cpp index d1b651a..4c8a7db 100644 --- a/cpp/datastructs/binarysearchtree/bst.cpp +++ b/cpp/datastructs/binarysearchtree/bst.cpp @@ -15,14 +15,6 @@ * Constructors, Destructors, Operators *********************************************************************************/ -/** Default Destructor - * @brief Destroy the Binary Search Tree:: Binary Search Tree object - */ -BinarySearchTree::~BinarySearchTree() -{ - makeEmpty(root); -} - /** Copy Assignment Operator * @brief Empty the calling object's root BinaryNode, and copy the rhs data * @@ -41,6 +33,14 @@ const BinarySearchTree& BinarySearchTree::operator=(const BinarySearchTree& rhs) return *this; } +/** Default Destructor + * @brief Destroy the Binary Search Tree:: Binary Search Tree object + */ +BinarySearchTree::~BinarySearchTree() +{ + makeEmpty(root); +} + /******************************************************************************** * Public Member Functions @@ -82,12 +82,12 @@ bool BinarySearchTree::contains(const int &x) const } /** isEmpty - * @brief Determine wheter or not the calling BST object is empty + * @brief Determine whether or not the calling BST object is empty * * @return true If this->root node points to an empty tree (NULL) * @return false If this->root node points to a constructed BinaryNode */ -bool BinarySearchTree::isEmpty() // const? +bool BinarySearchTree::isEmpty() const { return root == NULL; } @@ -130,6 +130,7 @@ void BinarySearchTree::makeEmpty() void BinarySearchTree::printInOrder() const { printInOrder(root); + std::cout << std::endl; } /** printPostOrder @@ -139,6 +140,7 @@ void BinarySearchTree::printInOrder() const void BinarySearchTree::printPostOrder() const { printPostOrder(root); + std::cout << std::endl; } /** printPreOrder @@ -148,6 +150,7 @@ void BinarySearchTree::printPostOrder() const void BinarySearchTree::printPreOrder() const { printPreOrder(root); + std::cout << std::endl; } @@ -174,7 +177,7 @@ BinarySearchTree::BinaryNode * BinarySearchTree::clone(BinaryNode *t) const * @brief Insert a value into the BST of the given BinaryNode * * @param x The value to be inserted - * @param t The BinaryNode to beign insertion + * @param t The BinaryNode to begin insertion */ void BinarySearchTree::insert(const int &x, BinarySearchTree::BinaryNode *&t) const { @@ -244,7 +247,7 @@ BinarySearchTree::BinaryNode * BinarySearchTree::findMin(BinarySearchTree::Binar /** findMax * @brief Find the maximum value within the BST of the given BinaryNode * - * @param t Te root BinaryNode to begin checking values + * @param t The root BinaryNode to begin checking values * @return BinarySearchTree::BinaryNode* The BinaryNode which contains the largest value (returns NULL if BST is empty) */ BinarySearchTree::BinaryNode * BinarySearchTree::findMax(BinarySearchTree::BinaryNode *t) const @@ -265,7 +268,7 @@ BinarySearchTree::BinaryNode * BinarySearchTree::findMax(BinarySearchTree::Binar * @brief Determines if the value exists within the given BinaryNode and its children * * @param x The value to search for within the BST - * @param t The root BinaryNode to beign the search + * @param t The root BinaryNode to begin the search * @return true If the value is found within the root node or any of its children * @return false If the value is not found within the root node or any of its children */ @@ -336,4 +339,4 @@ void BinarySearchTree::printPreOrder(BinaryNode *t) const printPreOrder(t->left); printPreOrder(t->right); } -} \ No newline at end of file +} diff --git a/cpp/datastructs/binarysearchtree/bst.h b/cpp/datastructs/binarysearchtree/bst.h index 8d8e880..aa71e70 100644 --- a/cpp/datastructs/binarysearchtree/bst.h +++ b/cpp/datastructs/binarysearchtree/bst.h @@ -24,7 +24,7 @@ class BinarySearchTree { const int & findMin() const; const int & findMax() const; bool contains(const int &x) const; - bool isEmpty(); + bool isEmpty() const; void insert(const int &x); void remove(const int &x); void makeEmpty(); diff --git a/cpp/datastructs/circledoublelist/CMakeLists.txt b/cpp/datastructs/circledoublelist/CMakeLists.txt new file mode 100644 index 0000000..57e5205 --- /dev/null +++ b/cpp/datastructs/circledoublelist/CMakeLists.txt @@ -0,0 +1,18 @@ +############################################################################### +## Author: Shaun Reed ## +## Legal: All Content (c) 2020 Shaun Reed, all rights reserved ## +## About: An example of a circular doubly linked list implementation ## +## ## +## Contact: shaunrd0@gmail.com | URL: www.shaunreed.com | GitHub: shaunrd0 ## +############################################################################## +## CMakeLists.txt +# + +CMAKE_MINIMUM_REQUIRED(VERSION 3.2) + +# Define the project name +project(CircleDouble) +# Define source files +set(SRC driver.cpp circledoublelist.cpp) +# Build an executable +add_executable(CircleDoubleDriver ${SRC}) diff --git a/cpp/datastructs/circledoublelist/circledoublelist.cpp b/cpp/datastructs/circledoublelist/circledoublelist.cpp index a8c2c16..7c7b46a 100644 --- a/cpp/datastructs/circledoublelist/circledoublelist.cpp +++ b/cpp/datastructs/circledoublelist/circledoublelist.cpp @@ -247,7 +247,7 @@ bool CircleDoubleList::insert(int val, Node *&tail) // Relink the current head to the node after newNode newNode->next = tail->next; tail->next->prev = newNode; - // Relink our head and tail nodes, makine newNode the head node + // Relink our head and tail nodes, making newNode the head node tail->next = newNode; newNode->prev = tail; } diff --git a/cpp/datastructs/circlesinglelist/CMakeLists.txt b/cpp/datastructs/circlesinglelist/CMakeLists.txt new file mode 100644 index 0000000..10c6eb9 --- /dev/null +++ b/cpp/datastructs/circlesinglelist/CMakeLists.txt @@ -0,0 +1,18 @@ +############################################################################### +## Author: Shaun Reed ## +## Legal: All Content (c) 2020 Shaun Reed, all rights reserved ## +## About: An example of a circular singly linked list implementation ## +## ## +## Contact: shaunrd0@gmail.com | URL: www.shaunreed.com | GitHub: shaunrd0 ## +############################################################################## +## CMakeLists.txt +# + +CMAKE_MINIMUM_REQUIRED(VERSION 3.2) + +# Define the project name +project(CircleSingle) +# Define source files +set(SRC driver.cpp circlesinglelist.cpp) +# Build an executable +add_executable(CircleSingleDriver ${SRC}) diff --git a/cpp/datastructs/circlesinglelist/circlesinglelist.cpp b/cpp/datastructs/circlesinglelist/circlesinglelist.cpp index 9027f3f..208b9b4 100644 --- a/cpp/datastructs/circlesinglelist/circlesinglelist.cpp +++ b/cpp/datastructs/circlesinglelist/circlesinglelist.cpp @@ -40,7 +40,7 @@ CircleSingleList::CircleSingleList(const CircleSingleList& rhs) /** operator= * @brief Deep copy of the rhs CircleSingleList object * Pass rhs by value to create local copy, swap its data with our tail - * Swapped local copy now with previous tail data deleted at end of scope using destr + * Swapped local copy deleted at end of scope using destructor * * @param rhs CircleSingleList object * @return CircleSingleList& A deep copy of the rhs CircleSingleList @@ -53,7 +53,7 @@ CircleSingleList CircleSingleList::operator=(CircleSingleList rhs) } /** destructor - * @brief Destroy the CircleSingleList::CircleSingleList object + * @brief Destroy the CircleSingleList object */ CircleSingleList::~CircleSingleList() { @@ -80,7 +80,7 @@ bool CircleSingleList::insert(int val) /** insert at * @brief Inserts a value in the place of a given key - * Key Node found is moved to the newNode->next positon + * Key Node found is moved to the newNode->next position * * @param key The value to search for to determine insert location * @param val The value to be inserted into the list diff --git a/cpp/datastructs/doublelist/CMakeLists.txt b/cpp/datastructs/doublelist/CMakeLists.txt new file mode 100644 index 0000000..fbf5123 --- /dev/null +++ b/cpp/datastructs/doublelist/CMakeLists.txt @@ -0,0 +1,18 @@ +############################################################################### +## Author: Shaun Reed ## +## Legal: All Content (c) 2020 Shaun Reed, all rights reserved ## +## About: An example of a doubly linked list implementation ## +## ## +## Contact: shaunrd0@gmail.com | URL: www.shaunreed.com | GitHub: shaunrd0 ## +############################################################################## +## CMakeLists.txt +# + +CMAKE_MINIMUM_REQUIRED(VERSION 3.2) + +# Define the project name +project(DoubleList) +# Define source files +set(SRC driver.cpp doublelist.cpp) +# Build an executable +add_executable(DoubleListDriver ${SRC}) diff --git a/cpp/datastructs/doublelist/doublelist.cpp b/cpp/datastructs/doublelist/doublelist.cpp index 4fd8182..e106dac 100644 --- a/cpp/datastructs/doublelist/doublelist.cpp +++ b/cpp/datastructs/doublelist/doublelist.cpp @@ -81,7 +81,7 @@ bool DoubleList::insert(int val) /** insert at * @brief Inserts a value in the place of a given key - * Key Node found is moved to the newNode->next positon + * Key Node found is moved to the newNode->next position * * @param key The value to search for to determine insert location * @param val The value to be inserted into the list diff --git a/cpp/datastructs/doublelist/driver.cpp b/cpp/datastructs/doublelist/driver.cpp index 9959add..d1dfac8 100644 --- a/cpp/datastructs/doublelist/driver.cpp +++ b/cpp/datastructs/doublelist/driver.cpp @@ -26,7 +26,7 @@ int main() while (!exit) { - std::cout << "##### Singly Linked List Menu #####\n\t0. Exit" + std::cout << "##### Doubly Linked List Menu #####\n\t0. Exit" << "\n\t1. Insert\n\t2. Insert at\n\t3. Empty list\n\t4. Peek top of list" << "\n\t5. Print list\n\t6. Find\n\t7. Remove\n\t8. Replace\n"; std::cin >> choice; diff --git a/cpp/datastructs/maxheap/maxheap.cpp b/cpp/datastructs/maxheap/maxheap.cpp index bc8399e..9d4af54 100644 --- a/cpp/datastructs/maxheap/maxheap.cpp +++ b/cpp/datastructs/maxheap/maxheap.cpp @@ -10,6 +10,7 @@ #include "maxheap.h" + /******************************************************************************** * Constructors, Destructors, Operators *********************************************************************************/ @@ -93,7 +94,7 @@ void MaxHeap::del() /** print * Outputs all values held within the heap */ -void MaxHeap::print() +void MaxHeap::print() const { print(heap, index); } @@ -115,7 +116,7 @@ void MaxHeap::makeEmpty() * * @return The smallest value stored in our heap */ -int MaxHeap::findMin() +int MaxHeap::findMin() const { int min = INT32_MAX; for (int i = ROOT; i < index; i++) @@ -128,7 +129,7 @@ int MaxHeap::findMin() * * @return The largest value stored in our heap */ -int MaxHeap::findMax() +int MaxHeap::findMax() const { return heap[ROOT]; } @@ -138,7 +139,7 @@ int MaxHeap::findMax() * * @return true if the heap is empty, false if it has contents */ -bool MaxHeap::isEmpty() +bool MaxHeap::isEmpty() const { return heap == NULL; } @@ -148,7 +149,7 @@ bool MaxHeap::isEmpty() * * @return true if the heap is full, false if it is not */ -bool MaxHeap::isFull() +bool MaxHeap::isFull() const { // Offset for the 0 index return index >= size-1; @@ -195,7 +196,7 @@ void MaxHeap::del(int* heap) * @param heap Address of the heap array * @param _index Last free position in the array */ -void MaxHeap::print(int* heap, int _index) +void MaxHeap::print(int* heap, int _index) const { if (isEmpty()) return; for (int i = 0; i < _index; i++) diff --git a/cpp/datastructs/maxheap/maxheap.h b/cpp/datastructs/maxheap/maxheap.h index b0d4124..9557c23 100644 --- a/cpp/datastructs/maxheap/maxheap.h +++ b/cpp/datastructs/maxheap/maxheap.h @@ -25,17 +25,17 @@ class MaxHeap { MaxHeap operator=(MaxHeap rhs); void insert(int val); void del(); - void print(); + void print() const; void makeEmpty(); - int findMax(); - int findMin(); - bool isEmpty(); - bool isFull(); + int findMax() const; + int findMin() const; + bool isEmpty() const; + bool isFull() const; private: void insert(int*& heap, int _size, int val); void del(int* heap); - void print(int* heap, int _index); + void print(int* heap, int _index) const; void grow(int*& heap, int _size); void siftUp(int* heap, int _index); void siftDown(int* heap, int currentMax); diff --git a/cpp/datastructs/queuelist/CMakeLists.txt b/cpp/datastructs/queuelist/CMakeLists.txt new file mode 100644 index 0000000..d88a2ab --- /dev/null +++ b/cpp/datastructs/queuelist/CMakeLists.txt @@ -0,0 +1,18 @@ +############################################################################### +## Author: Shaun Reed ## +## Legal: All Content (c) 2020 Shaun Reed, all rights reserved ## +## About: An example of a queue implementation ## +## ## +## Contact: shaunrd0@gmail.com | URL: www.shaunreed.com | GitHub: shaunrd0 ## +############################################################################## +## CMakeLists.txt +# + +cmake_minimum_required(VERSION 3.2) + +# Define the project name +project(Queue) +# Define source files +set(SRC driver.cpp queuelist.cpp) +# Build an executable +add_executable(QueueDriver ${SRC}) diff --git a/cpp/datastructs/queuelist/driver.cpp b/cpp/datastructs/queuelist/driver.cpp index 508a05c..034bf89 100644 --- a/cpp/datastructs/queuelist/driver.cpp +++ b/cpp/datastructs/queuelist/driver.cpp @@ -65,4 +65,3 @@ int main() } } } - diff --git a/cpp/datastructs/queuelist/queuelist.cpp b/cpp/datastructs/queuelist/queuelist.cpp index ee01580..35da3dd 100644 --- a/cpp/datastructs/queuelist/queuelist.cpp +++ b/cpp/datastructs/queuelist/queuelist.cpp @@ -75,7 +75,7 @@ QueueList::~QueueList() /** enqueue * @brief Queue a value to the tail of our linked list * - * @param x The value to be inserted into the queue + * @param val The value to be inserted into the queue */ bool QueueList::enqueue(int val) { @@ -158,6 +158,7 @@ void QueueList::makeEmpty() } } + /****************************************************************************** * Private Member Functions *****************************************************************************/ diff --git a/cpp/datastructs/singlelist/CMakeLists.txt b/cpp/datastructs/singlelist/CMakeLists.txt new file mode 100644 index 0000000..a0b8268 --- /dev/null +++ b/cpp/datastructs/singlelist/CMakeLists.txt @@ -0,0 +1,18 @@ +############################################################################### +## Author: Shaun Reed ## +## Legal: All Content (c) 2020 Shaun Reed, all rights reserved ## +## About: An example of a singly linked list implementation ## +## ## +## Contact: shaunrd0@gmail.com | URL: www.shaunreed.com | GitHub: shaunrd0 ## +############################################################################## +## CMakeLists.txt +# + +cmake_minimum_required(VERSION 3.2) + +# Define the project name +project(SingleList) +# Define source files +set(SRC driver.cpp singlelist.cpp) +# Build an executable +add_executable(SingleListDriver ${SRC}) diff --git a/cpp/datastructs/singlelist/singlelist.cpp b/cpp/datastructs/singlelist/singlelist.cpp index e469f53..da6aafa 100644 --- a/cpp/datastructs/singlelist/singlelist.cpp +++ b/cpp/datastructs/singlelist/singlelist.cpp @@ -68,7 +68,7 @@ SingleList::~SingleList() /** insert * @brief Inserts a value to the head of our linked list * - * @param x The value to be inserted + * @param val The value to be inserted */ bool SingleList::insert(int val) { @@ -81,7 +81,7 @@ bool SingleList::insert(int val) /** insert at * @brief Inserts a value in the place of a given key - * Key Node found is moved to the newNode->next positon + * Key Node found is moved to the newNode->next position * * @param key The value to search for to determine insert location * @param val The value to be inserted into the list @@ -296,6 +296,7 @@ bool SingleList::replace(int val, int key, Node *&head) * @brief Find and return a Node which contains the given value * * @param val The value to search for within our SingleList + * @param start The Node to start the search from * @return SingleList::Node* A pointer to the Node containing the search value */ SingleList::Node* SingleList::find(int val, Node *start) const @@ -317,6 +318,7 @@ SingleList::Node* SingleList::find(int val, Node *start) const * @brief Find and return the Node before a given value * * @param val The value to search for within our SingleList + * @param start The Node to start the search from * @return SingleList::Node* A pointer to the Node previous to the given value */ SingleList::Node* SingleList::findPrevious(int val, Node *start) const diff --git a/cpp/datastructs/stacklist/CMakeLists.txt b/cpp/datastructs/stacklist/CMakeLists.txt new file mode 100644 index 0000000..bbb5d55 --- /dev/null +++ b/cpp/datastructs/stacklist/CMakeLists.txt @@ -0,0 +1,18 @@ +############################################################################### +## Author: Shaun Reed ## +## Legal: All Content (c) 2020 Shaun Reed, all rights reserved ## +## About: An example of a stack implementation using linked lists ## +## ## +## Contact: shaunrd0@gmail.com | URL: www.shaunreed.com | GitHub: shaunrd0 ## +############################################################################## +## CMakeLists.txt +# + +cmake_minimum_required(VERSION 3.2) + +# Define the project name +project(Stack) +# Define source files +set(SRC driver.cpp stacklist.cpp) +# Build an executable +add_executable(StackDriver ${SRC}) diff --git a/cpp/datastructs/stacklist/driver.cpp b/cpp/datastructs/stacklist/driver.cpp index f97b9a5..800d2b0 100644 --- a/cpp/datastructs/stacklist/driver.cpp +++ b/cpp/datastructs/stacklist/driver.cpp @@ -65,4 +65,3 @@ int main() } } } - diff --git a/cpp/datastructs/stacklist/stacklist.cpp b/cpp/datastructs/stacklist/stacklist.cpp index df2cbd7..87ee96a 100644 --- a/cpp/datastructs/stacklist/stacklist.cpp +++ b/cpp/datastructs/stacklist/stacklist.cpp @@ -74,7 +74,7 @@ StackList::~StackList() /** push * @brief Push a value to the head of our linked list * - * @param x The value to be inserted + * @param val The value to be inserted */ bool StackList::push(int val) { @@ -146,7 +146,6 @@ bool StackList::isEmpty() const return head == NULL; } - /** print * @brief Output the data held by the StackList object * Calls to the private print() @@ -180,6 +179,12 @@ bool StackList::push(int val, Node *&head) return true; } +/** pop + * @brief Private member to handle removing the head node from the stack + * + * @param head The head node of the stack + * @return The last known value held at the head node before removal + */ int StackList::pop(Node *&head) { // We already know the stack is not empty from public pop() diff --git a/cpp/datastructs/vector/CMakeLists.txt b/cpp/datastructs/vector/CMakeLists.txt index 44fe811..bb20e44 100644 --- a/cpp/datastructs/vector/CMakeLists.txt +++ b/cpp/datastructs/vector/CMakeLists.txt @@ -7,6 +7,7 @@ ############################################################################## ## vector.cpp # + cmake_minimum_required(VERSION 3.2) # Define the project name diff --git a/cpp/datastructs/vector/vector.cpp b/cpp/datastructs/vector/vector.cpp index 8581679..67019b8 100644 --- a/cpp/datastructs/vector/vector.cpp +++ b/cpp/datastructs/vector/vector.cpp @@ -14,7 +14,6 @@ /****************************************************************************** * Constructors, Destructors, Operators *****************************************************************************/ -// TODO: Fix const, destr, op= /** copy constructor * @brief Construct a new Vector::Vector object from an existing one @@ -92,7 +91,7 @@ bool Vector::push(int val) * Once returned, the curIndex is decremented via data[curIndex--] * If the vector is empty, returns INT32_MIN * - * @return int The value held at the Node pointed to by Vector::data[index -1] + * @return int The value held at the Node pointed to by Vector::data[index] */ int Vector::pop() { @@ -101,7 +100,7 @@ int Vector::pop() val = pop(data); std::cout << "[" << val << "] has been popped from our Vector\n"; } - else std::cout << "Nothing to pop, our stack is empty...\n"; + else std::cout << "Nothing to pop, our Vector is empty...\n"; return val; } @@ -134,8 +133,6 @@ int Vector::peek() const return val; } -// TODO: Verify that isEmpty works by actually checking data == NULL - /** isEmpty * @brief Determine if the Vector is empty * @@ -144,7 +141,7 @@ int Vector::peek() const */ bool Vector::isEmpty() const { - return curIndex <= -1; + return data == NULL; } /** isFull @@ -214,6 +211,7 @@ int Vector::getValue(int index) const return data[index]; } + /****************************************************************************** * Private Member Functions *****************************************************************************/ @@ -261,8 +259,7 @@ int Vector::pop(int *&data) /** makeEmpty * @brief Private member to empty Vector object, deleting all associated data * - * @param head The head of the stack to be deleted - * + * @param data The data of the Vector to be deleted */ void Vector::makeEmpty(int *&data) { @@ -275,7 +272,7 @@ void Vector::makeEmpty(int *&data) /** peek * @brief Private member to display the value at the end of our Vector * - * @param data The Vector data peek + * @param data The Vector data to peek * @return int The value stored at the end of the Vector */ int Vector::peek(int *data) const @@ -286,6 +283,8 @@ int Vector::peek(int *data) const /** print * @brief Output the contents of a Vector from the beginning to the end + * + * @param data The data within the Vector to output */ void Vector::print(int *data) const {