// ListaLigada.h ... Pequenia lista ligada para lo que se ofrezca... // Nota: Estas listas ligadas solo contienen apuntadores a objetos. // las instancias deben ser creadas de manera externa, o bien llamando // a InsertaNodo() pero esto solo creara un nodo con un apuntador a una // instancia creada con el constructor definido, lo cual no es muy util... // El usuario tiene que mandar a llamar a DestruyeElementos() por separado // para que se libere la memoria de los apuntadores contenidos en la lista. // Esto se hace de esta manera por que si automaticamente se destruyeran // los elementos podrian destruirse referencias a objetos que se usaron solo // de manera temporal. #ifndef LISTAPUNTOS_H #define LISTAPUNTOS_H #include #include "General.h" #include "ObjetoModificable.h" template class C_Nodo { protected: C_Dato *Dato; // OJO: La instanciacion se hace antes de insertar en el nodo! C_Nodo *Siguiente; // apunta al siguiente. public: C_Nodo() {Siguiente=NULL;} // constructor default. bool CambiaValor(C_Dato *NuevoValor); // le cambia el valor al nodo. void CambiaSiguiente(C_Nodo *Nuevo) {Siguiente=Nuevo;} // asigna el apuntador al siguiente nodo. C_Nodo *LeeSiguiente() {return Siguiente;} // Lee el siguiente nodo C_Dato *LeeDato() {return Dato;} // Lee el dato contenido en el actual. }; template class C_ListaLigada : public C_ObjetoModificable // Herencia para poder pasarlo al procesador. { protected: int Tamano; // El tamano de la lista C_Nodo *Ultimo; // El ultimo de la lista C_Nodo *Lista; // Apunta al principio de la lista C_Nodo **Tabla; // Tabla que contiene los apuntadores de los elementos bool TablaActualizada; // si es TRUE al leer un elemento se usa la tabla... public: C_ListaLigada(); // Constructor default ~C_ListaLigada(); // Destructor. bool Copia(C_ListaLigada *); C_Dato *LeeDato(int); // Lee el dato en la posicion dada. bool CambiaDato(int,C_Dato *); int LeeTamano() {return Tamano;} // Lee el tamano bool InsertaNodo(C_Dato *); // Mete un nuevo nodo de un objeto preinstanciado. bool InsertaNodo(); // En este caso instancia el objeto. bool BorraNodo(int); // Borra nodo pero no destruye el objeto apuntado! bool BorraLista(); // Borra toda la lista, no destruye los objetos bool DestruyeElementos(); // Destruye los objetos de la lista sin destruir la lista. bool ActualizaTabla(); }; #endif