mirror of
https://github.com/TheAlgorithms/C-Plus-Plus.git
synced 2026-02-03 18:46:50 +08:00
feat: Reworked/updated sorting/selection_sort.cpp. (#1613)
* Reworked selection_sort.cpp with fixes. * Added Recursive implementation for tree traversing * Fix #2 * Delete recursive_tree_traversals.cpp * Update selection_sort.cpp * Changes done in selection_sort_iterative.cpp * updating DIRECTORY.md * clang-format and clang-tidy fixes for4681e4f7* Update sorting/selection_sort_iterative.cpp Co-authored-by: David Leal <halfpacho@gmail.com> * Update sorting/selection_sort_iterative.cpp Co-authored-by: David Leal <halfpacho@gmail.com> * Update selection_sort_iterative.cpp * Update sorting/selection_sort_iterative.cpp Co-authored-by: David Leal <halfpacho@gmail.com> * Update sorting/selection_sort_iterative.cpp Co-authored-by: David Leal <halfpacho@gmail.com> * clang-format and clang-tidy fixes forca2a7c64* Finished changes requested by ayaankhan98. * Reworked on changes. * clang-format and clang-tidy fixes forf79b79b7* Corrected errors. * Fix #2 * Fix #3 * Major Fix #3 * clang-format and clang-tidy fixes for79341db8* clang-format and clang-tidy fixes for9bdf2ce4* Update selection_sort_iterative.cpp * clang-format and clang-tidy fixes for9833d7a7* clang-format and clang-tidy fixes forb7726460Co-authored-by: David Leal <halfpacho@gmail.com> Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Co-authored-by: Abhinn Mishra <49574460+mishraabhinn@users.noreply.github.com>
This commit is contained in:
@@ -3,13 +3,14 @@
|
||||
* @details
|
||||
* Using 2 Queues inside the Stack class, we can easily implement Stack
|
||||
* data structure with heavy computation in push function.
|
||||
*
|
||||
* References used: [StudyTonight](https://www.studytonight.com/data-structures/stack-using-queue)
|
||||
*
|
||||
* References used:
|
||||
* [StudyTonight](https://www.studytonight.com/data-structures/stack-using-queue)
|
||||
* @author [tushar2407](https://github.com/tushar2407)
|
||||
*/
|
||||
#include <iostream> /// for IO operations
|
||||
#include <queue> /// for queue data structure
|
||||
#include <cassert> /// for assert
|
||||
#include <cassert> /// for assert
|
||||
#include <iostream> /// for IO operations
|
||||
#include <queue> /// for queue data structure
|
||||
|
||||
/**
|
||||
* @namespace data_strcutres
|
||||
@@ -18,66 +19,59 @@
|
||||
namespace data_structures {
|
||||
/**
|
||||
* @namespace stack_using_queue
|
||||
* @brief Functions for the [Stack Using Queue](https://www.studytonight.com/data-structures/stack-using-queue) implementation
|
||||
* @brief Functions for the [Stack Using
|
||||
* Queue](https://www.studytonight.com/data-structures/stack-using-queue)
|
||||
* implementation
|
||||
*/
|
||||
namespace stack_using_queue {
|
||||
/**
|
||||
* @brief Stack Class implementation for basic methods of Stack Data Structure.
|
||||
*/
|
||||
struct Stack {
|
||||
std::queue<int64_t> main_q; ///< stores the current state of the stack
|
||||
std::queue<int64_t> auxiliary_q; ///< used to carry out intermediate
|
||||
///< operations to implement stack
|
||||
uint32_t current_size = 0; ///< stores the current size of the stack
|
||||
|
||||
/**
|
||||
* @brief Stack Class implementation for basic methods of Stack Data Structure.
|
||||
* Returns the top most element of the stack
|
||||
* @returns top element of the queue
|
||||
*/
|
||||
struct Stack
|
||||
{
|
||||
std::queue<int64_t> main_q; ///< stores the current state of the stack
|
||||
std::queue<int64_t> auxiliary_q; ///< used to carry out intermediate operations to implement stack
|
||||
uint32_t current_size = 0; ///< stores the current size of the stack
|
||||
|
||||
/**
|
||||
* Returns the top most element of the stack
|
||||
* @returns top element of the queue
|
||||
*/
|
||||
int top()
|
||||
{
|
||||
return main_q.front();
|
||||
}
|
||||
int top() { return main_q.front(); }
|
||||
|
||||
/**
|
||||
* @brief Inserts an element to the top of the stack.
|
||||
* @param val the element that will be inserted into the stack
|
||||
* @returns void
|
||||
*/
|
||||
void push(int val)
|
||||
{
|
||||
auxiliary_q.push(val);
|
||||
while(!main_q.empty())
|
||||
{
|
||||
auxiliary_q.push(main_q.front());
|
||||
main_q.pop();
|
||||
}
|
||||
swap(main_q, auxiliary_q);
|
||||
current_size++;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Removes the topmost element from the stack
|
||||
* @returns void
|
||||
*/
|
||||
void pop()
|
||||
{
|
||||
if(main_q.empty()) {
|
||||
return;
|
||||
}
|
||||
/**
|
||||
* @brief Inserts an element to the top of the stack.
|
||||
* @param val the element that will be inserted into the stack
|
||||
* @returns void
|
||||
*/
|
||||
void push(int val) {
|
||||
auxiliary_q.push(val);
|
||||
while (!main_q.empty()) {
|
||||
auxiliary_q.push(main_q.front());
|
||||
main_q.pop();
|
||||
current_size--;
|
||||
}
|
||||
swap(main_q, auxiliary_q);
|
||||
current_size++;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Utility function to return the current size of the stack
|
||||
* @returns current size of stack
|
||||
*/
|
||||
int size()
|
||||
{
|
||||
return current_size;
|
||||
/**
|
||||
* @brief Removes the topmost element from the stack
|
||||
* @returns void
|
||||
*/
|
||||
void pop() {
|
||||
if (main_q.empty()) {
|
||||
return;
|
||||
}
|
||||
};
|
||||
main_q.pop();
|
||||
current_size--;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Utility function to return the current size of the stack
|
||||
* @returns current size of stack
|
||||
*/
|
||||
int size() { return current_size; }
|
||||
};
|
||||
} // namespace stack_using_queue
|
||||
} // namespace data_structures
|
||||
|
||||
@@ -85,30 +79,29 @@ namespace stack_using_queue {
|
||||
* @brief Self-test implementations
|
||||
* @returns void
|
||||
*/
|
||||
static void test()
|
||||
{
|
||||
static void test() {
|
||||
data_structures::stack_using_queue::Stack s;
|
||||
s.push(1); /// insert an element into the stack
|
||||
s.push(2); /// insert an element into the stack
|
||||
s.push(3); /// insert an element into the stack
|
||||
|
||||
assert(s.size()==3); /// size should be 3
|
||||
|
||||
assert(s.top()==3); /// topmost element in the stack should be 3
|
||||
|
||||
s.pop(); /// remove the topmost element from the stack
|
||||
assert(s.top()==2); /// topmost element in the stack should now be 2
|
||||
|
||||
s.pop(); /// remove the topmost element from the stack
|
||||
assert(s.top()==1);
|
||||
|
||||
s.push(5); /// insert an element into the stack
|
||||
assert(s.top()==5); /// topmost element in the stack should now be 5
|
||||
|
||||
s.pop(); /// remove the topmost element from the stack
|
||||
assert(s.top()==1); /// topmost element in the stack should now be 1
|
||||
|
||||
assert(s.size()==1); /// size should be 1
|
||||
s.push(1); /// insert an element into the stack
|
||||
s.push(2); /// insert an element into the stack
|
||||
s.push(3); /// insert an element into the stack
|
||||
|
||||
assert(s.size() == 3); /// size should be 3
|
||||
|
||||
assert(s.top() == 3); /// topmost element in the stack should be 3
|
||||
|
||||
s.pop(); /// remove the topmost element from the stack
|
||||
assert(s.top() == 2); /// topmost element in the stack should now be 2
|
||||
|
||||
s.pop(); /// remove the topmost element from the stack
|
||||
assert(s.top() == 1);
|
||||
|
||||
s.push(5); /// insert an element into the stack
|
||||
assert(s.top() == 5); /// topmost element in the stack should now be 5
|
||||
|
||||
s.pop(); /// remove the topmost element from the stack
|
||||
assert(s.top() == 1); /// topmost element in the stack should now be 1
|
||||
|
||||
assert(s.size() == 1); /// size should be 1
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -119,8 +112,7 @@ static void test()
|
||||
* declared above.
|
||||
* @returns 0 on exit
|
||||
*/
|
||||
int main()
|
||||
{
|
||||
int main() {
|
||||
test(); // run self-test implementations
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user