The Wayback Machine - https://web.archive.org/web/20241008151145/https://www.geeksforgeeks.org/implement-stack-using-queue/
Open In App

Implement Stack using Queues

Last Updated : 05 Aug, 2024
Summarize
Comments
Improve
Suggest changes
Like Article
Like
Save
Share
Report
News Follow

Given a Queue data structure that supports standard operations like enqueue() and dequeue(). The task is to implement a Stack data structure using Queue.

Stack and Queue with insert and delete operations 


A Stack can be implemented using two queues. Let Stack to be implemented be ‘s’ and queues used to implement are ‘q1’ and ‘q2’. Stack ‘s’ can be implemented in two ways:

Implement Stack using Queues By making push() operation costly:

Below is the idea to solve the problem:

The idea is to keep newly entered element at the front of ‘q1’ so that pop operation dequeues from ‘q1’. ‘q2’ is used to put every new element in front of ‘q1’.

  • Follow the below steps to implement the push(s, x) operation: 
    • Enqueue x to q2.
    • One by one dequeue everything from q1 and enqueue to q2.
    • Swap the queues of q1 and q2.
  • Follow the below steps to implement the pop(s) operation: 
    • Dequeue an item from q1 and return it.

Below is the implementation of the above approach.

C++
/* Program to implement a stack using
two queue */
#include <bits/stdc++.h>

using namespace std;

class Stack {
    // Two inbuilt queues
    queue<int> q1, q2;

public:
    void push(int x)
    {
        // Push x first in empty q2
        q2.push(x);

        // Push all the remaining
        // elements in q1 to q2.
        while (!q1.empty()) {
            q2.push(q1.front());
            q1.pop();
        }

        // swap the names of two queues
        queue<int> q = q1;
        q1 = q2;
        q2 = q;
    }

    void pop()
    {
        // if no elements are there in q1
        if (q1.empty())
            return;
        q1.pop();
    }

    int top()
    {
        if (q1.empty())
            return -1;
        return q1.front();
    }

    int size() { return q1.size(); }
};

// Driver code
int main()
{
    Stack s;
    s.push(1);
    s.push(2);
    s.push(3);

    cout << "current size: " << s.size() << endl;
    cout << s.top() << endl;
    s.pop();
    cout << s.top() << endl;
    s.pop();
    cout << s.top() << endl;

    cout << "current size: " << s.size() << endl;
    return 0;
}
Java
/* Java Program to implement a stack using
two queue */
import java.util.*;

class GfG {

    static class Stack {
        // Two inbuilt queues
        static Queue<Integer> q1
            = new LinkedList<Integer>();
        static Queue<Integer> q2
            = new LinkedList<Integer>();

        // To maintain current number of
        // elements
        static int curr_size;

        static void push(int x)
        {
            // Push x first in empty q2
            q2.add(x);

            // Push all the remaining
            // elements in q1 to q2.
            while (!q1.isEmpty()) {
                q2.add(q1.peek());
                q1.remove();
            }

            // swap the names of two queues
            Queue<Integer> q = q1;
            q1 = q2;
            q2 = q;
        }

        static void pop()
        {

            // if no elements are there in q1
            if (q1.isEmpty())
                return;
            q1.remove();
        }

        static int top()
        {
            if (q1.isEmpty())
                return -1;
            return q1.peek();
        }

        static int size() { return q1.size(); }
    }

    // driver code
    public static void main(String[] args)
    {
        Stack s = new Stack();
        s.push(1);
        s.push(2);
        s.push(3);

        System.out.println("current size: " + s.size());
        System.out.println(s.top());
        s.pop();
        System.out.println(s.top());
        s.pop();
        System.out.println(s.top());

        System.out.println("current size: " + s.size());
    }
}
// This code is contributed by Prerna
Python
# Program to implement a stack using
# two queue
from _collections import deque


class Stack:

    def __init__(self):

        # Two inbuilt queues
        self.q1 = deque()
        self.q2 = deque()

    def push(self, x):

        # Push x first in empty q2
        self.q2.append(x)

        # Push all the remaining
        # elements in q1 to q2.
        while (self.q1):
            self.q2.append(self.q1.popleft())

        # swap the names of two queues
        self.q1, self.q2 = self.q2, self.q1

    def pop(self):

        # if no elements are there in q1
        if self.q1:
            self.q1.popleft()

    def top(self):
        if (self.q1):
            return self.q1[0]
        return None

    def size(self):
        return len(self.q1)


# Driver Code
if __name__ == '__main__':
    s = Stack()
    s.push(1)
    s.push(2)
    s.push(3)

    print("current size: ", s.size())
    print(s.top())
    s.pop()
    print(s.top())
    s.pop()
    print(s.top())

    print("current size: ", s.size())

# This code is contributed by PranchalK
JavaScript
/*Javascript Program to implement a stack using
two queue */

// Two inbuilt queues
class Stack {
    constructor() {
        this.q1 = [];
        this.q2 = [];
    }

    push(x) {

        // Push x first in isEmpty q2
        this.q2.push(x);
        // Push all the remaining
        // elements in q1 to q2.
        while (this.q1.length != 0) {
            this.q2.push(this.q1[0]);
            this.q1.shift();

        }

        // swap the names of two queues
        this.q = this.q1;
        this.q1 = this.q2;
        this.q2 = this.q;
    }

    pop() {
        // if no elements are there in q1
        if (this.q1.length == 0)
            return;
        this.q1.shift();
    }

    top() {
        if (this.q1.length == 0)
            return -1;
        return this.q1[0];
    }

    size() {
        console.log(this.q1.length);
    }

    isEmpty() {
        // return true if the queue is empty.
        return this.q1.length == 0;
    }

    front() {
        return this.q1[0];
    }
}

// Driver code


let s = new Stack();
s.push(1);
s.push(2);
s.push(3);

console.log("current size: ");
s.size();
console.log(s.top());
s.pop();
console.log(s.top());
s.pop();
console.log(s.top());

console.log("current size: ");
s.size();

// This code is contributed by adityamaharshi21

Output
current size: 3
3
2
1
current size: 1

Time Complexity:

  • Push operation: O(N), As all the elements need to be popped out from the Queue (q1) and push them back to Queue (q2).
  • Pop operation: O(1), As we need to remove the front element from the Queue.

Auxiliary Space: O(N), As we use two queues for the implementation of a Stack.

Implement Stack using Queues by making pop() operation costly:

Below is the idea to solve the problem:

The new element is always enqueued to q1. In pop() operation, if q2 is empty then all the elements except the last, are moved to q2. Finally, the last element is dequeued from q1 and returned.

  • Follow the below steps to implement the push(s, x) operation: 
    • Enqueue x to q1 (assuming the size of q1 is unlimited).
  • Follow the below steps to implement the pop(s) operation: 
    • One by one dequeue everything except the last element from q1 and enqueue to q2.
    • Dequeue the last item of q1, the dequeued item is the result, store it.
    • Swap the names of q1 and q2
    • Return the item stored in step 2.

Below is the implementation of the above approach:

C++
// Program to implement a stack
// using two queue
#include <bits/stdc++.h>
using namespace std;

class Stack {
    queue<int> q1, q2;

public:
    void pop()
    {
        if (q1.empty())
            return;

        // Leave one element in q1 and
        // push others in q2.
        while (q1.size() != 1) {
            q2.push(q1.front());
            q1.pop();
        }

        // Pop the only left element
        // from q1
        q1.pop();

        // swap the names of two queues
        queue<int> q = q1;
        q1 = q2;
        q2 = q;
    }

    void push(int x) { q1.push(x); }

    int top()
    {
        if (q1.empty())
            return -1;

        while (q1.size() != 1) {
            q2.push(q1.front());
            q1.pop();
        }

        // last pushed element
        int temp = q1.front();

        // to empty the auxiliary queue after
        // last operation
        q1.pop();

        // push last element to q2
        q2.push(temp);

        // swap the two queues names
        queue<int> q = q1;
        q1 = q2;
        q2 = q;
        return temp;
    }

    int size() { return q1.size(); }
};

// Driver code
int main()
{
    Stack s;
    s.push(1);
    s.push(2);
    s.push(3);

    cout << "current size: " << s.size() << endl;
    cout << s.top() << endl;
    s.pop();
    cout << s.top() << endl;
    s.pop();
    cout << s.top() << endl;
    cout << "current size: " << s.size() << endl;
    return 0;
}
Java
/* Java Program to implement a stack
using two queue */
import java.util.*;

class Stack {
    Queue<Integer> q1 = new LinkedList<>(),
                   q2 = new LinkedList<>();

    void remove()
    {
        if (q1.isEmpty())
            return;

        // Leave one element in q1 and
        // push others in q2.
        while (q1.size() != 1) {
            q2.add(q1.peek());
            q1.remove();
        }

        // Pop the only left element
        // from q1
        q1.remove();

        // swap the names of two queues
        Queue<Integer> q = q1;
        q1 = q2;
        q2 = q;
    }

    void add(int x) { q1.add(x); }

    int top()
    {
        if (q1.isEmpty())
            return -1;

        while (q1.size() != 1) {
            q2.add(q1.peek());
            q1.remove();
        }

        // last pushed element
        int temp = q1.peek();

        // to empty the auxiliary queue after
        // last operation
        q1.remove();

        // push last element to q2
        q2.add(temp);

        // swap the two queues names
        Queue<Integer> q = q1;
        q1 = q2;
        q2 = q;
        return temp;
    }

    int size() { return q1.size(); }

    // Driver code
    public static void main(String[] args)
    {
        Stack s = new Stack();
        s.add(1);
        s.add(2);
        s.add(3);

        System.out.println("current size: " + s.size());
        System.out.println(s.top());
        s.remove();
        System.out.println(s.top());
        s.remove();
        System.out.println(s.top());
        System.out.println("current size: " + s.size());
    }
}

// This code is contributed by Princi Singh
Python
# Program to implement a stack using
# two queue
from _collections import deque


class Stack:

    def __init__(self):

        # Two inbuilt queues
        self.q1 = deque()
        self.q2 = deque()

    def push(self, x):
        self.q1.append(x)

    def pop(self):
        # if no elements are there in q1
        if (not self.q1):
            return
        # Leave one element in q1 and push others in q2
        while(len(self.q1) != 1):
            self.q2.append(self.q1.popleft())

        # swap the names of two queues
        self.q1, self.q2 = self.q2, self.q1

    def top(self):
        # if no elements are there in q1
        if (not self.q1):
            return
        # Leave one element in q1 and push others in q2
        while(len(self.q1) != 1):
            self.q2.append(self.q1.popleft())

        # Pop the only left element from q1 to q2
        top = self.q1[0]
        self.q2.append(self.q1.popleft())

        # swap the names of two queues
        self.q1, self.q2 = self.q2, self.q1

        return top

    def size(self):
        return len(self.q1)


# Driver Code
if __name__ == '__main__':
    s = Stack()
    s.push(1)
    s.push(2)
    s.push(3)

    print("current size: ", s.size())
    print(s.top())
    s.pop()
    print(s.top())
    s.pop()
    print(s.top())

    print("current size: ", s.size())

# This code is contributed by jainlovely450
JavaScript
/*Javascript Program to implement a stack using
two queue */

// Two inbuilt queues
class Stack {
    constructor() {
        this.q1 = [];
        this.q2 = [];
    }
    
    pop()
    {
        if (this.q1.length == 0)
            return;
        
        // Leave one element in q1 and
        // push others in q2.
        while (this.q1.length != 1){
            this.q2.push(this.q1[0]);
            this.q1.shift();
        }
        
        // Pop the only left element
        // from q1f
        this.q1.shift();
        
        // swap the names of two queues
        this.q = this.q1;
        this.q1 = this.q2;
        this.q2 = this.q;
    }
    
    push(x) {
        // if no elements are there in q1
        this.q1.push(x);
    }
    
    top() {
        if (this.q1.length == 0)
            return -1;
        
        while (this.q1.length != 1) {
            this.q2.push(this.q1[0]);
            this.q1.shift();
        }
        
        // last pushed element
        let temp = this.q1[0];
        
        // to empty the auxiliary queue after
        // last operation
        this.q1.shift();
        
        // push last element to q2
        this.q2.push(temp);
        
        // swap the two queues names
        this.q = this.q1;
        this.q1 = this.q2;
        this.q2 = this.q;
        return temp;
    }

    size() {
        console.log(this.q1.length);
    }

    isEmpty() {
        // return true if the queue is empty.
        return this.q1.length == 0;
    }

    front() {
        return this.q1[0];
    }
}

// Driver code
let s = new Stack();
s.push(1);
s.push(2);
s.push(3);
console.log("current size: ");
s.size();
console.log(s.top());
s.pop();
console.log(s.top());
s.pop();
console.log(s.top());

console.log("current size: ");
s.size();

// This code is contributed by Susobhan Akhuli

Output
current size: 3
3
2
1
current size: 1

Time Complexity: 

  • Push operation: O(1), As, on each push operation the new element is added at the end of the Queue.
  • Pop operation: O(N), As, on each pop operation, all the elements are popped out from the Queue (q1) except the last element and pushed into the Queue (q2).

Auxiliary Space: O(N) since 2 queues are used.

Implement Stack using single queue:

Below is the idea to solve the problem:

Using only one queue and make the queue act as a Stack in modified way of the above discussed approach.

Follow the below steps to implement the idea: 

  • The idea behind this approach is to make one queue and push the first element in it. 
  • After the first element, we push the next element and then push the first element again and finally pop the first element. 
  • So, according to the FIFO rule of the queue, the second element that was inserted will be at the front and then the first element as it was pushed again later and its first copy was popped out. 
  • So, this acts as a Stack and we do this at every step i.e. from the initial element to the second last element, and the last element will be the one that we are inserting and since we will be pushing the initial elements after pushing the last element, our last element becomes the first element.

Below is the implementation for the above approach:

C++
#include <bits/stdc++.h>
using namespace std;

// Stack Class that acts as a queue
class Stack {

    queue<int> q;

public:
    void push(int data)
    {
        int s = q.size();

        // Push the current element
        q.push(data);

        // Pop all the previous elements and put them after
        // current element

        for (int i = 0; i < s; i++) {
            // Add the front element again
            q.push(q.front());

            // Delete front element
            q.pop();
        }
    }
    void pop()
    {
        if (q.empty())
            cout << "No elements\n";
        else
            q.pop();
    }
    int top() { return (q.empty()) ? -1 : q.front(); }
    int size() { return q.size(); }
    bool empty() { return (q.empty()); }
};

int main()
{
    Stack st;
    st.push(1);
    st.push(2);
    st.push(3);
    cout << "current size: " << st.size() << "\n";
    cout << st.top() << "\n";
    st.pop();
    cout << st.top() << "\n";
    st.pop();
    cout << st.top() << "\n";
    cout << "current size: " << st.size();
    return 0;
}
Java
import java.util.*;

/* Java Program to implement a stack
using only one queue */

class Stack {
    // One queue
    Queue<Integer> q1 = new LinkedList<Integer>();

    void push(int x)
    {
        //  Get previous size of queue
        int s = q1.size();

        // Push the current element
        q1.add(x);

        // Pop all the previous elements and put them after
        // current element
        for (int i = 0; i < s; i++) {
            q1.add(q1.remove());
        }
    }

    void pop()
    {
        // if no elements are there in q1
        if (q1.isEmpty())
            return;
        q1.remove();
    }

    int top()
    {
        if (q1.isEmpty())
            return -1;
        return q1.peek();
    }

    int size() { return q1.size(); }

    // driver code
    public static void main(String[] args)
    {
        Stack s = new Stack();
        s.push(1);
        s.push(2);
        s.push(3);

        System.out.println("current size: " + s.size());
        System.out.println(s.top());
        s.pop();
        System.out.println(s.top());
        s.pop();
        System.out.println(s.top());

        System.out.println("current size: " + s.size());
    }
}

// This code is contributed by Vishal Singh Shekhawat
Python
from _collections import deque

# Stack Class that acts as a queue


class Stack:
    def __init__(self):
        self.q = deque()

    # Push operation
    def push(self, data):
        # Get previous size of queue
        s = len(self.q)

        # Push the current element
        self.q.append(data)

        # Pop all the previous elements and put them after
        # current element
        for i in range(s):
            self.q.append(self.q.popleft())

    # Removes the top element
    def pop(self):
        if (not self.q):
            print("No elements")
        else:
            self.q.popleft()

    # Returns top of stack
    def top(self):
        if (not self.q):
            return
        return self.q[0]

    def size(self):
        return len(self.q)


if __name__ == '__main__':
    st = Stack()
    st.push(1)
    st.push(2)
    st.push(3)
    print("current size: ", st.size())
    print(st.top())
    st.pop()
    print(st.top())
    st.pop()
    print(st.top())
    print("current size: ", st.size())
C#
/* C# Program to implement a stack using only one queue */
using System;
using System.Collections;

class GfG {

  public class Stack
  {

    // One inbuilt queue
    public Queue q = new Queue();

    public void push(int x)
    {
      // Get previous size of queue
      int s = q.Count;

      // Push the current element
      q.Enqueue(x);

      // Pop all the previous elements and put them
      // afte current element
      for (int i = 0; i < s; i++) {
        // Add the front element again
        q.Enqueue(q.Peek());

        // Delete front element
        q.Dequeue();
      }
    }

    // Removes the top element
    public void pop()
    {
      // if no elements are there in q
      if (q.Count == 0)
        Console.WriteLine("No elements");
      else
        q.Dequeue();
    }

    // Returns top of stack
    public int top()
    {
      if (q.Count == 0)
        return -1;
      return (int)q.Peek();
    }

    public int size() { return q.Count; }
  };

  // Driver code
  public static void Main(String[] args)
  {
    Stack st = new Stack();
    st.push(1);
    st.push(2);
    st.push(3);
    Console.WriteLine("current size: " + st.size());
    Console.WriteLine(st.top());
    st.pop();
    Console.WriteLine(st.top());
    st.pop();
    Console.WriteLine(st.top());
    Console.WriteLine("current size: " + st.size());
  }
}

// This code is contributed by Susobhan Akhuli
JavaScript
/*Javascript Program to implement a stack using
only one queue */

// One inbuilt queue
class Stack {
    constructor() {
        this.q = [];
    }
    
    // Push operation
    push(data) {
        
        //  Get previous size of queue
        let s = this.q.length;
        
        // Push the current element
        this.q.push(data);
        
        // Pop all the previous elements and put them after
        // current element
        for (let i = 0; i < s; i++) {
            // Add the front element again
            this.q.push(this.q[0]);
            
            // Delete front element
            this.q.shift();

        }
    }
    
    // Removes the top element
    pop() {
        // if no elements are there in q1
        if (this.q.length == 0)
            console.log("No elements");
        else
            this.q.shift();
    }

    top() {
        if (this.q.length == 0)
            return -1;
        return this.q[0];
    }

    size() {
        console.log(this.q.length);
    }

    isEmpty() {
        // return true if the queue is empty.
        return this.q.length == 0;
    }

    front() {
        return this.q[0];
    }
}

// Driver code


let st = new Stack();
st.push(1);
st.push(2);
st.push(3);

console.log("current size: ");
st.size();
console.log(st.top());
st.pop();
console.log(st.top());
st.pop();
console.log(st.top());

console.log("current size: ");
st.size();

// This code is contributed by Susobhan Akhuli

Output
current size: 3
3
2
1
current size: 1

Time Complexity:

  • Push operation: O(N)
  • Pop operation: O(1)

Auxiliary Space: O(N) since 1 queue is used.




Previous Article
Next Article

Similar Reads

Array-Based Queues vs List-Based Queues
Queues:A queue is a linear data structure in which elements are inserted from one end called the rear end and deleted from another end called the front end. It follows FIFO (First In First Out) technique.Insertion in the queue is called enqueue and deletion in the queue is called dequeue.Queues can be implemented in two ways: Array-based queues and
3 min read
How to efficiently implement k Queues in a single array?
Introduction : One efficient way to implement k queues in a single array is to use a technique called "circular array implementation of k queues." This approach uses a single array to store elements for all k queues, and it divides the array into k segments, one for each queue. To implement this approach, we need to keep track of two pointers for e
15+ min read
Level order traversal line by line (Using Two Queues)
Given a Binary Tree, the task is to print the nodes level-wise, each level on a new line. Example: Input: Output:12 34 5 Approach: The idea is to use two queues to traverse in Level order manner. We will insert the first level in first queue and print it and while popping from the first queue insert its left and right nodes into the second queue. N
9 min read
Different Types of Queues and its Applications
Introduction : A Queue is a linear structure that follows a particular order in which the operations are performed. The order is First In First Out (FIFO). A good example of a queue is any queue of consumers for a resource where the consumer that came first is served first. In this article, the different types of queues are discussed. Types of Queu
8 min read
Introduction to Monotonic Queues
A monotonic queue is a data structure that supports efficient insertion, deletion, and retrieval of elements in a specific order, typically in increasing or decreasing order. The monotonic queue can be implemented using different data structures, such as a linked list, stack, or deque. The most common implementation is using a deque (double-ended q
8 min read
Python | Implementation of Queues in Multi-Threading
Prerequisites: Before reading this article, some important background reading is recommended to ensure that one is well equipped with the basic knowledge of threads as well as the basic knowledge of queues before trying to mix the two together. The official documentation is especially important. Topic Source 1 Source 2 Source 3 Queues Wikipedia Art
7 min read
How to implement a Stack using list in C++ STL
In this article, we will discuss how to implement a Stack using list in C++ STL. Stack is a linear data structure which follows. LIFO(Last In First Out) or FILO(First In Last Out). It mainly supports 4 major operations:1. Push: Push an element into the stack.2. Pop: Removes the element by following the LIFO order.3. Top: Returns the element present
3 min read
How to implement Stack and Queue using ArrayDeque in Java
ArrayDeque in Java The ArrayDeque in Java provides a way to apply resizable-array in addition to the implementation of the Deque interface. It is also known as Array Double Ended Queue or Array Deck. This is a special kind of array that grows and allows users to add or remove an element from both sides of the queue. ArrayDeque class implements Queu
6 min read
Implement Dynamic Multi Stack (K stacks) using only one Data Structure
In this article, we will see how to create a data structure that can handle multiple stacks with growable size. The data structure needs to handle three operations: push(x, stackNum) = pushes value x to the stack numbered stackNumpop(stackNum) = pop the top element from the stack numbered stackNumtop(stackNum) = shows the topmost element of the sta
15+ min read
Implement a stack using single queue
We are given queue data structure, the task is to implement stack using only given queue data structure.We have discussed a solution that uses two queues. In this article, a new solution is discussed that uses only one queue. This solution assumes that we can find size of queue at any point. The idea is to keep newly inserted element always at fron
6 min read
Implement Stack using Array
Stack is a linear data structure which follows LIFO principle. In this article, we will learn how to implement Stack using Arrays. In Array-based approach, all stack-related operations are executed using arrays. Let’s see how we can implement each operation on the stack utilizing the Array Data Structure. Implement Stack using Array:To implement a
9 min read
How to implement stack using priority queue or heap?
How to Implement stack using a priority queue(using min heap)? Asked In: Microsoft, Adobe.  Solution: In the priority queue, we assign priority to the elements that are being pushed. A stack requires elements to be processed in the Last in First Out manner. The idea is to associate a count that determines when it was pushed. This count works as a k
6 min read
Implement Stack and Queue using Deque
Deque also known as double ended queue, as name suggests is a special kind of queue in which insertions and deletions can be done at the last as well as at the beginning. A link-list representation of deque is such that each node points to the next node as well as the previous node. So that insertion and deletions take constant time at both the beg
15 min read
Implement a stack using singly linked list
To implement a stack using the singly linked list concept, all the singly linked list operations should be performed based on Stack operations LIFO(last in first out) and with the help of that knowledge, we are going to implement a stack using a singly linked list.  So we need to follow a simple rule in the implementation of a stack which is last i
15+ min read
Sort a stack using a temporary stack
Given a stack of integers, sort it in ascending order using another temporary stack. Examples: Input : [34, 3, 31, 98, 92, 23] Output : [3, 23, 31, 34, 92, 98] Input : [3, 5, 1, 4, 2, 8] Output : [1, 2, 3, 4, 5, 8] Recommended PracticeSort a stackTry It! Algorithm: Create a temporary stack say tmpStack.While input stack is NOT empty do this: Pop an
6 min read
Find maximum in stack in O(1) without using additional stack in Python
The task is to design a stack which can get the maximum value in the stack in O(1) time without using an additional stack in Python. Examples: Input: Consider the following SpecialStack 16 –> TOP29151918When getMax() is called it should return 29, which is the maximum element in the current stack. If we do pop two times on stack, the stack becom
3 min read
Most efficient way to implement Stack and Queue together
Introduction to Stack:A stack is a linear data structure in computer science that follows the Last-In-First-Out (LIFO) principle. It is a data structure in which the insertion and removal of elements can only be performed at one end, which is called the top of the stack.In a stack, elements are pushed onto the top of the stack, and elements are pop
15+ min read
Design and Implement Special Stack Data Structure | Added Space Optimized Version
Question: Design a Data Structure SpecialStack that supports all the stack operations like push(), pop(), isEmpty(), isFull() and an additional operation getMin() which should return minimum element from the SpecialStack. All these operations of SpecialStack must be O(1). To implement SpecialStack, you should only use standard Stack data structure
15+ min read
Stack Permutations (Check if an array is stack permutation of other)
A stack permutation is a permutation of objects in the given input queue which is done by transferring elements from the input queue to the output queue with the help of a stack and the built-in push and pop functions. The rules are: Only dequeue from the input queue.Use inbuilt push, and pop functions in the single stack.Stack and input queue must
15+ min read
Reversing a Stack with the help of another empty Stack
Given a Stack consisting of N elements, the task is to reverse the Stack using an extra stack. Examples: Input: stack = {1, 2, 3, 4, 5} Output: 1 2 3 4 5 Explanation: Input Stack: 5 4 3 2 1 Reversed Stack: 1 2 3 4 5 Input: stack = {1, 3, 5, 4, 2} Output: 1 3 5 4 2 Approach 1: Follow the steps below to solve the problem: Initialize an empty stack.Po
8 min read
Implement random-0-6-Generator using the given random-0-1-Generator
Given a function random01Generator() that gives you randomly either 0 or 1, implement a function that utilizes this function and generate numbers between 0 and 6(both inclusive). All numbers should have same probabilities of occurrence. Examples: on multiple runs, it gives 3 2 3 6 0 Approach : The idea here is to find the range of the smallest numb
5 min read
Implement dynamic deque using templates class and a circular array
The task is to implement a dynamic Deque using templates class and a circular array, having the following functionalities: front(): Get the front item from the deque.back(): Get the last item from the deque.push_back(X): Push X at the end of the deque.push_front(X): Push X at the start of the deque.pop_front(): Delete an element from the start of t
9 min read
Program to implement Inverse Interpolation using Lagrange Formula
Given task is to find the value of x for a given y of an unknown function y = f(x) where values of some points (x, y) pairs are given.Let, y = f(x) be an unknown function where x in an independent variable. For different values of x, say [Tex]x_0, x_1, x_2, ..., x_m ( i.e [/Tex][Tex]x_k, k=0, 1, 2, 3...m) [/Tex]values of respective [Tex]y_0, y_1, y
8 min read
Implement a Dictionary using Trie
Implement a dictionary using Trie such that if the input is a string representing a word, the program prints its meaning from the prebuilt dictionary. Examples: Input: str = "map" Output: a diagrammatic representation of an area Input: str = "language" Output: the method of human communication Approach: We can use a Trie to efficiently store string
9 min read
Implement dynamic queue using templates class and a circular array
In this article, we will discuss how to create a dynamic circular queue using a circular array having the following functionality: Front(): Get the front item from the queue.Back(): Get the last item from the queue.Push(X): Push the X in the queue at the end of the queue.Pop(): Delete an element from the queue. Below is the step-by-step illustratio
7 min read
How to implement Priority Queue - using Heap or Array?
A Priority Queue is a data structure that allows you to insert elements with a priority, and retrieve the element with the highest priority. You can implement a priority queue using either an array or a heap. Both array and heap-based implementations of priority queues have their own advantages and disadvantages. Arrays are generally easier to impl
15+ min read
Program to implement Run Length Encoding using Linked Lists
Given a Linked List as the input. The task is to encode the given linked list using Run Length Encoding. That is, to replace a block of contiguous characters by the character followed by it's count. For Example, in Run Length Encoding "a->a->a->a->a" will be replaced by "a->5". Note: For non-repeating nodes, do not append count 1. Fo
15+ min read
Implement rand3() using rand2()
Given a function rand2() that returns 0 or 1 with equal probability, implement rand3() using rand2() that returns 0, 1 or 2 with equal probability. Minimize the number of calls to rand2() method. Also, use of any other library function and floating point arithmetic are not allowed. The idea is to use expression 2 * rand2() + rand2(). It returns 0,
6 min read
Implement *, - and / operations using only + arithmetic operator
Given two numbers, perform multiplication, subtraction, and division operations on them, using '+' arithmetic operator only. Operations can be performed as follows: Subtraction :- a - b = a + (-1)*b. Multiplication :- a * b = a + a + a ... b times. Division :- a / b = continuously subtract b from a and count how many times we can do that. The above
12 min read
Implement a parallel programming task using graphs
Given a weighted directed graph with N nodes and M edges along with a source node S, use Parallel Programming to find the shortest distance from the source node S to all other nodes in the graph. The graph is given as an edge list edges[][] where for each index i, there is an edge from edges[i][0] to edges[i][1] with weight edges[i][2]. Example: In
11 min read