cum_sum_cola.cpp
// $Id$
/* COMIENZO DE DESCRIPCION
__USE_WIKI__
Escribir una funci\'on
#void cum_sum_cola (queue<int> &Q)# que modifica a la
cola #Q# dejando la suma acumulada de sus elementos, es
decir, si los elementos de #Q# antes de llamar a
#cum_sum_cola(Q)# son #Q = (a_0,a_1,...,a_{n-1})#,
entonces despu\'es de llamar a #cum_sum_cola(Q)# debe
quedar #Q = (a_0, a_0 + a_1, ..., a_0 + a_1 + ... + a_n)#.
[Tomado en el Primer Parcial 27-ABR-2004]
keywords: cola
FIN DE DESCRIPCION */
/*
Por ejemplo, si {\tt Q = (1,3,2,4,2)} entonces despu\'es de hacer
{\tt cum\_sum\_cola (Q)} debe quedar {\tt Q = (1,4,6,10,12)}.
Restricciones: (i) usar una cola auxiliar; (ii) usar la interfase
STL para colas ({\tt clear (), front (), pop (), push (T x)+,
size (), empty ()}); (iii) NO usar m\'as estructuras auxiliares
que la indicada ni otros algoritmos de STL; y (iv) el algoritmo
debe ser $O(n)$.
*/
// -----------------------------------------------------------------
#include <iostream>
#include <queue>
#include <list>
#include "./util.h"
using namespace std ;
//--------------------------------------------------------------------
void cum_sum_cola (queue<int> & Q) {
queue<int> C ;
int x=0;
while ( !Q.empty() ) {
x += Q.front (); Q.pop ();
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);
cum_sum_cola (Q);
imprime_cola (Q);
cout << endl;
return 0;
}
// -----------------------------------------------------------------
Generated by GNU Enscript 1.6.6.