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. Solo se nos permite usar la estructura de datos de la cola.
Ejemplos:
Input : 1 2 3 4 Output : 1 3 2 4 Input : 11 12 13 14 15 16 17 18 19 20 Output : 11 16 12 17 13 18 14 19 15 20
Cree dos colas auxiliares q1 y q2. Inserte la primera mitad en una cola q1 y la otra mitad en otra cola q2. Ahora inserte elementos nuevamente en la cola dada seleccionándolos de q1 y q2 alternativamente.
CPP
// CPP program to interleave queue elements // using only queue data structure. #include <bits/stdc++.h> using namespace std; void interleave(queue<int> &q) { queue<int> q1, q2; int n = q.size(); // Insert first half in q1 for (int i = 0; i < n / 2; i++) { q1.push(q.front()); q.pop(); } // insert second half in q2 for (int i = 0; i < n / 2; i++) { q2.push(q.front()); q.pop(); } // Insert elements of q1 and q2 back // to q in alternate order. for (int i = 0; i < n/2; i++) { q.push(q1.front()); q1.pop(); q.push(q2.front()); q2.pop(); } } // Driver code int main() { // Creating an example queue with 10 // elements. queue<int> q; for (int i = 1; i <= 10; i++) q.push(i); interleave(q); // Printing queue elements int n = q.size(); for (int i = 0; i < n; i++) { cout << q.front() << " "; q.pop(); } }
Java
// Java program to interleave queue elements // using only queue data structure. import java.util.LinkedList; import java.util.Queue; public class GFG { static void interleave(Queue<Integer> q) { Queue<Integer> q1, q2; q1 = new LinkedList<Integer>(); q2 = new LinkedList<Integer>(); int n = q.size(); // Insert first half in q1 for (int i = 0; i < n / 2; i++) { q1.add(q.peek()); q.poll(); } // insert second half in q2 for (int i = 0; i < n / 2; i++) { q2.add(q.peek()); q.poll(); } // Insert elements of q1 and q2 back // to q in alternate order. for (int i = 0; i < n / 2; i++) { q.add(q1.peek()); q1.poll(); q.add(q2.peek()); q2.poll(); } } // Driver code public static void main(String[] args) { // Creating an example queue with 10 // elements. Queue<Integer> q = new LinkedList<Integer>(); for (int i = 1; i <= 10; i++) q.add(i); interleave(q); // Printing queue elements int n = q.size(); for (int i = 0; i < n; i++) { System.out.print(q.peek() + " "); q.poll(); } } } // This code is contributed by jainlovely450
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): # Initialize an empty stack of int type q1 = Queue() q2 = Queue() halfSize = int(q.qsize() / 2) # Insert first half in q1 for i in range(halfSize): q1.put(q.queue[0]) q.get() # Insert second half in q2 for i in range(halfSize): q2.put(q.queue[0]) q.get() # Insert elements of q1 and q2 back # to q in alternate order for i in range(halfSize): q.put(q1.queue[0]) q1.get() q.put(q2.queue[0]) q2.get() # Driver Code if __name__ == '__main__': q = Queue() q.put(1) q.put(2) q.put(3) q.put(4) q.put(5) q.put(6) q.put(7) q.put(8) q.put(9) q.put(10) interLeaveQueue(q) length = q.qsize() for i in range(length): print(q.queue[0], end=" ") q.get() # This code is contributed by jainlovely450
Producción:
1 6 2 7 3 8 4 9 5 10
Vídeo aportado por Parul Shandilya
Publicación traducida automáticamente
Artículo escrito por AbhishekGoel1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA