00001 //=========================================================================== 00002 //= lista.h Julio de 1998 = 00003 //=-------------------------------------------------------------------------= 00004 //= CLASE PARAMETRICA LISTA. = 00005 //= Esta es una implementacion de uso generico de un TAD LISTA simplemente = 00006 //= encadenada, basada en nodos con apuntadores al siguiente nodo. La = 00007 //= LISTA puede indexarse como si se tratase de un arreglo, ya que posee = 00008 //= una sobrecarga del operador []. Posee metodos que permiten que sea = 00009 //= usada como una pila. = 00010 //=-------------------------------------------------------------------------= 00011 //= OJO: Notese que en C++ un "template" es una ayuda para el compilador, y = 00012 //= no puede compilarse por separado para generar codigo objeto. Este = 00013 //= modulo debe ser incluido (#include) en los modulos que lo utilicen. = 00014 //=-------------------------------------------------------------------------= 00015 //= IMPORTANTE: Esta clase NO MANEJA estructuras ni clases, esta disennada = 00016 //= solamente para tipos de datos basicos y apuntadores. Para usarla con = 00017 //= estructuras de datos complejas (i.e. clases), utilize siempre = 00018 //= apuntadores. = 00019 //=-------------------------------------------------------------------------= 00020 //= Autor original: Oscar J. Chavarro G. A.K.A. JEDILINK. Copyright (c), = 00021 //= 1997 - 2003, oscarchavarro@hotmail.com = 00022 //= AQUYNZA es software libre, y se rige bajo los terminos de la licencia = 00023 //= LGPL de GNU (http://www.gnu.org). Para mayor informacion respecto a la = 00024 //= licencia de uso, consulte el archivo ./doc/LICENCIA en la distribucion. = 00025 //=========================================================================== 00026 00027 #include "jed_defs.h" 00028 00029 #ifndef __LISTA_H__ 00030 #define __LISTA_H__ 00031 00032 //============================================================================ 00033 //= Definicion de clases = 00034 //============================================================================ 00035 00036 template <class T> class LISTA; 00037 00038 template <class T> class NODITO 00039 { 00040 private: 00041 T info; 00042 NODITO<T> *sig; 00043 friend class LISTA<T>; 00044 00045 public: 00046 NODITO(T &); 00047 ~NODITO(); 00048 void data(T &); 00049 void asig(T &); 00050 }; 00051 00052 template <class T> class LISTA 00053 { 00054 private: 00055 long int mi_tam; 00056 NODITO<T> *cab; 00057 NODITO<T> *window; 00058 public: 00059 00060 // OJO: Por alguna extranna razon estas dos tienen que estar definidas 00061 // aqui para que no salgan como simbolos no definidos! 00062 LISTA(){mi_tam = 0; cab=0; window = 0;}; 00063 ~LISTA(){elim();}; 00064 00065 //- Servicios basicos --------------------------------------------------- 00066 T & operator [](int pos); 00067 void elimElem(long int pos); 00068 void elim(void); 00069 void insPosElem(T elm, long int pos); 00070 void anx(T elm); 00071 void push(T &elm); 00072 long int tam(void); 00073 void fin(void); 00074 BOOLEAN vacia(void); 00075 00076 //- Servicios de control de la ventana ---------------------------------- 00077 void principio(void); 00078 void operator ++(void); 00079 T ventana(void) { 00080 if ( !window ) return (T) NULL; else return (T) window->info; 00081 }; 00082 }; 00083 00084 #endif 00085 00086 //============================================================================ 00087 //= EOF = 00088 //============================================================================ 00089