Está en la página 1de 3

ListasEnlazadasenBorlandC++

28 DE MAYO DE 2008 - 15:21

Punteros (Listas Enlazadas)


Setratadecombinarlasestructurasconlospunterosparaacabarporfinconla
limitacindelosarrays,yanoharfaltaindicareltamaodelarrayalprincipio.
Despuscomentaremoslosprosyloscontrasdelaslistasenlazasrespectoalos
arrays.
Consisteenunasecuenciadenodos,enlosqueseguardancamposdedatos
arbitrariosyunaodosreferencias(punteros)alnodoanteriory/oposterior.El
principalbeneficiodelaslistasenlazadasrespectoalosarrayconvencionaleses
que el orden de los elementos enlazados puede ser diferente al orden de
almacenamientoenlamemoriaoeldisco,permitiendoqueelordenderecorrido
delalistaseadiferentealdealmacenamiento.Unalistaenlazadaesuntipode
datoautoreferenciadoporquecontienenunpunteroolinkaotrodatodelmismo
tipo. Las listas enlazadas permiten inserciones y eliminacin de nodos en
cualquier punto de la lista en tiempo constante, pero no permiten un acceso
aleatorio.Existendiferentestiposdelistasenlazadas:ListaEnlazadasSimples,
ListasDoblementeEnlazadasyListasEnlazadasCirculares.
Laslistasenlazadaspuedenserimplementadasenmuchoslenguajes.Lenguajes
talescomoLispySchemetieneestructurasdedatosyaconstruidas,juntocon
operaciones para acceder a las listas enlazadas. Lenguajes imperativos u
orientadosaobjetostalescomoC,C++oJavadisponendereferenciasparacrear
listasenlazadas.
Las listas enlazadas pueden ser simples, dobles o circulares. De momento
veremoslassimples.Estaslistastendrnunaestructuracomoladelafigura:

Para crear listas necesitaremos estructuras asignacin dinmica de memoria.


Vamosavercomoutilizarunalistaenelejemplodelaagenda:

struct

_agenda
struct

{
char
nombre[20];
char
telefono[12];
_agenda
*siguiente;

};
MEMORIADINMICA
Paraoptimizarlamemoria,loidealserareservarmemoriaenelmomentoquela
necesitsemos y no como hasta la fecha, que lo hacamos al principio del
programa.
MALLOCYFREE
Estasdosfuncionesnosservirnparaasignardinmicamentememoria.Estas2
funcionesseencuentranenlalibrera
malloc();Reservamemoriaydevuelvelaposicindememoriadelcomienzode
sta,porloquedeberemosguardarelresultadoenunpuntero(msinformacin
depunterosenelnmero13delarevistadehackxcrack). Sinosehapodido
reservarmemoria,mallocdevolverelvalorNULL,asqueelpunteroapuntara
NULL. Es importante asegurarnos de que se ha podidoreservar la memoria,
haremosalgoas:
puntero=(Tipo_variable*)malloc(bytes_reservar);
if(puntero=(int*)malloc(sizeof(char)))
{puts(Correcto);}
Cuando ya no necesitemos el espacio que habamos reservado,
free() liberaremos la memoria, haremos:
free(puntero);
Descargaelejemploparamayorcompresiondeltema:
Nota:ElejemploserealizoenBorlandC++.

También podría gustarte