Está en la página 1de 4

LISTAS ENLAZADAS

Una lista enlazada o encadenada es una colección de elementos ó nodos, en


donde cada uno contiene datos y un enlace o liga.

Un nodo es una secuencia de caracteres en memoria dividida en campos (de


cualquier tipo). Un nodo siempre contiene la dirección de memoria del siguiente
nodo de información si este existe.

Un apuntador es la dirección de memoria de un nodo

La lista enlazada es un TDA que nos permite almacenar datos de una forma
organizada, al igual que los vectores pero, a diferencia de estos, esta estructura es
dinámica, por lo que no tenemos que saber "a priori" los elementos que puede
contener.

En una lista enlazada, cada elemento apunta al siguiente excepto el último que no
tiene sucesor y el valor del enlace es null. Por ello los elementos son registros que
contienen el dato a almacenar y un enlace al siguiente elemento. Los elementos
de una lista, suelen recibir también el nombre de nodos de la lista.

Las operaciones que podemos realizar sobre una lista enlazada son las
siguientes:

Recorrido. Esta operación consiste en visitar cada uno de los nodos que forman
la lista. Para recorrer todos los nodos de la lista, se comienza con el primero, se
toma el valor del campo liga para avanzar al segundo nodo, el campo liga de este
nodo nos dará la dirección del tercer nodo, y así sucesivamente.
Inserción. Esta operación consiste en agregar un nuevo nodo a la lista. Para esta
operación se pueden considerar tres casos:

• Insertar un nodo al inicio.


• Insertar un nodo antes o después de cierto nodo.
• Insertar un nodo al final.

Borrado. La operación de borrado consiste en quitar un nodo de la lista,


redefiniendo las ligas que correspondan. Se pueden presentar cuatro casos:

• Eliminar el primer nodo.


• Eliminar el último nodo.
• Eliminar un nodo con cierta información.
• Eliminar el nodo anterior o posterior al nodo cierta con información.

Búsqueda. Esta operación consiste en visitar cada uno de los nodos, tomando al
campo liga como puntero al siguiente nodo a visitar.

Vaciar. Borra todos los elementos de la lista.

TIPOS DE LISTAS ENLAZADAS

Listas simples enlazadas. La lista enlazada básica es la lista enlazada simple la


cual tiene un enlace por nodo. Este enlace apunta al siguiente nodo en la lista, o al
valor NULL o a la lista vacía, si es el último nodo.

Una lista enlazada simple contiene dos valores: el valor actual del nodo y un
enlace al siguiente nodo.

Lista Doblemente Enlazada. Un tipo de lista enlazada más sofisticado es la lista


doblemente enlazada o lista enlazadas de dos vías. Cada nodo tiene dos enlaces:
uno apunta al nodo anterior, o apunta al valor NULL o a la lista vacía si es el
primer nodo; y otro que apunta al siguiente nodo siguiente, o apunta al valor NULL
o a la lista vacía si es el último nodo.

Una lista doblemente enlazada contiene tres valores: el valor, el link al nodo
siguiente, y el link al anterior

Listas enlazadas circulares. En una lista enlazada circular, el primer y el último


nodo están unidos juntos. Esto se puede hacer tanto para listas enlazadas simples
como para las doblemente enlazadas. Para recorrer un lista enlazada circular
podemos empezar por cualquier nodo y seguir la lista en cualquier dirección hasta
que se regrese hasta el nodo original. Desde otro punto de vista, las listas
enlazadas circulares pueden ser vistas como listas sin comienzo ni fin. Este tipo
de listas es el más usado para dirigir buffers para “ingerir” datos, y para visitar
todos los nodos de una lista a partir de uno dado.

Una lista enlazada circular que contiene tres valores enteros

Listas enlazadas circulares simples. Cada nodo tiene un enlace, similar al de


las listas enlazadas simples, excepto que el siguiente nodo del último apunta al
primero. Como en una lista enlazada simple, los nuevos nodos pueden ser solo
eficientemente insertados después de uno que ya tengamos referenciado. Por
esta razón, es usual quedarse con una referencia solamente al último elemento en
una lista enlazada circular simple, esto nos permite rápidas inserciones al
principio, y también permite accesos al primer nodo desde el puntero del último
nodo.

Lista Enlazada Doblemente Circular. En una lista enlazada doblemente circular,


cada nodo tiene dos enlaces, similares a los de la lista doblemente enlazada,
excepto que el enlace anterior del primer nodo apunta al último y el enlace
siguiente del último nodo, apunta al primero. Como en una lista doblemente
enlazada, las inserciones y eliminaciones pueden ser hechas desde cualquier
punto con acceso a algún nodo cercano. Aunque estructuralmente una lista
circular doblemente enlazada no tiene ni principio ni fin, un puntero de acceso
externo puede establecer el nodo apuntado que está en la cabeza o al nodo cola,
y así mantener el orden tan bien como en una lista doblemente enlazada.

APLICACIONES DE LAS LISTAS ENLAZADAS.

Las listas enlazadas son usadas como módulos para otras muchas estructuras de
datos, tales como pilas, colas y sus variaciones.

El campo de datos de un nodo puede ser otra lista enlazada. Mediante este
mecanismo, podemos construir muchas estructuras de datos enlazadas con listas;
esta práctica tiene su origen en el lenguaje de programación Lisp, donde las listas
enlazadas son una estructura de datos primaria (aunque no la única), y ahora es
una característica común en el estilo de programación funcional.

A veces, las listas enlazadas son usadas para implementar arrays asociativos, y
estas en el contexto de las llamadas listas asociativas. Hay pocas ventajas en este
uso de las listas enlazadas; hay mejores formas de implementar éstas estructuras,
por ejemplo con árboles binarios de búsqueda equilibrados. Sin embargo, a veces
una lista enlazada es dinámicamente creada fuera de un subconjunto propio de
nodos semejante a un árbol, y son usadas más eficientemente para recorrer ésta
serie de datos

ALMACENAMIENTO INTERNO Y EXTERNO.


Cuando se construye una lista enlazada, nos enfrentamos a la elección de si
almacenar los datos de la lista directamente en los nodos enlazados de la lista,
llamado almacenamiento interno, o simplemente almacenar una referencia al dato,
llamado almacenamiento externo. El almacenamiento interno tiene la ventaja de
hacer accesos a los datos más eficientes, requiriendo menos almacenamiento
global, teniendo mejor referencia de localidad, y simplifica la gestión de memoria
para la lista (los datos son alojados y desalojados al mismo tiempo que los nodos
de la lista).

El almacenamiento externo, por otro lado, tiene la ventaja de ser más genérico, en
la misma estructura de datos y código máquina puede ser usado para una lista
enlazada, no importa cual sea su tamaño o los datos. Esto hace que sea más fácil
colocar el mismo dato en múltiples listas enlazadas. Aunque con el
almacenamiento interno los mismos datos pueden ser colocados en múltiples
listas incluyendo múltiples referencias siguientes en la estructura de datos del
nodo, esto podría ser entonces necesario para crear rutinas separadas para añadir
o borrar celdas basadas en cada campo. Esto es posible creando listas enlazadas
de elementos adicionales que usen almacenamiento interno usando
almacenamiento externo, y teniendo las celdas de las listas enlazadas adicionales
almacenadas las referencias a los nodos de las listas enlazadas que contienen los
datos.

En general, si una serie de estructuras de datos necesita ser incluida en múltiples


listas enlazadas, el almacenamiento externo es el mejor enfoque. Si una serie de
estructuras de datos necesitan ser incluidas en una sola lista enlazada, entonces
el almacenamiento interno es ligeramente mejor, a no ser que un paquete
genérico de listas genéricas que use almacenamiento externo esté disponible.
Asimismo, si diferentes series de datos que pueden ser almacenados en la misma
estructura de datos son incluidos en una lista enlazada simple, entonces el
almacenamiento interno puede ser mejor.

Otro enfoque que puede ser usado con algunos lenguajes implica tener diferentes
estructuras de datos, pero todas tienen los campos iniciales, incluyendo la
siguiente (y anterior si es una lista doblemente enlazada) referencia en la misma
localización. Después de definir estructuras distintas para cada tipo de dato, una
estructura genérica puede ser definida para que contenga la mínima cantidad de
datos compartidos por todas las estructuras y contenidos al principio de las
estructuras. Entonces las rutinas genéricas pueden ser creadas usando las
mínimas estructuras para llevar a cabo las operaciones de los tipos de las listas
enlazadas, pero separando las rutinas que pueden manejar los datos específicos.
Este enfoque es usado a menudo en rutinas de análisis de mensajes, donde
varios tipos de mensajes son recibidos, pero todos empiezan con la misma serie
de campos, generalmente incluyendo un campo para el tipo de mensaje. Las
rutinas genéricas son usadas para añadir nuevos mensajes a una cola cuando son
recibidos, y eliminarlos de la cola en orden para procesarlos. El campo de tipo de
mensaje es usado para llamar a la rutina correcta para procesar el tipo específico
de mensaje.

También podría gustarte