chore(CPlusPlus): add reverse stack (#351)
Co-authored-by: Ujjwal <75884061+UG-SEP@users.noreply.github.com>pull/376/head
parent
6bc975f513
commit
a082e6a494
|
@ -1,82 +1,96 @@
|
|||
# C++
|
||||
|
||||
## Arrays
|
||||
1. [Counting Inversions](Arrays/counting-inversions.cpp)
|
||||
2. [Dutch Flag Algorithm](Arrays/dutch-flag-algo.cpp)
|
||||
3. [Left Rotation](Arrays/left-rotation.cpp)
|
||||
4. [Max Subarray Sum](Arrays/max-subarray-sum.cpp)
|
||||
5. [Shift Negatives](Arrays/shift-negatives.cpp)
|
||||
6. [Boyer–Moore Voting Algorithm](Arrays/boyer_more.cpp)
|
||||
7. [Reverse Array](Arrays/reverse-array.cpp)
|
||||
8. [Sorted-Rotated Search Array](Arrays/search-sorted-rotated.cpp)
|
||||
9. [Fractional Knapsack](Arrays/fractional-knapsack.cpp)
|
||||
|
||||
## Graphs
|
||||
1. [Bellman Ford Algorithm](Graphs/bellmam-ford.cpp)
|
||||
2. [kruskal Algorithm](Graphs/kruskal-algorithm.cpp)
|
||||
3. [Breadth First Search](Graphs/breadth-first-search.cpp)
|
||||
|
||||
## Multiplication
|
||||
1. [Karatsuba](Multiplication/karatsuba.cpp)
|
||||
|
||||
## Linked Lists
|
||||
1. [All possible insertions](Linked-Lists/all-possible-insertion.cpp)
|
||||
2. [Singly linked lists](Linked-Lists/singly.cpp)
|
||||
3. [doubley linked lists](Linked-Lists/doubly.cpp)
|
||||
4. [Circular linked lists](Linked-Lists/circular.cpp)
|
||||
5. [Reversing a linked lists](Linked-Lists/reverse.cpp)
|
||||
5. [Merging two sorted linked lists](Linked-Lists/merge.cpp)
|
||||
6. [Reorder List](Linked-Lists/Reorder-List.cpp)
|
||||
|
||||
## Searching
|
||||
1. [Linear Search](Searching/linear-search.cpp)
|
||||
2. [Jump Search](Searching/jump-search.cpp)
|
||||
3. [Binary Search](Searching/binary-search.cpp)
|
||||
4. [Finding squareroot using Binary search](Searching/sqrt-monotonic-binary-search.cpp)
|
||||
5. [KMP String Searching](Searching/kmp.cpp)
|
||||
6. [Ternary Search](Searching/Ternary-search.cpp)
|
||||
7. [Interpolation Search](Searching/interpolation-search.cpp)
|
||||
8. [Exponential Search](Searching/exponential-search.cpp)
|
||||
|
||||
## Stacks
|
||||
1. [Balancing Parenthesis](Stacks/balanced-parenthesis.cpp)
|
||||
2. [Stack using Array](Stacks/stack-using-array.cpp)
|
||||
|
||||
## Sorting
|
||||
1. [Bubble Sort](Sorting/bubble-sort.cpp)
|
||||
2. [Insertion Sort](Sorting/insertion-sort.cpp)
|
||||
3. [Quicksort](Sorting/quick-sort.cpp)
|
||||
4. [Selection Sort](Sorting/selection-sort.cpp)
|
||||
5. [3 way Quick Sort](Sorting/3way-quick-sort.cpp)
|
||||
6. [Bucket Sort](Sorting/bucket-sort.cpp)
|
||||
7. [Comb Sort](Sorting/comb-sort.cpp)
|
||||
8. [Counting Sort](Sorting/counting-sort.cpp)
|
||||
9. [heap Sort](Sorting/heap-sort.cpp)
|
||||
10. [Radix Sort](Sorting/radix-sort.cpp)
|
||||
11. [Shell Sort](Sorting/shell-sort.cpp)
|
||||
12. [Binary Insertion Sort](Sorting/binary-insertion-sort.cpp)
|
||||
13. [Merge Sort](Sorting/merge-sort.cpp)
|
||||
|
||||
## Strings
|
||||
1. [Rabin-Karp pattern search algo](Strings/rabin-karp.cpp)
|
||||
2. [All subsequence of a string (Recursion) ](Strings/sequence.cpp)
|
||||
3. [String reversal](Strings/string-reverse.cpp)
|
||||
4. [String tokanisation](Strings/string-tokeniser.cpp)
|
||||
5. [Anagram check](Strings/anagram.cpp)
|
||||
|
||||
## Trees
|
||||
1. [Creating Binary Tree](Trees/build-binary-tree.cpp)
|
||||
2. [Counting and finding sum of all the nodes in BST](Trees/count-and-sum-of-nodes-in-binary-tree.cpp)
|
||||
3. [Level Order Traversal](Trees/level-order-traversal.cpp)
|
||||
4. [Depth first Traversal](Trees/pre-in-post-traversal.cpp)
|
||||
5. [Binary Search Tree](Trees/binary-search-tree.cpp)
|
||||
6. [In order morris traversal](Trees/in-order-morris-traversal.cpp)
|
||||
7. [In order Predecessor and Successor](Trees/in-order-predecessor-and-successor.cpp)
|
||||
8. [Avl Tree](Trees/avl.cpp)
|
||||
9. [Min Heap](Trees/min-heap.cpp)
|
||||
|
||||
# Maths
|
||||
1. [Kaprekar Number](Maths/Kaprekar-number.cpp)
|
||||
2. [Prime Number](Maths/prime-check.cpp)
|
||||
3. [Prime Sieve](Maths/prime-sieve.cpp)
|
||||
4. [Fibonacci Series](Maths/fibonaccci-series.cpp)
|
||||
# C++
|
||||
|
||||
## Arrays
|
||||
|
||||
1. [Counting Inversions](Arrays/counting-inversions.cpp)
|
||||
2. [Dutch Flag Algorithm](Arrays/dutch-flag-algo.cpp)
|
||||
3. [Left Rotation](Arrays/left-rotation.cpp)
|
||||
4. [Max Subarray Sum](Arrays/max-subarray-sum.cpp)
|
||||
5. [Shift Negatives](Arrays/shift-negatives.cpp)
|
||||
6. [Boyer–Moore Voting Algorithm](Arrays/boyer_more.cpp)
|
||||
7. [Reverse Array](Arrays/reverse-array.cpp)
|
||||
8. [Sorted-Rotated Search Array](Arrays/search-sorted-rotated.cpp)
|
||||
9. [Fractional Knapsack](Arrays/fractional-knapsack.cpp)
|
||||
|
||||
## Graphs
|
||||
|
||||
1. [Bellman Ford Algorithm](Graphs/bellmam-ford.cpp)
|
||||
2. [kruskal Algorithm](Graphs/kruskal-algorithm.cpp)
|
||||
3. [Breadth First Search](Graphs/breadth-first-search.cpp)
|
||||
|
||||
## Multiplication
|
||||
|
||||
1. [Karatsuba](Multiplication/karatsuba.cpp)
|
||||
|
||||
## Linked Lists
|
||||
|
||||
1. [All possible insertions](Linked-Lists/all-possible-insertion.cpp)
|
||||
2. [Singly linked lists](Linked-Lists/singly.cpp)
|
||||
3. [doubley linked lists](Linked-Lists/doubly.cpp)
|
||||
4. [Circular linked lists](Linked-Lists/circular.cpp)
|
||||
5. [Reversing a linked lists](Linked-Lists/reverse.cpp)
|
||||
6. [Merging two sorted linked lists](Linked-Lists/merge.cpp)
|
||||
6. [Reorder List](Linked-Lists/Reorder-List.cpp)
|
||||
|
||||
## Searching
|
||||
|
||||
1. [Linear Search](Searching/linear-search.cpp)
|
||||
2. [Jump Search](Searching/jump-search.cpp)
|
||||
3. [Binary Search](Searching/binary-search.cpp)
|
||||
4. [Finding squareroot using Binary search](Searching/sqrt-monotonic-binary-search.cpp)
|
||||
5. [KMP String Searching](Searching/kmp.cpp)
|
||||
6. [Ternary Search](Searching/Ternary-search.cpp)
|
||||
7. [Interpolation Search](Searching/interpolation-search.cpp)
|
||||
8. [Exponential Search](Searching/exponential-search.cpp)
|
||||
|
||||
## Stacks
|
||||
|
||||
1. [Balancing Parenthesis](Stacks/balanced-parenthesis.cpp)
|
||||
|
||||
2. [Reversing Stack](Stacks/reverse-stack.cpp)
|
||||
|
||||
3. [Stack using Array](Stacks/stack-using-array.cpp)
|
||||
|
||||
|
||||
## Sorting
|
||||
|
||||
1. [Bubble Sort](Sorting/bubble-sort.cpp)
|
||||
2. [Insertion Sort](Sorting/insertion-sort.cpp)
|
||||
3. [Quicksort](Sorting/quick-sort.cpp)
|
||||
4. [Selection Sort](Sorting/selection-sort.cpp)
|
||||
5. [3 way Quick Sort](Sorting/3way-quick-sort.cpp)
|
||||
6. [Bucket Sort](Sorting/bucket-sort.cpp)
|
||||
7. [Comb Sort](Sorting/comb-sort.cpp)
|
||||
8. [Counting Sort](Sorting/counting-sort.cpp)
|
||||
9. [heap Sort](Sorting/heap-sort.cpp)
|
||||
10. [Radix Sort](Sorting/radix-sort.cpp)
|
||||
11. [Shell Sort](Sorting/shell-sort.cpp)
|
||||
12. [Binary Insertion Sort](Sorting/binary-insertion-sort.cpp)
|
||||
13. [Merge Sort](Sorting/merge-sort.cpp)
|
||||
|
||||
## Strings
|
||||
|
||||
1. [Rabin-Karp pattern search algo](Strings/rabin-karp.cpp)
|
||||
2. [All subsequence of a string (Recursion) ](Strings/sequence.cpp)
|
||||
3. [String reversal](Strings/string-reverse.cpp)
|
||||
4. [String tokanisation](Strings/string-tokeniser.cpp)
|
||||
5. [Anagram check](Strings/anagram.cpp)
|
||||
|
||||
## Trees
|
||||
|
||||
1. [Creating Binary Tree](Trees/build-binary-tree.cpp)
|
||||
2. [Counting and finding sum of all the nodes in BST](Trees/count-and-sum-of-nodes-in-binary-tree.cpp)
|
||||
3. [Level Order Traversal](Trees/level-order-traversal.cpp)
|
||||
4. [Depth first Traversal](Trees/pre-in-post-traversal.cpp)
|
||||
5. [Binary Search Tree](Trees/binary-search-tree.cpp)
|
||||
6. [In order morris traversal](Trees/in-order-morris-traversal.cpp)
|
||||
7. [In order Predecessor and Successor](Trees/in-order-predecessor-and-successor.cpp)
|
||||
8. [Avl Tree](Trees/avl.cpp)
|
||||
9. [Min Heap](Trees/min-heap.cpp)
|
||||
|
||||
# Maths
|
||||
|
||||
1. [Kaprekar Number](Maths/Kaprekar-number.cpp)
|
||||
2. [Prime Number](Maths/prime-check.cpp)
|
||||
3. [Prime Sieve](Maths/prime-sieve.cpp)
|
||||
4. [Fibonacci Series](Maths/fibonaccci-series.cpp)
|
||||
|
|
|
@ -0,0 +1,73 @@
|
|||
/* the idea is to hold all items in a call stack until the stack becomes empty.
|
||||
Then insert each item in the call stack at the bottom of the stack. */
|
||||
|
||||
#include <iostream>
|
||||
#include <stack>
|
||||
using namespace std;
|
||||
|
||||
// Recursive function to insert an item to bottom of a given stack
|
||||
void insertInBottom(stack<int> &s, int item)
|
||||
{
|
||||
// base case: if the stack is empty, insert given item at bottom
|
||||
if (s.empty()) {
|
||||
s.push(item);
|
||||
return;
|
||||
}
|
||||
|
||||
// Pop all items from the stack and hold them in call stack
|
||||
int top = s.top();
|
||||
s.pop();
|
||||
insertInBottom(s, item);
|
||||
|
||||
/*After the recursion completes , push each item in the call stack
|
||||
to top of the stack*/
|
||||
s.push(top);
|
||||
}
|
||||
|
||||
// Recursive function to reverse a given stack
|
||||
void reverseStack(stack<int> &s)
|
||||
{
|
||||
// base case: stack is empty
|
||||
if (s.empty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Pop all items from the stack and hold them in call stack
|
||||
int item = s.top();
|
||||
s.pop();
|
||||
reverseStack(s);
|
||||
|
||||
// After the recursion unfolds, insert each item from the call stack to bottom of the stack
|
||||
insertInBottom(s, item);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
stack<int> s;
|
||||
int n;
|
||||
cout<<"Enter the size of stack"<<"\n";
|
||||
cin>>n;
|
||||
for (int i = 1; i <= n; i++) {
|
||||
int temp;
|
||||
cout<<"enter element"<<"\n";
|
||||
cin>>temp;
|
||||
s.push(temp);
|
||||
}
|
||||
|
||||
reverseStack(s);
|
||||
|
||||
cout << "Reversed stack is: ";
|
||||
while (!s.empty()) {
|
||||
cout << s.top() << ' ';
|
||||
s.pop();
|
||||
}
|
||||
|
||||
/*what program does (reverses the stack by using recursion)
|
||||
-> original stack: 1,2,3,4,5
|
||||
-> reversed stack: 5,4,3,2,1*/
|
||||
|
||||
// time complexity : O(n^2)
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue