Given an array arr[] of size N, the task to reverse the array using Stack.
Examples:
Input: arr[] = { 10, 20, 30, 40, 50 }
Output: 50 40 30 20 10
Explanation:
Reversing the array modifies arr[] to { 50, 40, 30, 20, 10 }
Therefore, the required output is 50 40 30 20 10.Input: arr[] = { 1 }
Output: 1
Iterative and Recursive Approach: Refer the article reverse an array to solve this problem iteratively or recursively.
Time Complexity: O(N)
Auxiliary Space: O(1)
Stack-based Approach: Follow the steps below to solve the problem:
- Initialize a Stack to store the array elements.
- Traverse the array and push all the array elements into the stack.
- >Pop the elements from the stack and insert into the array.
- Finally, print the array.
Below is the implementation of the above approach:
C++
// C++ program to implement // the above approach #include <bits/stdc++.h> using namespace std; // Structure of stack class Stack { public: // Stores index of top // element of a stack int top; // Stores maximum count of // elements stored in a stack unsigned capacity; // Stores address of // array element int* array; }; // Function to Initialize a stack // of given capacity. Stack* createStack(unsigned capacity) { Stack* stack = new Stack(); stack->capacity = capacity; stack->top = -1; stack->array = new int[(stack->capacity * sizeof(int))]; return stack; } // Function to check if // the stack is full or not int isFull(Stack* stack) { return stack->top == stack->capacity - 1; } // Function to check if // the stack is empty or not int isEmpty(Stack* stack) { return stack->top == -1; } // Function to insert an element // into the stack. void push(Stack* stack, int item) { // If stack is full if (isFull(stack)) return; // Insert element into stack stack->array[++stack->top] = item; } // Function to remove an element // from stack. int pop(Stack* stack) { // If stack is empty if (isEmpty(stack)) return -1; // Pop element from stack return stack->array[stack->top--]; } // Function to reverse the array elements void reverseArray(int arr[], int n) { // Initialize a stack of capacity n Stack* stack = createStack(n); for (int i = 0; i < n; i++) { // Insert arr[i] into the stack push(stack, arr[i]); } // Reverse the array elements for (int i = 0; i < n; i++) { // Update arr[i] arr[i] = pop(stack); } // Print array elements for (int i = 0; i < n; i++) cout << arr[i] << " "; } // Driver Code int main() { int arr[] = { 100, 200, 300, 400 }; int N = sizeof(arr) / sizeof(arr[0]); reverseArray(arr, N); return 0; } |
C
// C program to implement // the above approach #include <limits.h> #include <stdio.h> #include <stdlib.h> #include <string.h> // Structure of stack struct Stack { // Stores index of top // element of a stack int top; // Stores maximum count of // elements stored in a stack unsigned capacity; // Stores address of // array element int* array; }; // Function to Initialize a stack // of given capacity. struct Stack* createStack(unsigned capacity) { struct Stack* stack = (struct Stack*)malloc( sizeof(struct Stack)); stack->capacity = capacity; stack->top = -1; stack->array = (int*)malloc( stack->capacity * sizeof(int)); return stack; } // Function to check if // the stack is full or not int isFull(struct Stack* stack) { return stack->top == stack->capacity - 1; } // Function to check if // the stack is empty or not int isEmpty(struct Stack* stack) { return stack->top == -1; } // Function to insert an element // into the stack. void push(struct Stack* stack, int item) { // If stack is full if (isFull(stack)) return; // Insert element into stack stack->array[++stack->top] = item; } // Function to remove an element // from stack. int pop(struct Stack* stack) { // If stack is empty if (isEmpty(stack)) return -1; // Pop element from stack return stack->array[stack->top--]; } // Function to reverse the array elements void reverseArray(int arr[], int n) { // Initialize a stack of capacity n struct Stack* stack = createStack(n); for (int i = 0; i < n; i++) { // Insert arr[i] into the stack push(stack, arr[i]); } // Reverse the array elements for (int i = 0; i < n; i++) { // Update arr[i] arr[i] = pop(stack); } // Print array elements for (int i = 0; i < n; i++) printf("%d ", arr[i]); } // Driver Code int main() { int arr[] = { 100, 200, 300, 400 }; int N = sizeof(arr) / sizeof(arr[0]); reverseArray(arr, N); return 0; } |
Java
// Java program to implement // the above approach import java.util.*; // Structure of stack class Stack { // Stores maximum count of // elements stored in a stack int size; // Stores index of top // element of a stack int top; // Stores address of // array element int[] a; // Function to check if // the stack is empty or not boolean isEmpty() { return (top < 0); } // Function to Initialize // a stack of given capacity. Stack(int n) { top = -1; size = n; a = new int[size]; } // Function to push // an element into Stack boolean push(int x) { // If Stack is full if (top >= size) { System.out.println( "Stack Overflow"); return false; } else { // Insert element // into stack a[++top] = x; return true; } } // Function to remove an element // from stack. int pop() { // If stack is empty if (top < 0) { System.out.println( "Stack Underflow"); return 0; } // Pop element from stack else { int x = a[top--]; return x; } } } // Driver Code class Main { // Function to reverse the array elements public static void reverse(int arr[], int n) { // Initialize a stack of capacity n Stack obj = new Stack(n); for (int i = 0; i < n; i++) { // Insert arr[i] into the stack obj.push(arr[i]); } // Reverse the array elements for (int i = 0; i < n; i++) { // Update arr[i] arr[i] = obj.pop(); } // Print array elements for (int i = 0; i < n; i++) { System.out.print(arr[i] + " "); } } // Driver function public static void main(String args[]) { int n = 4; // Create a new array int[] a = new int[] { 100, 200, 300, 400 }; // Call reverse method reverse(a, n); } } |
400 300 200 100
Time Complexity: O(N)
Auxiliary Space: O(N).
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

