#include #include using namespace std; #include "ColaDePrioridad.h" ColaDePrioridad::Nodo::Nodo(float laPrioridad, Nodo * elSiguiente) : prioridad{laPrioridad}, siguiente{elSiguiente} { } ColaDePrioridad::ColaDePrioridad() : primero{nullptr} { } void ColaDePrioridad::insertar(float prioridad) { insertar(prioridad, primero); } void ColaDePrioridad::insertar(float prioridad, Nodo * & actual) { if (actual == nullptr || prioridad <= actual->prioridad) actual = new Nodo(prioridad, actual); else insertar(prioridad, actual->siguiente); } /* void ColaDePrioridad::insertar(float prioridad) { if (primero == nullptr || prioridad <= primero->prioridad) primero = new Nodo(prioridad, primero); else insertar(prioridad, primero); } void ColaDePrioridad::insertar(float prioridad, Nodo * actual) { if (actual->siguiente == nullptr || prioridad <= actual->siguiente->prioridad) actual->siguiente = new Nodo(prioridad, actual->siguiente); else insertar(prioridad, actual->siguiente); } */ /* void ColaDePrioridad::insertar(float prioridad) { if (primero == nullptr || prioridad <= primero->prioridad) primero = new Nodo(prioridad, primero); else { bool insertado = false; for (Nodo * actual = primero; ! insertado; actual = actual->siguiente) if (actual->siguiente == nullptr || prioridad <= actual->siguiente->prioridad) { actual->siguiente = new Nodo(prioridad, actual->siguiente); insertado = true; } } } */ /* void ColaDePrioridad::insertar(float prioridad) { if (primero == nullptr) primero = new Nodo(prioridad, nullptr); else if (prioridad <= primero->prioridad) primero = new Nodo(prioridad, primero); else { Nodo * actual = primero, * anterior; while (actual->prioridad < prioridad) if (actual->siguiente != nullptr) { anterior = actual; actual = actual->siguiente; } else { anterior = actual; actual = nullptr; break; } Nodo * nuevo = new Nodo(prioridad, actual); anterior->siguiente = nuevo; } } */ /* void ColaDePrioridad::insertar(float prioridad) { if (primero == nullptr) primero = new Nodo(prioridad, nullptr); else if (prioridad <= primero->prioridad) primero = new Nodo(prioridad, primero); else { Nodo * actual = primero, * anterior; while (actual != nullptr && actual->prioridad < prioridad) { anterior = actual; actual = actual->siguiente; } anterior->siguiente = new Nodo(prioridad, actual); } } */ float ColaDePrioridad::consultarMinimo() const { if (primero == nullptr) throw string("Intentando consultar el minimo en una cola de prioridad vacia"); return primero->prioridad; } void ColaDePrioridad::eliminarMinimo() { if (primero == nullptr) throw string("Intentando eliminar el minimo en una cola de prioridad vacia"); Nodo * basura = primero; primero = primero->siguiente; delete basura; } bool ColaDePrioridad::estaVacia() const { return primero == nullptr; } void ColaDePrioridad::mostrar() const { cout << "["; for (Nodo * actual = primero; actual != nullptr; actual = actual->siguiente) { cout << actual->prioridad; if (actual->siguiente != nullptr) cout << ", "; } cout << "]"; }