// IG17 2004-05, II17 2005-06 // ColaEnteros.cpp // 19-11-2004, 18-11-2005 #include using namespace std; #include "ColaEnteros.h" ColaEnteros::Nodo::Nodo(int d) : sig(NULL), dato(d) { } ColaEnteros::ColaEnteros() : cabeza(NULL), cola(NULL) { } ColaEnteros::~ColaEnteros () { Vaciar(); } ColaEnteros::ColaEnteros (const ColaEnteros &c) : cabeza(NULL), cola(NULL) { *this = c; } ColaEnteros & ColaEnteros::operator= (const ColaEnteros &c) { if (this != &c) { Vaciar(); for (Nodo *aux = c.cabeza; aux != NULL; aux = aux->sig) Insertar (aux->dato); } return *this; } void ColaEnteros::Ver () const { Nodo *aux; cout << "{"; for (Nodo *aux = cabeza; aux != NULL; aux = aux->sig) { cout << aux->dato; if (aux->sig != NULL) cout << ","; } cout << "}" << endl; } int ColaEnteros::Sumar () const { int suma = 0; for (Nodo * aux = cabeza; aux != NULL; aux = aux->sig) suma += aux->dato; return suma; } bool ColaEnteros::EstaVacia () const { return (cabeza == NULL); } void ColaEnteros::Insertar (int numero) { Nodo *nuevo = new Nodo (numero); if (cabeza == NULL) cabeza = nuevo; else cola->sig = nuevo; cola = nuevo; } int ColaEnteros::Extraer () throw(int) { // Se supone que la lista no esta vacia, pero por si acaso // lo comprobamos y si esta vacia lanzamos una excepcion if (cabeza == NULL) throw 0; Nodo *aux = cabeza; int dato = aux->dato; if (cabeza == cola) cabeza = cola = NULL; else cabeza = aux->sig; delete aux; return dato; } void ColaEnteros::Vaciar () { Nodo *aux; while (cabeza != NULL) { aux = cabeza; cabeza = aux->sig; delete aux; } cola = NULL; } /* Otra solucion: void ColaEnteros::Vaciar () { while (!EstaVacia()) Extraer(); } */