Intercalar la primera mitad de la cola con la segunda mitad – Part 1

Dada una cola de enteros de longitud uniforme, reordene los elementos intercalando la primera mitad de la cola con la segunda mitad de la cola.  

Ejemplos:

C++

// C++ program to interleave the first half of the queue
// with the second half
#include <bits/stdc++.h>
using namespace std;
 
// Function to interleave the queue
void interLeaveQueue(queue<int>& q)
{
    // To check the even number of elements
    if (q.size() % 2 != 0)
        cout << "Input even number of integers." << endl;
 
    // Initialize an empty stack of int type
    stack<int> s;
    int halfSize = q.size() / 2;
 
    // Push first half elements into the stack
    // queue:16 17 18 19 20, stack: 15(T) 14 13 12 11
    for (int i = 0; i < halfSize; i++) {
        s.push(q.front());
        q.pop();
    }
 
    // enqueue back the stack elements
    // queue: 16 17 18 19 20 15 14 13 12 11
    while (!s.empty()) {
        q.push(s.top());
        s.pop();
    }
 
    // dequeue the first half elements of queue
    // and enqueue them back
    // queue: 15 14 13 12 11 16 17 18 19 20
    for (int i = 0; i < halfSize; i++) {
        q.push(q.front());
        q.pop();
    }
 
    // Again push the first half elements into the stack
    // queue: 16 17 18 19 20, stack: 11(T) 12 13 14 15
    for (int i = 0; i < halfSize; i++) {
        s.push(q.front());
        q.pop();
    }
 
    // interleave the elements of queue and stack
    // queue: 11 16 12 17 13 18 14 19 15 20
    while (!s.empty()) {
        q.push(s.top());
        s.pop();
        q.push(q.front());
        q.pop();
    }
}
 
// Driver program to test above function
int main()
{
    queue<int> q;
    q.push(11);
    q.push(12);
    q.push(13);
    q.push(14);
    q.push(15);
    q.push(16);
    q.push(17);
    q.push(18);
    q.push(19);
    q.push(20);
    interLeaveQueue(q);
    int length = q.size();
    for (int i = 0; i < length; i++) {
        cout << q.front() << " ";
        q.pop();
    }
    return 0;
}

Java

// Java program to interleave
// the first half of the queue
// with the second half
import java.util.*;
 
class GFG {
 
    // Function to interleave the queue
    static void interLeaveQueue(Queue<Integer> q)
    {
        // To check the even number of elements
        if (q.size() % 2 != 0)
            System.out.println(
                "Input even number of integers.");
 
        // Initialize an empty stack of int type
        Stack<Integer> s = new Stack<>();
        int halfSize = q.size() / 2;
 
        // Push first half elements into the stack
        // queue:16 17 18 19 20, stack: 15(T) 14 13 12 11
        for (int i = 0; i < halfSize; i++) {
            s.push(q.peek());
            q.poll();
        }
 
        // enqueue back the stack elements
        // queue: 16 17 18 19 20 15 14 13 12 11
        while (!s.empty()) {
            q.add(s.peek());
            s.pop();
        }
 
        // dequeue the first half elements of queue
        // and enqueue them back
        // queue: 15 14 13 12 11 16 17 18 19 20
        for (int i = 0; i < halfSize; i++) {
            q.add(q.peek());
            q.poll();
        }
 
        // Again push the first half elements into the stack
        // queue: 16 17 18 19 20, stack: 11(T) 12 13 14 15
        for (int i = 0; i < halfSize; i++) {
            s.push(q.peek());
            q.poll();
        }
 
        // interleave the elements of queue and stack
        // queue: 11 16 12 17 13 18 14 19 15 20
        while (!s.empty()) {
            q.add(s.peek());
            s.pop();
            q.add(q.peek());
            q.poll();
        }
    }
 
    // Driver code
    public static void main(String[] args)
    {
        Queue<Integer> q = new java.util.LinkedList<>();
        q.add(11);
        q.add(12);
        q.add(13);
        q.add(14);
        q.add(15);
        q.add(16);
        q.add(17);
        q.add(18);
        q.add(19);
        q.add(20);
        interLeaveQueue(q);
        int length = q.size();
        for (int i = 0; i < length; i++) {
            System.out.print(q.peek() + " ");
            q.poll();
        }
    }
}
 
// This code contributed by Rajput-Ji

Python3

# Python3 program to interleave the first
# half of the queue with the second half
from queue import Queue
 
# Function to interleave the queue
 
 
def interLeaveQueue(q):
 
    # To check the even number of elements
    if (q.qsize() % 2 != 0):
        print("Input even number of integers.")
 
    # Initialize an empty stack of int type
    s = []
    halfSize = int(q.qsize() / 2)
 
    # put first half elements into
    # the stack queue:16 17 18 19 20,
    # stack: 15(T) 14 13 12 11
    for i in range(halfSize):
        s.append(q.queue[0])
        q.get()
 
    # enqueue back the stack elements
    # queue: 16 17 18 19 20 15 14 13 12 11
    while len(s) != 0:
        q.put(s[-1])
        s.pop()
 
    # dequeue the first half elements of
    # queue and enqueue them back
    # queue: 15 14 13 12 11 16 17 18 19 20
    for i in range(halfSize):
        q.put(q.queue[0])
        q.get()
 
    # Again put the first half elements into
    # the stack queue: 16 17 18 19 20,
    # stack: 11(T) 12 13 14 15
    for i in range(halfSize):
        s.append(q.queue[0])
        q.get()
 
    # interleave the elements of queue and stack
    # queue: 11 16 12 17 13 18 14 19 15 20
    while len(s) != 0:
        q.put(s[-1])
        s.pop()
        q.put(q.queue[0])
        q.get()
 
 
# Driver Code
if __name__ == '__main__':
    q = Queue()
    q.put(11)
    q.put(12)
    q.put(13)
    q.put(14)
    q.put(15)
    q.put(16)
    q.put(17)
    q.put(18)
    q.put(19)
    q.put(20)
    interLeaveQueue(q)
    length = q.qsize()
    for i in range(length):
        print(q.queue[0], end=" ")
        q.get()
 
# This code is contributed by PranchalK

C#

// C# program to interleave
// the first half of the queue
// with the second half
using System;
using System.Collections.Generic;
 
class GFG {
 
    // Function to interleave the queue
    static void interLeaveQueue(Queue<int> q)
    {
        // To check the even number of elements
        if (q.Count % 2 != 0)
            Console.WriteLine(
                "Input even number of integers.");
 
        // Initialize an empty stack of int type
        Stack<int> s = new Stack<int>();
        int halfSize = q.Count / 2;
 
        // Push first half elements into the stack
        // queue:16 17 18 19 20, stack: 15(T) 14 13 12 11
        for (int i = 0; i < halfSize; i++) {
            s.Push(q.Peek());
            q.Dequeue();
        }
 
        // enqueue back the stack elements
        // queue: 16 17 18 19 20 15 14 13 12 11
        while (s.Count != 0) {
            q.Enqueue(s.Peek());
            s.Pop();
        }
 
        // dequeue the first half elements of queue
        // and enqueue them back
        // queue: 15 14 13 12 11 16 17 18 19 20
        for (int i = 0; i < halfSize; i++) {
            q.Enqueue(q.Peek());
            q.Dequeue();
        }
 
        // Again push the first half elements into the stack
        // queue: 16 17 18 19 20, stack: 11(T) 12 13 14 15
        for (int i = 0; i < halfSize; i++) {
            s.Push(q.Peek());
            q.Dequeue();
        }
 
        // interleave the elements of queue and stack
        // queue: 11 16 12 17 13 18 14 19 15 20
        while (s.Count != 0) {
            q.Enqueue(s.Peek());
            s.Pop();
            q.Enqueue(q.Peek());
            q.Dequeue();
        }
    }
 
    // Driver code
    public static void Main(String[] args)
    {
        Queue<int> q = new Queue<int>();
        q.Enqueue(11);
        q.Enqueue(12);
        q.Enqueue(13);
        q.Enqueue(14);
        q.Enqueue(15);
        q.Enqueue(16);
        q.Enqueue(17);
        q.Enqueue(18);
        q.Enqueue(19);
        q.Enqueue(20);
        interLeaveQueue(q);
        int length = q.Count;
        for (int i = 0; i < length; i++) {
            Console.Write(q.Peek() + " ");
            q.Dequeue();
        }
    }
}
 
// This code is contributed by Princi Singh

Javascript

<script>
 
// JavaScript program to interleave the first
// half of the queue with the second half
 
// Function to interleave the queue
function interLeaveQueue(q){
     
    // To check the even number of elements
    if (q.length % 2 != 0)
        document.write("Inpush even number of integers.")
 
    // Initialize an empty stack of int type
    let s = []
    let halfSize = Math.floor(q.length / 2)
 
    // push first half elements into
    // the stack queue:16 17 18 19 20,
    // stack: 15(T) 14 13 12 11
    for(let i = 0; i < halfSize; i++)
        s.push(q.shift())
 
    // enqueue back the stack elements
    // queue: 16 17 18 19 20 15 14 13 12 11
    while(s.length != 0){
        q.push(s[s.length-1])
        s.pop()
    }
 
    // dequeue the first half elements of
    // queue and enqueue them back
    // queue: 15 14 13 12 11 16 17 18 19 20
    for(let i = 0; i < halfSize; i++)
        q.push(q.shift())
 
    // Again push the first half elements into
    // the stack queue: 16 17 18 19 20,
    // stack: 11(T) 12 13 14 15
    for(let i = 0; i < halfSize; i++)
        s.push(q.shift())
 
    // interleave the elements of queue and stack
    // queue: 11 16 12 17 13 18 14 19 15 20
    while(s.length != 0){
        q.push(s[s.length-1])
        s.pop()
        q.push(q.shift())
    }
}
 
// Driver Code
 
let q =[]
q.push(11)
q.push(12)
q.push(13)
q.push(14)
q.push(15)
q.push(16)
q.push(17)
q.push(18)
q.push(19)
q.push(20)
interLeaveQueue(q)
let length = q.length
for(let i=0;i<length;i++)
    document.write(q.shift()," ")
 
// This code is contributed by shinjanpatra
 
</script>

C++

// C++ program to interleave the first half of the queue
// with the second half using queue
#include <bits/stdc++.h>
using namespace std;
 
// Function to interleave the queue
void interLeaveQueue(queue<int>& q)
{
    // To check the even number of elements
    if (q.size() % 2 != 0)
        cout << "Input even number of integers." << endl;
 
    // Initialize an empty queue of int type
    queue<int> temp;
    int halfSize = q.size() / 2;
 
    // Push first half elements into the stack
    // queue:16 17 18 19 20, queue: 11 12 13 14 15
    for (int i = 0; i < halfSize; i++) {
        temp.push(q.front());
        q.pop();
    }
 
    // enqueue back the queue elements alternatively
    // queue: 11 16 12 17 13 18 14 19 15 20
    while (!temp.empty()) {
        q.push(temp.front());
        q.push(q.front());
        q.pop();
        temp.pop();
    }
}
 
// Driver program to test above function
int main()
{
    queue<int> q;
    q.push(11);
    q.push(12);
    q.push(13);
    q.push(14);
    q.push(15);
    q.push(16);
    q.push(17);
    q.push(18);
    q.push(19);
    q.push(20);
    interLeaveQueue(q);
    int length = q.size();
    for (int i = 0; i < length; i++) {
        cout << q.front() << " ";
        q.pop();
    }
    return 0;
}

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *