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