elimina_valor.cpp
// $Id$
/* COMIENZO DE DESCRIPCION
__USE_WIKI__
Escribir una funci\'on
#void elimina_valor(queue<int> &Q, int n);}# que elimina todos
las ocurrencias del valor #n# en la cola #Q#. Por ejemplo,
si #Q = { 1,3,5,4,2,3,7,3,5 }# y #n=3#, despu\'es de
#elimina_valor(Q,3)# debe quedar
#Q = {1,5,4,2,7,5}#.
Sugerencia: usar una estructura auxiliar lista o cola.
Restricciones: el algoritmo debe tener un tiempo de ejecuci\'on
$O(n)$, donde $n$ es el n\'umero de elementos en la cola original.
[Tomado en Ex\'amen Final 08-JUL-2004]
keywords: cola
FIN DE DESCRIPCION
*/
// -----------------------------------------------------------------
#include <iostream>
#include <queue>
#include <list>
#include "./util.h"
using namespace std ;
//--------------------------------------------------------------------
void elimina_valor (queue<int> & Q, int n) {
queue<int> C ;
int x ;
while ( !Q.empty() ) {
x = Q.front (); Q.pop ();
if (x != n) C.push (x) ;
} //
while ( !C.empty() ) {
x = C.front (); C.pop ();
Q.push (x) ;
} //
}
//--------------------------------------------------------------------
void imprime_cola (queue<int> & Q) {
queue<int> C ;
int x ;
cout << endl ;
cout << "cola Q: " ;
while ( !Q.empty() ) {
x = Q.front ();
C.push (x) ;
cout << x << " " ;
Q.pop (); // la unica forma de avanzar en la cola Q
} //
cout << endl ;
while ( !C.empty() ) {
x = C.front ();
Q.push (x) ;
C.pop (); // la unica forma de avanzar en la cola Q
} //
}
//--------------------------------------------------------------------
int main() {
int a [] = {1,3,5,4,2,3,7,3,5,-1};
list<int> L ;
list<int>::iterator p;
queue<int> Q;
int n ;
insertl (L, a, -1) ;
//cout << endl << endl << "lista L: "; printl (L);
p = L.begin();
while (p != L.end() ) Q.push (*p++) ;
imprime_cola (Q);
n = 3 ;
elimina_valor (Q,n);
imprime_cola (Q);
cout << endl;
return 0;
}
// -----------------------------------------------------------------
Generated by GNU Enscript 1.6.6.