Página principal | Jerarquía de la clase | Lista alfabética | Lista de componentes | Lista de archivos | Miembros de las clases | Archivos de los miembros | Páginas relacionadas

lista.cc

Ir a la documentación de este archivo.
00001 //===========================================================================
00002 //= lista.cc                                                  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 //===========================================================================
00028 //= Encabezados de librerias standard                                       =
00029 //===========================================================================
00030 
00031 #ifndef __LISTA__
00032 #define __LISTA__
00033 
00034 //#include <stdio.h>
00035 
00036 #include "lista.h"
00037 
00038 //===========================================================================
00039 //= Clase de soporte NODITO                                                 =
00040 //===========================================================================
00041 
00042 template<class T>
00043 NODITO<T>::NODITO(T &data)
00048 {
00049     info=data;
00050     sig=0;
00051 }
00052 
00053 template<class T>
00054 NODITO<T>::~NODITO()
00061 {
00062     ;
00063 }
00064 
00065 template<class T> void
00066 NODITO<T>::data(T &dato)
00070 {
00071     dato = info;
00072 }
00073 
00074 //===========================================================================
00075 //= CLASE PARAMETRICA LISTA                                                 =
00076 //===========================================================================
00077 
00078 //= Servicios basicos ========================================================
00079 
00080 template<class T> long int
00081 LISTA<T>::tam(void)
00085 {
00086     return mi_tam;
00087 }
00088 
00089 // OJO: Por alguna extranna razon estas dos tienen que estar definidas
00090 // en el .h para que no salgan como simbolos no definidos!
00091 
00092 
00093 //template<class T>
00094 //LISTA<T>::LISTA()
00098 //{
00099 //    mi_tam = 0;
00100 //    cab=0;
00101 //}
00102 
00103 //template<class T>
00104 //LISTA<T>::~LISTA()
00108 //{
00109 //    elim();
00110 //}
00111 
00112 template<class T> T&
00113 LISTA<T>::operator[](int pos)
00120 {
00121     NODITO<T> *p;
00122     int i;
00123 
00124     for ( i = 0, p = cab; p && i < pos; i++, p = p->sig ) { ; }
00125     //if ( p ) {  // Seria bueno, pero degradaria el desempenno de la clase
00126         return p->info;
00127     //}
00128 }
00129 
00130 
00131 template<class T> void
00132 LISTA<T>::elimElem(long int pos)
00136 {
00137     NODITO<T> *p, *q;
00138 
00139     if ( !cab || pos < 0 || pos >= mi_tam ) {
00140         return;
00141     }
00142 
00143     if ( pos == 0 ) {
00144         cab = cab->sig;
00145         mi_tam--;
00146         return;
00147     }
00148 
00149     int i;
00150 
00151     for ( p = cab, i = 0; i < pos - 1 && p; i++, p = p->sig ) { ; }
00152     q = p->sig;
00153     p->sig = q->sig;
00154     mi_tam--;
00155     delete q;
00156 }
00157 
00158 template<class T> void
00159 LISTA<T>::elim(void)
00164 {
00165     NODITO<T> *p;
00166  
00167     while ( cab ) {
00168         p=cab;
00169         cab=cab->sig;
00170         delete p;
00171     }
00172     mi_tam = 0;
00173     cab = 0;
00174 }
00175 
00176 template<class T> void
00177 LISTA<T>::push(T &elm)
00181 {
00182     NODITO<T> *Nodo;
00183 
00184     Nodo = new NODITO<T>(elm);
00185     if ( !Nodo ) {
00186         return;
00187     }
00188 
00189     Nodo->sig = cab;
00190     cab=Nodo;
00191     mi_tam++;
00192 }
00193 
00194 template<class T> void
00195 LISTA<T>::anx(T data)
00199 {
00200     insPosElem(data, mi_tam);
00201 }
00202 
00203 template<class T> void
00204 LISTA<T>::insPosElem(T data, long int pos)
00208 {
00209     NODITO<T> *Nodo, *P, *Q;
00210     int i;
00211 
00212     Nodo = new NODITO<T>(data);
00213     // Referencie internamente el nodo
00214 
00215     for ( i = 0, Q = 0, P = cab; P && i < pos; Q = P, P = P->sig, i++ ) { ; }
00216 
00217     if ( !cab || P == cab ) {
00218         Nodo->sig = cab;
00219         cab = Nodo;
00220       }
00221       else {
00222         Q->sig = Nodo;
00223         Nodo->sig = P;
00224     }
00225 
00226     mi_tam++;
00227 }
00228 
00229 //= Servicios de control de la lista por ventana =============================
00230 
00231 template<class T> void
00232 LISTA<T>::principio(void)
00233 {
00234     window = cab;
00235 }
00236 
00237 template<class T> void
00238 LISTA<T>::operator ++(void)
00239 {
00240     if ( window ) window = window->sig;
00241 }
00242 
00243 //===========================================================================
00244 //= EOF                                                                     =
00245 //===========================================================================
00246 
00247 #endif // __LISTA__
00248 

Este archivo HTML ha sido generado automáticamente a partir del código fuente AQUYNZA. NO LO EDITE. Para mayor información contacte al autor.