Dada una cola q[] y un entero K, la tarea es definir un método para eliminar un elemento específico de la cola q[] . Si hay varias apariciones del elemento K, elimine la primera de la cola q[].
Ejemplos:
Entrada: q[] = {10, 20, 30, 40, 50, 60}, K = 30
Salida: {10, 20, 40, 50, 60}
Explicación: después de eliminar 30, la cola se convierte en {10, 20 , 40, 50, 60}.Entrada: q[] = {1, 2, 3, 3}, K = 3
Salida: {1, 2, 3}
Explicación: Después de eliminar la primera aparición de 3, la cola se convierte en {1, 2, 3}.
Enfoque: La idea es crear una cola temporal ref[] y almacenar todos los elementos en ella, hasta que se encuentre K. Luego, elimine K de la cola original q[] e inserte los elementos restantes nuevamente en la cola q[]. Siga los pasos a continuación para resolver el problema:
- Inicialice una referencia de cola auxiliar para almacenar los elementos de la cola q[] temporalmente.
- Inicialice las variables s como el tamaño de la cola q[] y cnt como 0 para almacenar el recuento de números enviados a la cola auxiliar ref[].
- Iterar en un ciclo while hasta que la cola q[] no esté vacía y el frente de la cola no sea igual al elemento deseado K:
- Si la cola q[] está vacía, entonces el elemento K no está presente en la cola q[], así que imprima “elemento no encontrado!!” y realice los siguientes pasos:
- Iterar en un ciclo while hasta que la cola ref[] no esté vacía:
- De lo contrario, se encuentra el elemento, así que elimine un elemento de la cola q[] y realice los siguientes pasos:
- Iterar en un ciclo while hasta que la cola ref[] no esté vacía:
- Inicialice la variable k como s-cnt-1 para marcar el número de elementos necesarios para salir de la cola q[] y volver a poner en cola en la cola q [].
- Iterar en un ciclo while hasta que K sea mayor que 0 y realizar los siguientes pasos:
- Después de realizar los pasos anteriores, imprima los elementos de la cola q[].
A continuación se muestra la implementación del enfoque anterior.
C++
// C++ program for the above approach. #include <bits/stdc++.h> using namespace std; // Function to remove an element from // the queue void remove(int t, queue<int>& q) { // Helper queue to store the elements // temporarily. queue<int> ref; int s = q.size(); int cnt = 0; // Finding the value to be removed while (q.front() != t and !q.empty()) { ref.push(q.front()); q.pop(); cnt++; } // If element is not found if (q.empty()) { cout << "element not found!!" << endl; while (!ref.empty()) { // Pushing all the elements back into q q.push(ref.front()); ref.pop(); } } // If element is found else { q.pop(); while (!ref.empty()) { // Pushing all the elements back into q q.push(ref.front()); ref.pop(); } int k = s - cnt - 1; while (k--) { // Pushing elements from front of q to its back int p = q.front(); q.pop(); q.push(p); } } } // Function to print all the elements // of the queue. void print(queue<int> qr) { while (!qr.empty()) { cout << qr.front() << " "; qr.pop(); } cout << endl; } // Driver Code int main() { queue<int> q; // Pushing into the queue q.push(10); q.push(20); q.push(30); q.push(40); q.push(50); q.push(60); print(q); // Removing 39 from the queue remove(39, q); print(q); // Removing 30 from the queue remove(30, q); print(q); return 0; }
Java
// Java program for the above approach. import java.util.*; class GFG{ // Function to remove an element from // the queue static Queue<Integer> q; static void remove(int t) { // Helper queue to store the elements // temporarily. Queue<Integer> ref = new LinkedList<>(); int s = q.size(); int cnt = 0; // Finding the value to be removed while (!q.isEmpty() && q.peek() != t) { ref.add(q.peek()); q.remove(); cnt++; } // If element is not found if (q.isEmpty()) { System.out.print("element not found!!" +"\n"); while (!ref.isEmpty()) { // Pushing all the elements back into q q.add(ref.peek()); ref.remove(); } } // If element is found else { q.remove(); while (!ref.isEmpty()) { // Pushing all the elements back into q q.add(ref.peek()); ref.remove(); } int k = s - cnt - 1; while (k-- >0) { // Pushing elements from front of q to its back int p = q.peek(); q.remove(); q.add(p); } } } // Function to print all the elements // of the queue. static void print() { Queue<Integer> qr = new LinkedList<>(q); while (!qr.isEmpty()) { System.out.print(qr.peek()+ " "); qr.remove(); } System.out.println(); } // Driver Code public static void main(String[] args) { q = new LinkedList<>(); // Pushing into the queue q.add(10); q.add(20); q.add(30); q.add(40); q.add(50); q.add(60); print(); // Removing 39 from the queue remove(39); print(); // Removing 30 from the queue remove(30); print(); } } // This code is contributed by 29AjayKumar
C#
// C# program for the above approach. using System; using System.Collections; public class GFG{ // Function to remove an element from // the queue static Queue q = new Queue(); static void remove_(int t) { // Helper queue to store the elements // temporarily. Queue reff = new Queue(); int s = q.Count; int cnt = 0; // Finding the value to be removed while ((int)q.Count != 0 && (int)q.Peek() != t) { reff.Enqueue(q.Peek()); q.Dequeue(); cnt++; } // If element is not found if (q.Count == 0) { Console.WriteLine("element not found!!"); while (reff.Count != 0) { // Pushing all the elements back into q q.Enqueue(reff.Peek()); reff.Dequeue(); } } // If element is found else { q.Dequeue(); while (reff.Count != 0) { // Pushing all the elements back into q q.Enqueue(reff.Peek()); reff.Dequeue(); } int k = s - cnt - 1; while (k-- >0) { // Pushing elements from front of q to its back int p = (int)q.Peek(); q.Dequeue(); q.Enqueue(p); } } } // Function to print all the elements // of the queue. static void print() { Queue qr = (Queue)q.Clone(); while (qr.Count != 0) { Console.Write(qr.Peek()+ " "); qr.Dequeue(); } Console.WriteLine(); } // Driver Code static public void Main (){ // Pushing into the queue q.Enqueue(10); q.Enqueue(20); q.Enqueue(30); q.Enqueue(40); q.Enqueue(50); q.Enqueue(60); print(); // Removing 39 from the queue remove_(39); print(); // Removing 30 from the queue remove_(30); print(); } } // This code is contributed by Dharanendra L V.
10 20 30 40 50 60 element not found!! 10 20 30 40 50 60 10 20 40 50 60
Complejidad temporal: O(N)
Espacio auxiliar: O(N)
Publicación traducida automáticamente
Artículo escrito por adityamutharia y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA