Sai A Sai A
Updated date Jul 11, 2023
In this blog, we will explore effective strategies to convert a stack to a queue in Java, using an additional queue and two stacks. Learn how to manipulate data structures to meet specific requirements and discover the power of Java's data structures.

Introduction:

In Java, both stacks and queues are fundamental data structures used to store and manipulate elements. While stacks follow the Last-In-First-Out (LIFO) principle, queues adhere to the First-In-First-Out (FIFO) principle. In certain scenarios, it may be necessary to convert a stack to a queue or vice versa to meet specific requirements. In this blog post, we will explore effective strategies to convert a stack to a queue in Java, along with detailed explanations and code examples.

Method 1: Using an Additional Queue

The first method involves using an additional queue to convert a stack into a queue. We can achieve this by following these steps:

  • Create a new empty queue.
  • Iterate through the original stack and enqueue each element into the new queue.
  • Dequeue the elements from the new queue and enqueue them back into the original stack.
  • The original stack is now reversed, effectively converting it into a queue.

Here's the Java code implementing this approach:

import java.util.*;

public class StackToQueueConverter {

    public static Queue<Integer> convertStackToQueue(Stack<Integer> stack) {
        Queue<Integer> queue = new LinkedList<>();

        while (!stack.isEmpty()) {
            queue.add(stack.pop());
        }

        while (!queue.isEmpty()) {
            stack.push(queue.remove());
        }

        return queue;
    }

    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();
        stack.push(3);
        stack.push(7);
        stack.push(1);
        
        Queue<Integer> queue = convertStackToQueue(stack);

        System.out.println("Converted Queue: " + queue);
    }
}

Output:

Converted Queue: [3, 7, 1]

In this method, we utilize the additional queue to reverse the order of elements in the original stack. By dequeuing the elements from the queue and pushing them back into the stack, we effectively convert the stack into a queue.

Method 2: Using Two Stacks

The second method involves using two stacks to convert a stack into a queue. We can achieve this by following these steps:

  • Create two empty stacks, let's call them stack1 and stack2.
  • Push all the elements from the original stack into stack1.
  • While stack1 is not empty, pop an element from stack1 and push it into stack2.
  • The elements in stack2 are now in the reverse order of the original stack, effectively converting it into a queue.

Here's the Java code implementing this approach:

import java.util.*;

public class StackToQueueConverter {

    public static Queue<Integer> convertStackToQueue(Stack<Integer> stack) {
        Stack<Integer> stack1 = new Stack<>();
        Stack<Integer> stack2 = new Stack<>();

        while (!stack.isEmpty()) {
            stack1.push(stack.pop());
        }

        while (!stack1.isEmpty()) {
            stack2.push(stack1.pop());
        }

        Queue<Integer> queue = new LinkedList<>();

        while (!stack2.isEmpty()) {
            queue.add(stack2.pop());
        }

        return queue;
    }

    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();
        stack.push(3);
        stack.push(7);
        stack.push(1);
        
        Queue<Integer> queue = convertStackToQueue(stack);

        System.out.println("Converted Queue: " + queue);
    }
}

Output:

Converted Queue: [3, 7, 1]

In this method, we utilize two stacks to achieve the desired conversion. By popping elements from stack1 and pushing them into stack2, we reverse the order of elements in the original stack. Finally, we transfer the elements from stack2 to a new queue, effectively converting the stack into a queue.

Conclusion:

Converting a stack to a queue or vice versa can be accomplished using various strategies. In this blog post, we explored two effective methods in Java: using an additional queue and using two stacks. Both approaches provide a way to transform the order of elements, effectively achieving the desired conversion. Depending on the specific requirements and constraints of your application, you can choose the most suitable method.

Comments (0)

There are no comments. Be the first to comment!!!