mirror of
https://github.com/TheAlgorithms/C-Plus-Plus.git
synced 2026-02-12 06:56:59 +08:00
* chore: fix Markdown formatting in `dynamic_programming/kadane2.cpp` (#2276)
* docs: fix grammatical errors and typos (#2201)
* docs: fix grammatical errors and typos
* compilation error fixed
* Revert "compilation error fixed"
This reverts commit 0083cbfd1a.
* feat: added physics directory and ground to ground projectile motion algorithm (#2279)
* feat: added physics folder, ground to ground projectile motion calculations
* feat: added max height function
* fix: bug in angle calculations
* test: added test cases
* docs: added comments to test case variables
* docs: added comments to calculations
* fix: changed floats to doubles
* updating DIRECTORY.md
* Update physics/ground_to_ground_projectile_motion.cpp
Co-authored-by: David Leal <halfpacho@gmail.com>
* chore: add missing namespace
* rerun checks
Co-authored-by: David <Panquesito7@users.noreply.github.com>
Co-authored-by: David Leal <halfpacho@gmail.com>
* docs: updated a logically wrong doc comment (#2329)
* feat: add CMakeLists to the `divide_and_conquer` directory (#2072)
* fix: stairs pattern not printing slash (#2111)
when we propose 2 backslash then it doesn't take it as a comment and gets printed
Co-authored-by: David Leal <halfpacho@gmail.com>
* fix: use FreeGlut newest GitHub link (#2397)
* updating DIRECTORY.md
* fix: use FreeGlut newest GitHub link
* chore(fix): `data_strcutres` -> `data_structures` (#2399)
* feat: add Find non repeating number implementation (#2061)
* add find_single_number
* add fix issues
* remove .vscode
* add .vscode
* Update .vscode/settings.json
Co-authored-by: David Leal <halfpacho@gmail.com>
* chore(fix): minor issues
Co-authored-by: David Leal <halfpacho@gmail.com>
* [feat/docs]: improve the `quick_sort.cpp` algorithm (#2396)
* [feat/docs]: improve the `quick_sort.cpp`...
...algorithm implementation.
* clang-format and clang-tidy fixes for 40c858ba
* chore(fix): add original author
* updating DIRECTORY.md
* chore: update Discord links (#2407)
* docs: remove unneeded Markdown header
* feat: improve the Awesome Workflow (#2408)
* fix: Awesome Workflow issues
Thanks to @tjgurwara99 for the original fix: TheAlgorithms/C#1176
* chore: apply suggestions from code review
Co-authored-by: Taj <tjgurwara99@users.noreply.github.com>
* feat: various improvements
* chore: apply suggestions from code review
Co-authored-by: Taj <tjgurwara99@users.noreply.github.com>
* chore: remove LGTM and fix...
...CodeQL badges.
* docs: add guide on integrating CMake (#2410)
Taken from TheAlgorithms/C#1163
* updating DIRECTORY.md
Co-authored-by: Daemon <90456722+Daemon19@users.noreply.github.com>
Co-authored-by: aadarshkt <72285744+aadarshkt@users.noreply.github.com>
Co-authored-by: Focus <65309793+Focusucof@users.noreply.github.com>
Co-authored-by: David <Panquesito7@users.noreply.github.com>
Co-authored-by: David Leal <halfpacho@gmail.com>
Co-authored-by: Arjit Malik <arjitmalik2001@gmail.com>
Co-authored-by: Harsh Singh <94822101+harshsingh510@users.noreply.github.com>
Co-authored-by: Ravi Dev Pandey <62198564+literalEval@users.noreply.github.com>
Co-authored-by: Mehmet <110852769+walterwhite351@users.noreply.github.com>
Co-authored-by: Taj <tjgurwara99@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions@users.noreply.github.com>
119 lines
3.4 KiB
C++
119 lines
3.4 KiB
C++
/**
|
|
* @brief Stack Data Structure Using the Queue Data Structure
|
|
* @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)
|
|
* @author [tushar2407](https://github.com/tushar2407)
|
|
*/
|
|
#include <cassert> /// for assert
|
|
#include <iostream> /// for IO operations
|
|
#include <queue> /// for queue data structure
|
|
|
|
/**
|
|
* @namespace data_structures
|
|
* @brief Data structures algorithms
|
|
*/
|
|
namespace data_structures {
|
|
/**
|
|
* @namespace stack_using_queue
|
|
* @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
|
|
|
|
/**
|
|
* Returns the top most element of the stack
|
|
* @returns top element of the queue
|
|
*/
|
|
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;
|
|
}
|
|
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
|
|
|
|
/**
|
|
* @brief Self-test implementations
|
|
* @returns void
|
|
*/
|
|
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
|
|
}
|
|
|
|
/**
|
|
* @brief Main function
|
|
* Creates a stack and pushed some value into it.
|
|
* Through a series of push and pop functions on stack,
|
|
* it demostrates the functionality of the custom stack
|
|
* declared above.
|
|
* @returns 0 on exit
|
|
*/
|
|
int main() {
|
|
test(); // run self-test implementations
|
|
return 0;
|
|
}
|