Compruebe si una cola se puede ordenar en otra cola usando una pila

Dada una cola que consta de los primeros n números naturales (en orden aleatorio). La tarea es verificar si los elementos de la Cola dados se pueden organizar en orden creciente en otra Cola usando una pila. Las operaciones permitidas son: 
1. Empujar y sacar elementos de la pila 
2. Sacar (o sacar) de la cola dada. 
3. Presione (O Enqueue) en la otra cola.

Ejemplos:

C++

// CPP Program to check if a queue of first 
// n natural number can be sorted using a stack
#include <bits/stdc++.h>
using namespace std;
  
// Function to check if given queue element 
// can be sorted into another queue using a
// stack.
bool checkSorted(int n, queue<int>& q)
{
    stack<int> st;
    int expected = 1;
    int fnt;
  
    // while given Queue is not empty.
    while (!q.empty()) {
        fnt = q.front();
        q.pop();
  
        // if front element is the expected element
        if (fnt == expected)
            expected++;
  
        else {
            // if stack is empty, push the element
            if (st.empty()) {
                st.push(fnt);
            }
  
            // if top element is less than element which
            // need to be pushed, then return false.
            else if (!st.empty() && st.top() < fnt) {
                return false;
            }
  
            // else push into the stack.
            else
                st.push(fnt);
        }
  
        // while expected element are coming from
        // stack, pop them out.
        while (!st.empty() && st.top() == expected) {
            st.pop();
            expected++;
        }
    }
  
    // if the final expected element value is equal
    // to initial Queue size and the stack is empty.
    if (expected - 1 == n && st.empty())
        return true;
  
    return false;
}
  
// Driven Program
int main()
{
    queue<int> q;
    q.push(5);
    q.push(1);
    q.push(2);
    q.push(3);
    q.push(4);
  
    int n = q.size();
  
    (checkSorted(n, q) ? (cout << "Yes") :
                         (cout << "No"));
  
    return 0;
}

Java

// Java Program to check if a queue 
// of first n natural number can
// be sorted using a stack
import java.io.*;
import java.util.*;
  
class GFG
{
    static Queue<Integer> q = 
                    new LinkedList<Integer>();
      
    // Function to check if given 
    // queue element can be sorted 
    // into another queue using a stack.
    static boolean checkSorted(int n)
    {
        Stack<Integer> st = 
                    new Stack<Integer>();
        int expected = 1;
        int fnt;
      
        // while given Queue
        // is not empty.
        while (q.size() != 0) 
        {
            fnt = q.peek();
            q.poll();
      
            // if front element is 
            // the expected element
            if (fnt == expected)
                expected++;
      
            else
            {
                // if stack is empty, 
                // push the element
                if (st.size() == 0) 
                {
                    st.push(fnt);
                }
      
                // if top element is less than 
                // element which need to be 
                // pushed, then return false.
                else if (st.size() != 0 && 
                         st.peek() < fnt) 
                {
                    return false;
                }
      
                // else push into the stack.
                else
                    st.push(fnt);
            }
      
            // while expected element are
            // coming from stack, pop them out.
            while (st.size() != 0 && 
                   st.peek() == expected) 
            {
                st.pop();
                expected++;
            }
        }
          
        // if the final expected element 
        // value is equal to initial Queue
        // size and the stack is empty.
        if (expected - 1 == n && 
                st.size() == 0)
            return true;
      
        return false;
    }
      
    // Driver Code
    public static void main(String args[])
    {
        q.add(5);
        q.add(1);
        q.add(2);
        q.add(3);
        q.add(4);
      
        int n = q.size();
  
        if (checkSorted(n))
            System.out.print("Yes");
        else
            System.out.print("No");
    }
}
  
// This code is contributed by 
// Manish Shaw(manishshaw1)

Python3

# Python Program to check if a queue of first 
# n natural number can be sorted using a stack 
from queue import Queue 
  
# Function to check if given queue element 
# can be sorted into another queue using a 
# stack. 
def checkSorted(n, q):
    st = [] 
    expected = 1
    fnt = None
  
    # while given Queue is not empty. 
    while (not q.empty()): 
        fnt = q.queue[0] 
        q.get() 
  
        # if front element is the 
        # expected element 
        if (fnt == expected): 
            expected += 1
  
        else:
              
            # if stack is empty, put the element 
            if (len(st) == 0):
                st.append(fnt)
  
            # if top element is less than element which 
            # need to be puted, then return false. 
            elif (len(st) != 0 and st[-1] < fnt): 
                return False
  
            # else put into the stack. 
            else:
                st.append(fnt)
  
        # while expected element are coming 
        # from stack, pop them out. 
        while (len(st) != 0 and 
                   st[-1] == expected): 
            st.pop() 
            expected += 1
  
    # if the final expected element value is equal 
    # to initial Queue size and the stack is empty. 
    if (expected - 1 == n and len(st) == 0): 
        return True
  
    return False
  
# Driver Code
if __name__ == '__main__':
    q = Queue()
    q.put(5) 
    q.put(1) 
    q.put(2) 
    q.put(3) 
    q.put(4) 
  
    n = q.qsize() 
  
    if checkSorted(n, q):
        print("Yes")
    else:
        print("No")
  
# This code is contributed by PranchalK

C#

// C# Program to check if a queue 
// of first n natural number can
// be sorted using a stack
using System;
using System.Linq;
using System.Collections.Generic;
  
class GFG
{
    // Function to check if given 
    // queue element can be sorted 
    // into another queue using a stack.
    static bool checkSorted(int n, 
                            ref Queue<int> q)
    {
        Stack<int> st = new Stack<int>();
        int expected = 1;
        int fnt;
      
        // while given Queue
        // is not empty.
        while (q.Count != 0) 
        {
            fnt = q.Peek();
            q.Dequeue();
      
            // if front element is 
            // the expected element
            if (fnt == expected)
                expected++;
      
            else 
            {
                // if stack is empty, 
                // push the element
                if (st.Count == 0) 
                {
                    st.Push(fnt);
                }
      
                // if top element is less than 
                // element which need to be 
                // pushed, then return false.
                else if (st.Count != 0 && 
                         st.Peek() < fnt) 
                {
                    return false;
                }
      
                // else push into the stack.
                else
                    st.Push(fnt);
            }
      
            // while expected element are
            // coming from stack, pop them out.
            while (st.Count != 0 && 
                   st.Peek() == expected) 
            {
                st.Pop();
                expected++;
            }
        }
        // if the final expected element 
        // value is equal to initial Queue
        // size and the stack is empty.
        if (expected - 1 == n && 
                st.Count == 0)
            return true;
      
        return false;
    }
      
    // Driver Code
    static void Main()
    {
        Queue<int> q = new Queue<int>();
        q.Enqueue(5);
        q.Enqueue(1);
        q.Enqueue(2);
        q.Enqueue(3);
        q.Enqueue(4);
      
        int n = q.Count;
  
        if (checkSorted(n, ref q))
            Console.Write("Yes");
        else
            Console.Write("No");
    }
}
  
// This code is contributed by 
// Manish Shaw(manishshaw1)

Javascript

<script>
    // Javascript Program to check if a queue
    // of first n natural number can
    // be sorted using a stack
      
    let q = [];
       
    // Function to check if given
    // queue element can be sorted
    // into another queue using a stack.
    function checkSorted(n)
    {
        let st = [];
        let expected = 1;
        let fnt;
       
        // while given Queue
        // is not empty.
        while (q.length != 0)
        {
            fnt = q[0];
            q.shift();
       
            // if front element is
            // the expected element
            if (fnt == expected)
                expected++;
       
            else
            {
                // if stack is empty,
                // push the element
                if (st.length == 0)
                {
                    st.push(fnt);
                }
       
                // if top element is less than
                // element which need to be
                // pushed, then return false.
                else if (st.length != 0 &&
                         st[st.length - 1] < fnt)
                {
                    return false;
                }
       
                // else push into the stack.
                else
                    st.push(fnt);
            }
       
            // while expected element are
            // coming from stack, pop them out.
            while (st.length != 0 &&
                   st[st.length - 1] == expected)
            {
                st.pop();
                expected++;
            }
        }
           
        // if the final expected element
        // value is equal to initial Queue
        // size and the stack is empty.
        if ((expected - 1) == n && st.length == 0)
            return true;
       
        return false;
    }
      
    q.push(5);
    q.push(1);
    q.push(2);
    q.push(3);
    q.push(4);
  
    let n = q.length;
  
    if (checkSorted(n))
      document.write("Yes");
    else
      document.write("No");
     
   // This code is contributed by suresh07.
</script>

Publicación traducida automáticamente

Artículo escrito por anuj0503 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *