You are on page 1of 34

ESTRUCTURA DE

DATOS
Listas enlazadas, operaciones
bsicas.
Definicin de lista
Una lista enlazada o lista
unidireccional, est conformada por
una coleccin lineal de elementos
llamados nodos, donde el orden de
los mismos se establece mediante
punteros.
Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 2
Definicin de lista
Cada nodo se divide en dos partes:
Una primera parte contiene la informacin
asociada al elemento.
Una segunda parte, llamada campo de
enlace o campo puntero al siguiente,
contiene la direccin del siguiente nodo
de la lista.

Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 3
NODO
Dato Enlace
Valor Puntero
Representacin en Memoria
Se hace empleando dos arreglos
lineales que se llamarn DATO y
ENLACE.
DATO[k] y ENLACE[k] contienen los
valores y los punteros de cada nodo
de la LISTA (enlazada)
respectivamente.
Este tipo de representacin requerir
de una variable de trato especial para
indicar el inicio START del primer
elemento de la lista.
Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 4
Representacin en Memoria
Tambin se necesitar una variable
bandera que denominaremos NULO y
nos permitir indicar el final de la lista.
Para efectos didcticos se emplearn
valores positivos dentro de los
ejemplos por lo tanto el valor NULO
ser igual a cero.
Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 5
Representacin en Memoria
No. Dato Enlace
1 b 5
2
3 a 1
4
5 c 0
6
Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 6
3
START
Recorrido de Lista Enlazada
Elaborar un algoritmo que permita
procesar toda la informacin de una
lista enlazada.
Utilizar la variable PTR que apuntar
al nodo procesado a cada momento.
Una vez concluido, hacer una prueba
de escritorio con los datos de la lista
anterior.
Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 7
Recorrido de Lista Enlazada
Inicio
PTR = START
Mientras PTR <> 0 hacer
Leer DATO[PTR]
PTR = ENLACE[PTR]
Fin Mientras
Fin
Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 8
Bsqueda en Lista Enlazada
Hay dos algoritmos que permiten
determinar la Posicin de la primera
aparicin de un DATO dentro de la
lista.
El primer algoritmo no necesita que la
lista est ordenada.
Bsqueda en Lista Enlazada No
Ordenada.
Se emplear una variable POS que indica
la posicin de la primera aparicin de
VALOR el elemento buscado dentro de la
LISTA.
Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 9
Bsqueda en Lista No
Ordenada
Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 10
No. Dato Enlace
1 s 4
2
3 f 1
4 d 8
5
6 p 0
7
8 a 6
9
3
START
Bsqueda en Lista No
Ordenada
Inicio
PTR = START
Mientras PTR <> 0 hacer
Si VALOR = DATO[PTR] entonces
POS = PTR
Caso contrario
PTR = ENLACE[PTR]
Fin Si
Fin Mientras
Fin
Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 11
Bsqueda en Lista Ordenada
Bsqueda en una Lista Enlazada
Ordenada.
Cuando la lista enlazada est ordenada,
se puede buscar el elemento VALOR
comparndolo uno a uno con cada
DATO[PTR].
Se puede terminar la bsqueda cuando el
VALOR sea mayor que DATO[PTR].
Puede darse que el VALOR se encuentre
o que al terminar la bsqueda no se
encuentre.
Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 12
Bsqueda en Lista Ordenada
Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 13
No. Dato Enlace
1 b 4
2
3 a 1
4 c 8
5
6 e 0
7
8 d 6
9
3
START
Bsqueda en Lista Ordenada
Inicio
PTR = START
Mientras PTR <> 0 hacer
Si VALOR > DATO[PTR] entonces
PTR = ENLACE[PTR]
Caso contrario
Si VALOR = DATO[PTR] entonces
POS = PTR
Caso contrario
POS = 0
Fin Si
Salir
Fin Si
Fin Mientras
POS = 0 (la bsqueda no tuvo xito)
Fin
Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 14
Insercin en Lista Enlazada
En forma bsica podemos insertar un
elemento al principio, a continuacin
de un nodo determinado o cuando
insertamos un nodo en una lista
enlazada previamente ordenada.
Insercin al principio de una Lista
Enlazada.
El nuevo nodo se inserta en la primera
posicin de la lista enlazada.
Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 15
Insercin al principio de la
Lista
Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 16
Insercin al principio de la
Lista
Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 17
Insercin al principio de la
Lista
Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 18
No. Dato Enlace
1 b 4
2 5
3 a 1
4 c 8
5 7
6 e 0
7 9
8 d 6
9 0
3
START
2
DISPO
Insercin al principio de la
Lista
Inicio
Si DISPO = 0 entonces Escribir
Overflow
NUEVO = DISPO
DISPO = ENLACE [DISPO]
DATO [NUEVO] = VALOR
ENLACE [NUEVO] = START
START = NUEVO
Fin
Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 19
Insercin despus de un nodo
Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 20
Insercin despus de un nodo
Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 21
No. Dato Enlace
1 b 4
2 g 3
3 a 1
4 c 8
5 7
6 e 0
7 9
8 d 6
9 0
2
START
5
DISPO
Insercin despus de un nodo
Inicio
Leer VALOR
Leer LUGAR
Si DISPO = 0 entonces
Escribir Lista llena
Caso contrario
PTR = START
POS = 1
Mientras PTR<>0 y POS<>LUGAR
PTR = ENLACE [PTR]
POS = POS + 1
Fin Mientras

Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 22
Insercin despus de un nodo
Si PTR = 0 entonces
Escribir No existe ese lugar
Caso contrario
NUEVO = DISPO
DISPO = ENLACE [DISPO]
DATO [NUEVO] = VALOR
ENLACE [NUEVO] = ENLACE [PTR]
ENLACE [PTR] = NUEVO
Fin Si
Fin Si
Fin
Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 23
Listas Circulares
En las listas lineales siempre hay un
nodo que apunta al valor Nulo
(bandera que indica el final: Nil, cero,
etc.)
Para poder acceder a cualquier nodo
de la lista, se modifica el algoritmo
lineal y el ltimo nodo en vez de
apuntar a Nulo apunta al primer nodo,
generndose una estructura circular.
Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 24
Listas Circulares
Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 25
Listas Circulares
Una lista circular no tiene ni primero ni
ltimo nodo pero resulta bastante til
establecer un primer nodo, al que
denominaremos Cabecera y que debe
tener un valor que sea distinto al
empleado por los otros nodos.
Se debe tener cuidado de no producir
ciclos (loops) infinitos.
Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 26
Listas doblemente enlazadas
Las listas simplemente enlazadas solo
permiten el recorrido en un solo
sentido.
En algunos casos ser necesario
poder avanzar en ambos sentidos,
para ello cada nodo en una lista
doblemente enlazada tiene 2 enlaces:
Uno al SIGUIENTE nodo.
Uno al ANTERIOR nodo.
Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 27
Listas doblemente enlazadas
Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 28
Insercin lista doble enlazada
PRIMERO=1
FINAL=1
DISPO=1
Inicio
Leer VALOR
Leer LUGAR
Si DISPO=(-1) Entonces
Escribir Lista llena
Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 29
Insercin lista doble enlazada
Caso contrario
NUEVO=DISPO
DISPO=LIBRE[DISPO]
DATO[NUEVO]=VALOR
Si PRIMERO=FINAL y
DATO[PRIMERO]= entonces
SIG[NUEVO]=VALOR
ANT[NUEVO]=ANT[LUGAR]
Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 30
Insercin lista doble enlazada
Caso contrario
Si PRIMERO=FINAL o
SIG[LUGAR]=-1 entonces
AUXSIG = SIG[LUGAR]
SIG[LUGAR]=NUEVO
SIG[NUEVO]=AUXSIG
ANT[NUEVO]=LUGAR
FINAL = NUEVO
Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 31
Insercin lista doble enlazada
Caso contrario
AUXSIG=SIG[LUGAR]
AUXANT=ANT[SIG[LUGAR]]
ANT[SIG[LUGAR]]=NUEVO
SIG[LUGAR]=NUEVO
SIG[NUEVO]=AUXSIG
ANT[NUEVO]=AUXANT
Fin Si

Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 32
Insercin lista doble enlazada
Fin Si
Fin si
Fin
Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 33
Lista doble circular
Tambin puede darse el caso de una
lista doblemente enlazada y adems
circular.
Universidad Politcnica de
Aguascalientes
Prof. Luis H. Cruz A.
Estructura de Datos 34

You might also like