Listas enlazadas
Download
Report
Transcript Listas enlazadas
LISTAS ENLAZADAS
M.IA. Daniel Alejandro García López
CONTENIDO
Introducción
Conceptos
Tipos de Listas
Simplemente ligadas
Dobles
Circulares
Listas de listas
Operaciones en listas
Ventajas sobre los arreglos
Cursores
Declaración en C
INTRODUCCIÓN
El principal beneficio de las listas enlazadas
respecto a los arreglos convencionales es que el
orden de los elementos enlazados puede ser
diferente al orden de almacenamiento en
memoria o el disco, permitiendo que el orden de
recorrido de la lista sea diferente al de
almacenamiento.
Las listas enlazadas permiten inserciones y
eliminación de nodos en cualquier punto de la
lista en tiempo constante, pero no permiten un
acceso aleatorio.
CONCEPTOS
Lista enlazada: Consiste en una secuencia de
nodos, en los que se guardan campos de datos
arbitrarios y una o dos referencias al nodo
anterior y/o posterior.
Cabeza: Al primer nodo de una lista enlazada
Fin: Al ultimo nodo de una lista enlazada
TIPOS DE LISTAS ENLAZADAS
Listas simples enlazadas: Tiene un enlace por
nodo. Este enlace apunta al siguiente nodo en la
lista, o al valor Nulo o lista Vacia, si es el último
nodo.
TIPOS DE LISTAS ENLAZADAS
Listas doblemente enlazadas: Cada nodo tiene
dos enlaces: uno apunta al nodo anterior, o
apunta al valor Nulo o la lista vacia si es el
primer nodo; y otro que apunta al siguiente nodo,
o apunta al valor Nulo o la lista vacia si es el
último nodo.
TIPOS DE LISTAS ENLAZADAS
Listas enlazadas circulares: En una lista
enlazada circular, el primer y el último nodo
están unidos. Para recorrer una lista enlazada
circular podemos empezar por cualquier nodo y
seguir la lista en cualquier dirección hasta que se
regrese al nodo original
TIPOS DE LISTAS ENLAZADAS
Listas de listas: El campo de datos de un nodo
puede ser otra lista enlazada.
OPERACIONES EN LISTAS
Recorrido: Consiste en visitar cada uno de los nodos
que forman la lista.
Inserción: Consiste en agregar un nuevo nodo a la
lista
Borrado: Consiste en quitar un nodo de la lista,
redefiniendo las ligas que correspondan.
Insertar un nodo al inicio
Insertar un nodo antes o después de cierto nodo
Insertar un nodo al final
Eliminar el primer nodo
Eliminar el último nodo
Eliminar un nodo con cierta información
Eliminar el nodo anterior o posterior a cierta info.
Búsqueda: Consiste en visitar cada uno de los nodos
hasta encontrar el elemento dado.
VENTAJAS SOBRE LOS ARREGLOS
Los elementos se pueden insertar en una lista
indefinidamente mientras que un arreglo tarde o
temprano se llenará o necesitará ser
redimensionado, una costosa operación que
incluso puede no ser posible si la memoria se
encuentra fragmentada.
DESVENTAJAS SOBRE LOS ARREGLOS
Las listas son de acceso secuencial, y sólo puede
ser recorridas en una dirección.
El acceso secuencial es más lento en las listas.
Se requiere de almacenamiento extra para las
referencias
Puede resultar lento asignar memoria para cada
nuevo elemento.
LISTAS BASADAS EN CURSORES
Algunos lenguajes como FORTRAN, ALGOL, no
tienen apuntadores. Si se trabaja con un lenguaje
tal, se pueden simular los apuntadores mediante
cursores; esto es, con enteros que indican
posiciones en los arreglos.
L=5
1
d
2
3
4
c
4
5
Disponible=6
7
6
0
a
6
8
2
7
e
0
8
b
3
INSERCIÓN EN CURSORES
g
1
L=6
d
2
3
4
c
4
Disponible=2
7
6
0
5
a
8
6
g
5
7
e
0
8
b
3
ELIMINACIÓN EN CURSORES
8
1
L=6
d
2
3
4
c
4
Disponible=8
7
6
0
5
a
3
6
g
5
7
e
0
8
2
EJEMPLOS DE DECLARACIÓN EN C
Lista Simple
struct lista {
TipoDato dato;
lista *siguiente;
};
Lista doblemente enlazada
struct lista_doble {
TipoDato dato;
lista_doble *siguiente;
lista_doble *anterior;
};
TAREA
Lista enlazada que permita ademas:
Insertar al principio
Insertar al final
Insertar en la posición indicada
Insertar en orden ASC/DESC
Buscar un nodo según un valor
Localizar la posición de un nodo
Obtener el ultimo nodo