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