You are on page 1of 8

UNSM: FISI: LP1-Ing.

Humberto Valdera Rodrguez 2014 1



LISTAS DOBLEMENTE ENLAZADAS
Una lista doblemente enlazada, est constituida por nodos que contienen tres campos:
- Un campo para almacenar los datos.
- Un campo de enlace que almacena la direccin de memoria del siguiente nodo.
- Un campo de enlace que almacena la direccin de memoria del nodo anterior.

Representacin grfica:




Representacin grfica de una lista enlaza doble con datos:





Los punteros en una lista doblemente enlazada, se identifican de la siguiente manera:









Donde:
p = puntero auxiliar o temporal.
dato(p) = B, valor del dato apuntado por p.
siguiente(p) = puntero que sigue despus de p, y apunta al siguiente nodo.
anterior(q) = puntero que es anterior a p, y apunta al nodo anterior.


Las listas doblemente enlazadas se pueden recorrer en ambos sentidos a partir de
cualquier nodo.
Ocupan ms espacio en la memoria, que una lista enlazada simple, para una misma
cantidad de informacin.













p
siguiente(p) dato(p)
Puntero siguiente Puntero anterior Dato
D C
primero
NULO
A
NULO
B
D
C
primero
NULO
A
NULO
B
anterior(p)
UNSM: FISI: LP1-Ing. Humberto Valdera Rodrguez 2014 2

OPERACIONES EN UNA LISTA DOBLEMENTE ENLAZADA
Las operaciones que se realizan en una lista doblemente enlazada, son las siguientes:
- Insertar en una lista vaca, para lo cual se necesita crear una lista.
- Insertar en una lista no vaca, la cual puede ser: al inicio, en el intermedio o al final de
la lista.
- Mostrar los elementos de la lista.
- Buscar un elemento en la lista.
- Eliminar un elemento, que puede estar: al inicio, en el intermedio o al final de la lista.

CREAR UNA LISTA
Al crear una lista, sta no tiene nodo, ni elemento alguno, es decir est vaca, significa
que el puntero al cual le llamaremos primero, apunta a NULO.

En forma grfica:

En seudocdigo:
primero = NULO



INSERTAR ELEMENTOS EN LISTA DOBLEMENTE ENLAZADA

Insertar elemento en una LISTA VACA
El proceso es el siguiente:
1) Crear un nuevo nodo, haciendo que un puntero auxiliar p, apunte al nuevo nodo.

En forma grfica:




En seudocdigo: p = nuevo nodo

2) Ingresar el dato en el nuevo nodo, haciendo que dato(p) capture al dato ingresado.

En forma grfica:




En seudocdigo: leer: dato(p)

3) Preguntamos: primero = NULO?
Respuesta: S
- Hacer que el puntero primero, apunte al nuevo nodo.
- Hacer que el puntero sig(p), apunte a NULO.
- Hacer que el puntero ant(p), apunte a NULO.




primero
NULO
p
sig(p)
ant(p)
p
sig(p) 2
ant(p)
UNSM: FISI: LP1-Ing. Humberto Valdera Rodrguez 2014 3

En forma grfica:








En seudocdigo: primero = p
sig(p) = NULO
ant(p) = NULO


4) Resultado final:




Insertar elemento al INICIO de una LDE no vaca
El proceso es el siguiente:
1) Crear un nuevo nodo, haciendo que un puntero auxiliar p, apunte al nuevo nodo.

En forma grfica:




En seudocdigo: p = nuevo nodo

2) Ingresar el dato en el nuevo nodo, haciendo que dato(p) capture al dato ingresado.

En forma grfica:




En seudocdigo: leer: dato(p)

3) Preguntamos: primero = NULO?
Respuesta: No
Hacer que un puntero auxiliar q, apunte al primero.
Hacer que un puntero auxiliar w, apunte a sig(q).

En forma grfica:






NULO 2
NULO
primero
p
sig(p)
ant(p)
p
sig(p) 1
ant(p)
primero
NULO
p
sig(p) 2
ant(p)
NULO
NULO 2
NULO
primero
q
w
UNSM: FISI: LP1-Ing. Humberto Valdera Rodrguez 2014 4

En seudocdigo: q = primero
w = sig(q)

4) Preguntamos: dato(p) < dato(q)?
Respuesta: S
Hacer que sig(p) apunte a primero.
Hacer que primero apunte al nuevo nodo.
Hacer que ant(p) apunte al ant(q)

En forma grfica:











En seudocdigo: sig(p) = primero
primero = p
ant(p) = ant(q) o ant(p) = NULO

5) Resultado final:

























NULO
1
NULO
primero
2
p
sig(p) 1
ant(p)
NULO 2
NULO
primero
q
w
UNSM: FISI: LP1-Ing. Humberto Valdera Rodrguez 2014 5

Insertar elemento al FINAL de una LDE no vaca
El proceso es el siguiente:
1) Crear un nuevo nodo, haciendo que un puntero auxiliar p, apunte al nuevo nodo.

En forma grfica:




En seudocdigo: p = nuevo nodo

2) Ingresar el dato en el nuevo nodo, haciendo que dato(p) capture al dato ingresado.

En forma grfica:




En seudocdigo: leer: dato(p)

3) Preguntamos: primero = NULO?
Respuesta: No
Hacer que un puntero auxiliar q, apunte al primero.
Hacer que un puntero auxiliar w, apunte a sig(q).

En forma grfica:






En seudocdigo: q = primero
w = sig(q)

4) Preguntamos: dato(p) < dato(q)?
Respuesta: No
Preguntar: w NULO?
Respuesta: S
Mientras la respuesta es S, preguntamos: dato(p) < dato(w)?
Respuesta: No
Hacer que el puntero q, apunte a w.
Hacer que el puntero w, apunte a sig(q)

En forma grfica:






p
sig(p)
ant(p)
p
sig(p) 4
ant(p)
NULO
1
NULO
primero
2
q
w
q w
NULO
1
NULO
primero
2
q
w
UNSM: FISI: LP1-Ing. Humberto Valdera Rodrguez 2014 6

En seudocdigo: q = w
w = sig(q)

Los punteros q y w, avanzan hasta que la respuesta de la pregunta w NULO?, sea
No, entonces se procede a insertar el elemento al final de la lista, de la siguiente
manera:
Hacer que sig(q), apunte al nuevo nodo.
Hacer que sig(p), apunte a NULO.
Hacer que ant(p), apunte a ant(q)

En forma grfica:












En seudocdigo: sig(q) = p
sig(p) = NULO
ant(p) = ant(q)

5) Resultado final:























4 NULO 1
NULO
primero
2
NULO
1
NULO
primero
2
w
q
p
sig(p) 4
ant(p)
UNSM: FISI: LP1-Ing. Humberto Valdera Rodrguez 2014 7

Insertar elemento en el INTERMEDIO de una LDE
El proceso es el siguiente:
1) Crear un nuevo nodo, haciendo que un puntero auxiliar p, apunte al nuevo nodo.

En forma grfica:




En seudocdigo: p = nuevo nodo

2) Ingresar el dato en el nuevo nodo, haciendo que dato(p) capture al dato ingresado.

En forma grfica:




En seudocdigo: leer: dato(p)

3) Preguntamos: primero = NULO?
Respuesta: No
Hacer que un puntero auxiliar q, apunte al primero.
Hacer que un puntero auxiliar w, apunte a sig(q).

En forma grfica:






En seudocdigo: q = primero
w = sig(q)

4) Preguntamos: dato(p) < dato(q)?
Respuesta: No
Preguntar: w NULO?
Respuesta: S
Mientras la respuesta es S, preguntamos: dato(p) < dato(w)?
Respuesta: No
Hacer que el puntero q, apunte a w.
Hacer que el puntero w, apunte a sig(q)

En forma grfica:






p
sig(p)
ant(p)
p
sig(p) 3
ant(p)
q
w
q w
q
w
4 NULO 1
NULO
primero
2
4 NULO 1
NULO
primero
2
UNSM: FISI: LP1-Ing. Humberto Valdera Rodrguez 2014 8

En seudocdigo: q = w
w = sig(q)

Los puntero q y w, avanzan hasta que la respuesta de la pregunta dato(p) <
dato(w)?, sea S, entonces se procede a insertar el elemento en el intermedio
respectivo de la lista, de la siguiente manera:
Hacer que sig(p), apunte a w.
Hacer que sig(q), apunte al nuevo nodo.
Hacer que ant(p), apunte a ant(w)
Hacer que ant(w), apunte al nuevo nodo.

En forma grfica:














En seudocdigo: sig(p) = w
sig(q) = p
ant(p) = ant(w)
ant(w) = p

5) Resultado final:














q
w
4 NULO 1
NULO
primero
2
p
sig(p) 3
ant(p)
3 4 NULO 1
NULO
primero
2

You might also like