diff --git a/algorithms/CPlusPlus/README.md b/algorithms/CPlusPlus/README.md index bf377b7d..083ed512 100644 --- a/algorithms/CPlusPlus/README.md +++ b/algorithms/CPlusPlus/README.md @@ -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) diff --git a/algorithms/CPlusPlus/Stacks/reverse-stack.cpp b/algorithms/CPlusPlus/Stacks/reverse-stack.cpp new file mode 100644 index 00000000..fe604d7f --- /dev/null +++ b/algorithms/CPlusPlus/Stacks/reverse-stack.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 +#include +using namespace std; + +// Recursive function to insert an item to bottom of a given stack +void insertInBottom(stack &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 &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 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; +}