#include #include using namespace std; #include "Conjunto.h" Conjunto::Nodo::Nodo(float d, Nodo * a, Nodo * s) : dato{d}, anterior{a}, siguiente{s} { } Conjunto::Conjunto() : minimo{nullptr}, maximo{nullptr} { } void Conjunto::insertar(float dato) { if (minimo == nullptr) { minimo = new Nodo(dato, nullptr, nullptr); maximo = minimo; } else if (dato < minimo->dato) { minimo = new Nodo(dato, nullptr, minimo); minimo->siguiente->anterior = minimo; } else if (dato > maximo->dato) { maximo = new Nodo(dato, maximo, nullptr); maximo->anterior->siguiente = maximo; } else { bool insertado = false; for (Nodo * actual = minimo; actual->dato != dato && ! insertado; actual = actual->siguiente) if(dato < actual->siguiente->dato) { actual->siguiente = new Nodo(dato, actual, actual->siguiente); actual->siguiente->siguiente->anterior = actual->siguiente; insertado = true; } } } void Conjunto::mostrar() const { cout << "["; for (Nodo * actual = minimo; actual != nullptr; actual = actual->siguiente) { cout << actual->dato; if (actual->siguiente != nullptr) cout << ", "; } cout << "]"; cout << "["; for (Nodo * actual = maximo; actual != nullptr; actual = actual->anterior) { cout << actual->dato; if (actual->anterior != nullptr) cout << ", "; } cout << "]"; } void Conjunto::eliminarComunes(Nodo * n1, Nodo * n2) { if (n1 != nullptr && n2 != nullptr) { if (n1->dato < n2->dato) n1 = n1->siguiente; else if (n2->dato < n1->dato) n2 = n2->siguiente; else { Nodo * basura = n1; if (n1 == minimo) minimo = n1->siguiente; else n1->anterior->siguiente = n1->siguiente; if (n1 == maximo) maximo = n1->anterior; else n1->siguiente->anterior = n1->anterior; n1 = n1->siguiente; n2 = n2->siguiente; delete basura; } eliminarComunes(n1, n2); } } void Conjunto::eliminarComunes(const Conjunto & c) { eliminarComunes(minimo, c.minimo); }