From 771fb47f3be642fb68deec86e43415b493c2423c Mon Sep 17 00:00:00 2001 From: Harshit Jain Date: Sun, 17 Oct 2021 19:27:01 +0530 Subject: [PATCH] Create next_greater.cpp --- Stack/next_greater.cpp | 60 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 Stack/next_greater.cpp diff --git a/Stack/next_greater.cpp b/Stack/next_greater.cpp new file mode 100644 index 0000000..cb14e3f --- /dev/null +++ b/Stack/next_greater.cpp @@ -0,0 +1,60 @@ +// A Stack based C++ program to find next +// greater element for all array elements. +#include +using namespace std; + +/* prints element and NGE pair for all +elements of arr[] of size n */ +void printNGE(int arr[], int n) +{ + stack s; + + /* push the first element to stack */ + s.push(arr[0]); + + // iterate for rest of the elements + for (int i = 1; i < n; i++) + { + + if (s.empty()) { + s.push(arr[i]); + continue; + } + + /* if stack is not empty, then + pop an element from stack. + If the popped element is smaller + than next, then + a) print the pair + b) keep popping while elements are + smaller and stack is not empty */ + while (s.empty() == false + && s.top() < arr[i]) + { + cout << s.top() + << " --> " << arr[i] << endl; + s.pop(); + } + + /* push next to stack so that we can find + next greater for it */ + s.push(arr[i]); + } + + /* After iterating over the loop, the remaining + elements in stack do not have the next greater + element, so print -1 for them */ + while (s.empty() == false) { + cout << s.top() << " --> " << -1 << endl; + s.pop(); + } +} + +/* Driver code */ +int main() +{ + int arr[] = { 11, 13, 21, 3 }; + int n = sizeof(arr) / sizeof(arr[0]); + printNGE(arr, n); + return 0; +}