Add CMakeLists for all datastructs
+ Reorder, refactor comments
This commit is contained in:
parent
be91573abc
commit
a692a0f631
|
@ -5,7 +5,7 @@
|
||||||
## ##
|
## ##
|
||||||
## Contact: shaunrd0@gmail.com | URL: www.shaunreed.com | GitHub: shaunrd0 ##
|
## Contact: shaunrd0@gmail.com | URL: www.shaunreed.com | GitHub: shaunrd0 ##
|
||||||
##############################################################################
|
##############################################################################
|
||||||
## vector.cpp
|
## CMakeLists.txt
|
||||||
#
|
#
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 3.2)
|
cmake_minimum_required(VERSION 3.2)
|
||||||
|
|
|
@ -15,14 +15,6 @@
|
||||||
* Constructors, Destructors, Operators
|
* Constructors, Destructors, Operators
|
||||||
*********************************************************************************/
|
*********************************************************************************/
|
||||||
|
|
||||||
/** Default Destructor
|
|
||||||
* @brief Destroy the Binary Search Tree:: Binary Search Tree object
|
|
||||||
*/
|
|
||||||
BinarySearchTree::~BinarySearchTree()
|
|
||||||
{
|
|
||||||
makeEmpty(root);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Copy Assignment Operator
|
/** Copy Assignment Operator
|
||||||
* @brief Empty the calling object's root BinaryNode, and copy the rhs data
|
* @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;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Default Destructor
|
||||||
|
* @brief Destroy the Binary Search Tree:: Binary Search Tree object
|
||||||
|
*/
|
||||||
|
BinarySearchTree::~BinarySearchTree()
|
||||||
|
{
|
||||||
|
makeEmpty(root);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/********************************************************************************
|
/********************************************************************************
|
||||||
* Public Member Functions
|
* Public Member Functions
|
||||||
|
@ -82,12 +82,12 @@ bool BinarySearchTree::contains(const int &x) const
|
||||||
}
|
}
|
||||||
|
|
||||||
/** isEmpty
|
/** 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 true If this->root node points to an empty tree (NULL)
|
||||||
* @return false If this->root node points to a constructed BinaryNode
|
* @return false If this->root node points to a constructed BinaryNode
|
||||||
*/
|
*/
|
||||||
bool BinarySearchTree::isEmpty() // const?
|
bool BinarySearchTree::isEmpty() const
|
||||||
{
|
{
|
||||||
return root == NULL;
|
return root == NULL;
|
||||||
}
|
}
|
||||||
|
@ -130,6 +130,7 @@ void BinarySearchTree::makeEmpty()
|
||||||
void BinarySearchTree::printInOrder() const
|
void BinarySearchTree::printInOrder() const
|
||||||
{
|
{
|
||||||
printInOrder(root);
|
printInOrder(root);
|
||||||
|
std::cout << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** printPostOrder
|
/** printPostOrder
|
||||||
|
@ -139,6 +140,7 @@ void BinarySearchTree::printInOrder() const
|
||||||
void BinarySearchTree::printPostOrder() const
|
void BinarySearchTree::printPostOrder() const
|
||||||
{
|
{
|
||||||
printPostOrder(root);
|
printPostOrder(root);
|
||||||
|
std::cout << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** printPreOrder
|
/** printPreOrder
|
||||||
|
@ -148,6 +150,7 @@ void BinarySearchTree::printPostOrder() const
|
||||||
void BinarySearchTree::printPreOrder() const
|
void BinarySearchTree::printPreOrder() const
|
||||||
{
|
{
|
||||||
printPreOrder(root);
|
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
|
* @brief Insert a value into the BST of the given BinaryNode
|
||||||
*
|
*
|
||||||
* @param x The value to be inserted
|
* @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
|
void BinarySearchTree::insert(const int &x, BinarySearchTree::BinaryNode *&t) const
|
||||||
{
|
{
|
||||||
|
@ -244,7 +247,7 @@ BinarySearchTree::BinaryNode * BinarySearchTree::findMin(BinarySearchTree::Binar
|
||||||
/** findMax
|
/** findMax
|
||||||
* @brief Find the maximum value within the BST of the given BinaryNode
|
* @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)
|
* @return BinarySearchTree::BinaryNode* The BinaryNode which contains the largest value (returns NULL if BST is empty)
|
||||||
*/
|
*/
|
||||||
BinarySearchTree::BinaryNode * BinarySearchTree::findMax(BinarySearchTree::BinaryNode *t) const
|
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
|
* @brief Determines if the value exists within the given BinaryNode and its children
|
||||||
*
|
*
|
||||||
* @param x The value to search for within the BST
|
* @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 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
|
* @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->left);
|
||||||
printPreOrder(t->right);
|
printPreOrder(t->right);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,7 @@ class BinarySearchTree {
|
||||||
const int & findMin() const;
|
const int & findMin() const;
|
||||||
const int & findMax() const;
|
const int & findMax() const;
|
||||||
bool contains(const int &x) const;
|
bool contains(const int &x) const;
|
||||||
bool isEmpty();
|
bool isEmpty() const;
|
||||||
void insert(const int &x);
|
void insert(const int &x);
|
||||||
void remove(const int &x);
|
void remove(const int &x);
|
||||||
void makeEmpty();
|
void makeEmpty();
|
||||||
|
|
|
@ -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})
|
|
@ -247,7 +247,7 @@ bool CircleDoubleList::insert(int val, Node *&tail)
|
||||||
// Relink the current head to the node after newNode
|
// Relink the current head to the node after newNode
|
||||||
newNode->next = tail->next;
|
newNode->next = tail->next;
|
||||||
tail->next->prev = newNode;
|
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;
|
tail->next = newNode;
|
||||||
newNode->prev = tail;
|
newNode->prev = tail;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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})
|
|
@ -40,7 +40,7 @@ CircleSingleList::CircleSingleList(const CircleSingleList& rhs)
|
||||||
/** operator=
|
/** operator=
|
||||||
* @brief Deep copy of the rhs CircleSingleList object
|
* @brief Deep copy of the rhs CircleSingleList object
|
||||||
* Pass rhs by value to create local copy, swap its data with our tail
|
* 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
|
* @param rhs CircleSingleList object
|
||||||
* @return CircleSingleList& A deep copy of the rhs CircleSingleList
|
* @return CircleSingleList& A deep copy of the rhs CircleSingleList
|
||||||
|
@ -53,7 +53,7 @@ CircleSingleList CircleSingleList::operator=(CircleSingleList rhs)
|
||||||
}
|
}
|
||||||
|
|
||||||
/** destructor
|
/** destructor
|
||||||
* @brief Destroy the CircleSingleList::CircleSingleList object
|
* @brief Destroy the CircleSingleList object
|
||||||
*/
|
*/
|
||||||
CircleSingleList::~CircleSingleList()
|
CircleSingleList::~CircleSingleList()
|
||||||
{
|
{
|
||||||
|
@ -80,7 +80,7 @@ bool CircleSingleList::insert(int val)
|
||||||
|
|
||||||
/** insert at
|
/** insert at
|
||||||
* @brief Inserts a value in the place of a given key
|
* @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 key The value to search for to determine insert location
|
||||||
* @param val The value to be inserted into the list
|
* @param val The value to be inserted into the list
|
||||||
|
|
|
@ -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})
|
|
@ -81,7 +81,7 @@ bool DoubleList::insert(int val)
|
||||||
|
|
||||||
/** insert at
|
/** insert at
|
||||||
* @brief Inserts a value in the place of a given key
|
* @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 key The value to search for to determine insert location
|
||||||
* @param val The value to be inserted into the list
|
* @param val The value to be inserted into the list
|
||||||
|
|
|
@ -26,7 +26,7 @@ int main()
|
||||||
|
|
||||||
while (!exit)
|
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\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";
|
<< "\n\t5. Print list\n\t6. Find\n\t7. Remove\n\t8. Replace\n";
|
||||||
std::cin >> choice;
|
std::cin >> choice;
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
|
|
||||||
#include "maxheap.h"
|
#include "maxheap.h"
|
||||||
|
|
||||||
|
|
||||||
/********************************************************************************
|
/********************************************************************************
|
||||||
* Constructors, Destructors, Operators
|
* Constructors, Destructors, Operators
|
||||||
*********************************************************************************/
|
*********************************************************************************/
|
||||||
|
@ -93,7 +94,7 @@ void MaxHeap::del()
|
||||||
/** print
|
/** print
|
||||||
* Outputs all values held within the heap
|
* Outputs all values held within the heap
|
||||||
*/
|
*/
|
||||||
void MaxHeap::print()
|
void MaxHeap::print() const
|
||||||
{
|
{
|
||||||
print(heap, index);
|
print(heap, index);
|
||||||
}
|
}
|
||||||
|
@ -115,7 +116,7 @@ void MaxHeap::makeEmpty()
|
||||||
*
|
*
|
||||||
* @return The smallest value stored in our heap
|
* @return The smallest value stored in our heap
|
||||||
*/
|
*/
|
||||||
int MaxHeap::findMin()
|
int MaxHeap::findMin() const
|
||||||
{
|
{
|
||||||
int min = INT32_MAX;
|
int min = INT32_MAX;
|
||||||
for (int i = ROOT; i < index; i++)
|
for (int i = ROOT; i < index; i++)
|
||||||
|
@ -128,7 +129,7 @@ int MaxHeap::findMin()
|
||||||
*
|
*
|
||||||
* @return The largest value stored in our heap
|
* @return The largest value stored in our heap
|
||||||
*/
|
*/
|
||||||
int MaxHeap::findMax()
|
int MaxHeap::findMax() const
|
||||||
{
|
{
|
||||||
return heap[ROOT];
|
return heap[ROOT];
|
||||||
}
|
}
|
||||||
|
@ -138,7 +139,7 @@ int MaxHeap::findMax()
|
||||||
*
|
*
|
||||||
* @return true if the heap is empty, false if it has contents
|
* @return true if the heap is empty, false if it has contents
|
||||||
*/
|
*/
|
||||||
bool MaxHeap::isEmpty()
|
bool MaxHeap::isEmpty() const
|
||||||
{
|
{
|
||||||
return heap == NULL;
|
return heap == NULL;
|
||||||
}
|
}
|
||||||
|
@ -148,7 +149,7 @@ bool MaxHeap::isEmpty()
|
||||||
*
|
*
|
||||||
* @return true if the heap is full, false if it is not
|
* @return true if the heap is full, false if it is not
|
||||||
*/
|
*/
|
||||||
bool MaxHeap::isFull()
|
bool MaxHeap::isFull() const
|
||||||
{
|
{
|
||||||
// Offset for the 0 index
|
// Offset for the 0 index
|
||||||
return index >= size-1;
|
return index >= size-1;
|
||||||
|
@ -195,7 +196,7 @@ void MaxHeap::del(int* heap)
|
||||||
* @param heap Address of the heap array
|
* @param heap Address of the heap array
|
||||||
* @param _index Last free position in the 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;
|
if (isEmpty()) return;
|
||||||
for (int i = 0; i < _index; i++)
|
for (int i = 0; i < _index; i++)
|
||||||
|
|
|
@ -25,17 +25,17 @@ class MaxHeap {
|
||||||
MaxHeap operator=(MaxHeap rhs);
|
MaxHeap operator=(MaxHeap rhs);
|
||||||
void insert(int val);
|
void insert(int val);
|
||||||
void del();
|
void del();
|
||||||
void print();
|
void print() const;
|
||||||
void makeEmpty();
|
void makeEmpty();
|
||||||
int findMax();
|
int findMax() const;
|
||||||
int findMin();
|
int findMin() const;
|
||||||
bool isEmpty();
|
bool isEmpty() const;
|
||||||
bool isFull();
|
bool isFull() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void insert(int*& heap, int _size, int val);
|
void insert(int*& heap, int _size, int val);
|
||||||
void del(int* heap);
|
void del(int* heap);
|
||||||
void print(int* heap, int _index);
|
void print(int* heap, int _index) const;
|
||||||
void grow(int*& heap, int _size);
|
void grow(int*& heap, int _size);
|
||||||
void siftUp(int* heap, int _index);
|
void siftUp(int* heap, int _index);
|
||||||
void siftDown(int* heap, int currentMax);
|
void siftDown(int* heap, int currentMax);
|
||||||
|
|
|
@ -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})
|
|
@ -65,4 +65,3 @@ int main()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -75,7 +75,7 @@ QueueList::~QueueList()
|
||||||
/** enqueue
|
/** enqueue
|
||||||
* @brief Queue a value to the tail of our linked list
|
* @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)
|
bool QueueList::enqueue(int val)
|
||||||
{
|
{
|
||||||
|
@ -158,6 +158,7 @@ void QueueList::makeEmpty()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* Private Member Functions
|
* Private Member Functions
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
|
@ -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})
|
|
@ -68,7 +68,7 @@ SingleList::~SingleList()
|
||||||
/** insert
|
/** insert
|
||||||
* @brief Inserts a value to the head of our linked list
|
* @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)
|
bool SingleList::insert(int val)
|
||||||
{
|
{
|
||||||
|
@ -81,7 +81,7 @@ bool SingleList::insert(int val)
|
||||||
|
|
||||||
/** insert at
|
/** insert at
|
||||||
* @brief Inserts a value in the place of a given key
|
* @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 key The value to search for to determine insert location
|
||||||
* @param val The value to be inserted into the list
|
* @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
|
* @brief Find and return a Node which contains the given value
|
||||||
*
|
*
|
||||||
* @param val The value to search for within our SingleList
|
* @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
|
* @return SingleList::Node* A pointer to the Node containing the search value
|
||||||
*/
|
*/
|
||||||
SingleList::Node* SingleList::find(int val, Node *start) const
|
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
|
* @brief Find and return the Node before a given value
|
||||||
*
|
*
|
||||||
* @param val The value to search for within our SingleList
|
* @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
|
* @return SingleList::Node* A pointer to the Node previous to the given value
|
||||||
*/
|
*/
|
||||||
SingleList::Node* SingleList::findPrevious(int val, Node *start) const
|
SingleList::Node* SingleList::findPrevious(int val, Node *start) const
|
||||||
|
|
|
@ -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})
|
|
@ -65,4 +65,3 @@ int main()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -74,7 +74,7 @@ StackList::~StackList()
|
||||||
/** push
|
/** push
|
||||||
* @brief Push a value to the head of our linked list
|
* @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)
|
bool StackList::push(int val)
|
||||||
{
|
{
|
||||||
|
@ -146,7 +146,6 @@ bool StackList::isEmpty() const
|
||||||
return head == NULL;
|
return head == NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/** print
|
/** print
|
||||||
* @brief Output the data held by the StackList object
|
* @brief Output the data held by the StackList object
|
||||||
* Calls to the private print()
|
* Calls to the private print()
|
||||||
|
@ -180,6 +179,12 @@ bool StackList::push(int val, Node *&head)
|
||||||
return true;
|
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)
|
int StackList::pop(Node *&head)
|
||||||
{
|
{
|
||||||
// We already know the stack is not empty from public pop()
|
// We already know the stack is not empty from public pop()
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
## vector.cpp
|
## vector.cpp
|
||||||
#
|
#
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 3.2)
|
cmake_minimum_required(VERSION 3.2)
|
||||||
|
|
||||||
# Define the project name
|
# Define the project name
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* Constructors, Destructors, Operators
|
* Constructors, Destructors, Operators
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
// TODO: Fix const, destr, op=
|
|
||||||
|
|
||||||
/** copy constructor
|
/** copy constructor
|
||||||
* @brief Construct a new Vector::Vector object from an existing one
|
* @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--]
|
* Once returned, the curIndex is decremented via data[curIndex--]
|
||||||
* If the vector is empty, returns INT32_MIN
|
* 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()
|
int Vector::pop()
|
||||||
{
|
{
|
||||||
|
@ -101,7 +100,7 @@ int Vector::pop()
|
||||||
val = pop(data);
|
val = pop(data);
|
||||||
std::cout << "[" << val << "] has been popped from our Vector\n";
|
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;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -134,8 +133,6 @@ int Vector::peek() const
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Verify that isEmpty works by actually checking data == NULL
|
|
||||||
|
|
||||||
/** isEmpty
|
/** isEmpty
|
||||||
* @brief Determine if the Vector is empty
|
* @brief Determine if the Vector is empty
|
||||||
*
|
*
|
||||||
|
@ -144,7 +141,7 @@ int Vector::peek() const
|
||||||
*/
|
*/
|
||||||
bool Vector::isEmpty() const
|
bool Vector::isEmpty() const
|
||||||
{
|
{
|
||||||
return curIndex <= -1;
|
return data == NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** isFull
|
/** isFull
|
||||||
|
@ -214,6 +211,7 @@ int Vector::getValue(int index) const
|
||||||
return data[index];
|
return data[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* Private Member Functions
|
* Private Member Functions
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
@ -261,8 +259,7 @@ int Vector::pop(int *&data)
|
||||||
/** makeEmpty
|
/** makeEmpty
|
||||||
* @brief Private member to empty Vector object, deleting all associated data
|
* @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)
|
void Vector::makeEmpty(int *&data)
|
||||||
{
|
{
|
||||||
|
@ -275,7 +272,7 @@ void Vector::makeEmpty(int *&data)
|
||||||
/** peek
|
/** peek
|
||||||
* @brief Private member to display the value at the end of our Vector
|
* @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
|
* @return int The value stored at the end of the Vector
|
||||||
*/
|
*/
|
||||||
int Vector::peek(int *data) const
|
int Vector::peek(int *data) const
|
||||||
|
@ -286,6 +283,8 @@ int Vector::peek(int *data) const
|
||||||
|
|
||||||
/** print
|
/** print
|
||||||
* @brief Output the contents of a Vector from the beginning to the end
|
* @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
|
void Vector::print(int *data) const
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue