// En aulas:
// g++ Cola.cpp -c
// g++ TestCola.cpp Cola.o -o TestCola
// ./TestCola
#include <iostream>
using namespace std;
#include <cstdlib> // rand
#include "Cola.h"
int main () {
Cola cola;
int i;
for (i = 11; i < 100; i += 11) {
cout << "Insertando " << i << ": Cola = ";
cola.encolar(i);
cola.mostrar();
cout << endl;
}
cout << endl;
while ( ! cola.estaVacia()) {
cout << "Eliminando " << cola.consultarPrimero() << ": Cola = ";
cola.desencolar();
cola.mostrar();
cout << endl;
int unDatoCualquiera = rand() % 100;
cout << "Insertando " << unDatoCualquiera << ": Cola = ";
cola.encolar(unDatoCualquiera);
cola.mostrar();
cout << endl;
cout << "Eliminando " << cola.consultarPrimero() << ": Cola = ";
cola.desencolar();
cola.mostrar();
cout << endl;
}
}
class Cola {
struct Nodo {
int dato;
Nodo * siguiente;
Nodo(int);
};
Nodo * primero;
Nodo * ultimo;
public:
Cola();
void encolar(int);
void desencolar();
int consultarPrimero() const;
void mostrar() const;
bool estaVacia() const;
};
#include <iostream>
#include <string>
using namespace std;
#include "Cola.h"
Cola::Nodo::Nodo(int d) : dato{d}, siguiente{nullptr} {
}
Cola::Cola() : primero{nullptr}, ultimo{nullptr} {
}
void Cola::encolar(int d) {
Nodo * nuevo = new Nodo(d);
if (primero == nullptr) // Tambien valdria if (estaVacia()); asi nos ahorramos la llamada
primero = nuevo;
else
ultimo->siguiente = nuevo;
ultimo = nuevo;
}
void Cola::desencolar() {
if (primero == nullptr)
throw string("Intentando desencolar en una cola vacia");
Nodo * aux = primero;
primero = primero->siguiente;
delete aux;
if (primero == nullptr)
ultimo = nullptr;
}
int Cola::consultarPrimero() const {
if (primero == nullptr)
throw string("Intentando consultar el primero en una cola vacia");
return primero->dato;
}
void Cola::mostrar() const {
cout << "[";
for (Nodo * aux = primero; aux != nullptr; aux = aux->siguiente) {
cout << aux->dato;
if (aux != ultimo)
cout << ", ";
}
cout << "]";
}
bool Cola::estaVacia() const {
return primero == nullptr;
}