29
UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos Tema: Listas Doblemente Encadenadas Las Listas doblemente encadenas tienen la siguiente estructur nodo Nodoanterior Nodosiguiente Nododato La estructura esta clasificada con tres elementos: 1.El tipo de Estructura se llama Nodo 2.Nodoanterior hace referencia a la dirección de otro nodo 3.Nodosiguiente hace referencia a la dirección de otro nodo 4.Nododato es la parte en donde se almacena información.

LISTAS DOBLEMENTE ENCADENADAS

Embed Size (px)

DESCRIPTION

Guía Práctica de Listas Doblemente Encadenadas. Hay ejemplos de como alimentar una lista; tanto a la izquierda como a la derecha del nodo principal.

Citation preview

Page 1: LISTAS DOBLEMENTE ENCADENADAS

UNIVERSIDAD ANTONIO NARIÑOEstructuras de Datos

Tema: Listas Doblemente Encadenadas

Las Listas doblemente encadenas tienen la siguiente estructura:nodo

Nodoanterior Nodosiguiente

Nododato

La estructura esta clasificada con tres elementos:

1.El tipo de Estructura se llama Nodo2.Nodoanterior hace referencia a la dirección de otro nodo3.Nodosiguiente hace referencia a la dirección de otro nodo4.Nododato es la parte en donde se almacena información.

Page 2: LISTAS DOBLEMENTE ENCADENADAS

UNIVERSIDAD ANTONIO NARIÑOEstructuras de Datos

Tema: Listas Doblemente Encadenadas

EJEMPLO C++:nodo

Nodoanterior Nodosiguiente

Nodovalor

Pedir memoria para los nodos:

Tenemos que definir una constante con el tipo de estructura para que nos reserve memoria dinámica

#define Localizar = (struct *nodo) malloc (size(struct nodo)

Struct nodo { int valor; struct nodo *anterior, struct nodo *siguiente, };

Struct nodo *cab, *cola, *nuevo;

Page 3: LISTAS DOBLEMENTE ENCADENADAS

UNIVERSIDAD ANTONIO NARIÑOEstructuras de Datos

Tema: Listas Doblemente Encadenadas

EJEMPLO C++:

Primer Nodo:

nuevo = Localizar

Struct nodo { int valor; struct nodo *anterior, struct nodo *siguiente, };

Struct nodo *cab, *cola, *nuevo;

nuevo

001A Dirección de la Estructura

Page 4: LISTAS DOBLEMENTE ENCADENADAS

UNIVERSIDAD ANTONIO NARIÑOEstructuras de Datos

Tema: Listas Doblemente Encadenadas

NULL

EJEMPLO C++:

Primer Nodo:

nuevo = Localizarnuevoanterior = NULL;

Struct nodo { int valor; struct nodo *anterior, struct nodo *siguiente, };

Struct nodo *cab, *cola, *nuevo;

nuevo

nuevoanterior

001A Dirección de la Estructura

Page 5: LISTAS DOBLEMENTE ENCADENADAS

UNIVERSIDAD ANTONIO NARIÑOEstructuras de Datos

Tema: Listas Doblemente Encadenadas

NULLNULL

EJEMPLO C++:

Primer Nodo:

nuevo = Localizarnuevoanterior = NULL;nuevosiguiente = NULL;

Struct nodo { int valor; struct nodo *anterior, struct nodo *siguiente, };

Struct nodo *cab, *cola, *nuevo;

nuevo

nuevoanterior nuevosiguiente

001A Dirección de la Estructura

Page 6: LISTAS DOBLEMENTE ENCADENADAS

UNIVERSIDAD ANTONIO NARIÑOEstructuras de Datos

Tema: Listas Doblemente Encadenadas

50 NULLNULL

EJEMPLO C++:

Primer Nodo:

nuevo = Localizarnuevoanterior = NULL;nuevosiguiente = NULL;Cout << “Favor ingresar Datos”;Cint >> nuevovalor; //supongamos que el usuario ingresa el Número 50 y Enter.

Struct nodo { int valor; struct nodo *anterior, struct nodo *siguiente, };

Struct nodo *cab, *cola, *nuevo;

nuevo

nuevoanterior nuevosiguiente

nuevovalor

001A Dirección de la Estructura

Page 7: LISTAS DOBLEMENTE ENCADENADAS

UNIVERSIDAD ANTONIO NARIÑOEstructuras de Datos

Tema: Listas Doblemente Encadenadas

50 NULLNULL

EJEMPLO C++:

Primer Nodo:

nuevo = Localizarnuevoanterior = NULL;nuevosiguiente = NULL;Cout << “Favor ingresar Datos”;Cint >> nuevovalor; //supongamos que el usuario ingresa el Número 50 y Enter.cab = nuevo;

Struct nodo { int valor; struct nodo *anterior, struct nodo *siguiente, };

Struct nodo *cab, *cola, *nuevo;

nuevo

nuevoanterior nuevosiguiente

nuevovalor

001A Dirección de la Estructura

cab

Page 8: LISTAS DOBLEMENTE ENCADENADAS

UNIVERSIDAD ANTONIO NARIÑOEstructuras de Datos

Tema: Listas Doblemente Encadenadas

50 NULLNULL

EJEMPLO C++:

Primer Nodo:

nuevo = Localizarnuevoanterior = NULL;nuevosiguiente = NULL;Cout << “Favor ingresar Datos”;Cint >> nuevovalor; //supongamos que el usuario ingresa el Número 50 y Enter.cab = nuevo;cola = nuevo;

Struct nodo { int valor; struct nodo *anterior, struct nodo *siguiente, };

Struct nodo *cab, *cola, *nuevo;

nuevo

nuevoanteriornuevosiguiente

nuevovalor

001A Dirección de la Estructura

cabcola

Page 9: LISTAS DOBLEMENTE ENCADENADAS

UNIVERSIDAD ANTONIO NARIÑOEstructuras de Datos

Tema: Listas Doblemente Encadenadas

No ta:En las listas doblemente encadenas podemos adicionar nodos tanto a la derecha como a la izquierda.

nodo

Nodoanterior Nodosiguiente

Nododatoq

qanterior q siguienteqvalor

q

qanterior q siguienteqvalor

Alimentar a la Izquierda Alimentar a la Derecha

nuevocabcola

Primer Nodo

Ing. Heiver Cuesta Dávila

Page 10: LISTAS DOBLEMENTE ENCADENADAS

INICIOAGREGAR A LA IZQUIERDA

Page 11: LISTAS DOBLEMENTE ENCADENADAS

UNIVERSIDAD ANTONIO NARIÑOEstructuras de Datos

Tema: Listas Doblemente Encadenadas

50 nullnull

No ta:Si desea alimentar nodos a la Izquierda la estructura se alimenta así:

nodo

Nodoanterior Nodosiguiente

Nododatoq

qanterior q siguienteqvalor

Alimentar a la Izquierda

nuevocabcola

Primer Nodo

q = Localizar

Ejemplo de ingreso a la Izquierda:

Ing. Heiver Cuesta Dávila

q

Page 12: LISTAS DOBLEMENTE ENCADENADAS

UNIVERSIDAD ANTONIO NARIÑOEstructuras de Datos

Tema: Listas Doblemente Encadenadas

50 nullnull

No ta:Si desea alimentar nodos a la Izquierda la estructura se alimenta así:

nodo

Nodoanterior Nodosiguiente

Nododato

null

q

qanterior q siguienteqvalor

Alimentar a la Izquierdanuevocabcola

Primer Nodo

q = Localizarqanterior = null;

001A

002A

Ejemplo de ingreso a la Izquierda:

q

Page 13: LISTAS DOBLEMENTE ENCADENADAS

UNIVERSIDAD ANTONIO NARIÑOEstructuras de Datos

Tema: Listas Doblemente Encadenadas

50 nullnull

Nota:Si desea alimentar nodos a la Izquierda la estructura se alimenta así:

nodo

Nodoanterior Nodosiguiente

Nododato

nullnull

q

qanterior q siguienteqvalor

Alimentar a la Izquierdanuevocabcola

Primer Nodo

q = Localizarqanterior = null;qsiguiente = null;

001A

002A

Ejemplo de ingreso a la Izquierda:

q

Page 14: LISTAS DOBLEMENTE ENCADENADAS

UNIVERSIDAD ANTONIO NARIÑOEstructuras de Datos

Tema: Listas Doblemente Encadenadas

50 nullnull

Nota:Si desea alimentar nodos a la Izquierda la estructura se alimenta así:

nodo

Nodoanterior Nodosiguiente

Nododato

200 nullnull

q

qanterior q siguienteqvalor

Alimentar a la Izquierdanuevocabcola

Primer Nodo

q = Localizarqanterior = null;qsiguiente = null;Cout << “Digitar Datos”;Cint >> qvalor; //Dato ingresado 200

001A

002A

Ejemplo de ingreso a la Izquierda:

q

Page 15: LISTAS DOBLEMENTE ENCADENADAS

UNIVERSIDAD ANTONIO NARIÑOEstructuras de Datos

Tema: Listas Doblemente Encadenadas

50 nullnull

Nota:Vamos a Proceder a Unir los Dos Nodos así:

nodo

Nodoanterior Nodosiguiente

Nododato

200 001Anull

qanterior q siguienteqvalor

Alimentar a la Izquierda

nuevocabcola

Primer Nodo

q = Localizarqanterior = null;qsiguiente = null;Cout << “Digitar Datos”;Cint >> qvalor; //Dato ingresado 200qsiguiente = cab;

001A002A

Ejemplo de ingreso a la Izquierda:

q

Page 16: LISTAS DOBLEMENTE ENCADENADAS

UNIVERSIDAD ANTONIO NARIÑOEstructuras de Datos

Tema: Listas Doblemente Encadenadas

50 null002A

Nota:Vamos a Proceder a Unir los Dos Nodos así:

nodo

Nodoanterior Nodosiguiente

Nododato

200 001Anull

q

qanterior q siguienteqvalor

Alimentar a la Izquierda

nuevocabcola

Primer Nodo

q = Localizarqanterior = null;qsiguiente = null;Cout << “Digitar Datos”;Cint >> qvalor; //Dato ingresado 200qsiguiente = cab;cabanterior = q;

001A002A

Ejemplo de ingreso a la Izquierda:

Page 17: LISTAS DOBLEMENTE ENCADENADAS

UNIVERSIDAD ANTONIO NARIÑOEstructuras de Datos

Tema: Listas Doblemente Encadenadas

50 null002A

No ta:Ahora corremos la cabecera al nuevo Nodo:

nodo

Nodoanterior Nodosiguiente

Nododato

200 001Anull

q

qanterior q siguienteqvalor

Alimentar a la Izquierda

nuevocab

cola

Primer Nodo

q = Localizarqanterior = null;qsiguiente = null;Cout << “Digitar Datos”;Cint >> qvalor; //Dato ingresado 200qsiguiente = cab;cabanterior = q;cab = q;

001A002A

Ejemplo de ingreso a la Izquierda:

Page 18: LISTAS DOBLEMENTE ENCADENADAS

FINAGREGAR A LA IZQUIERDA

Page 19: LISTAS DOBLEMENTE ENCADENADAS

INICIOAGREGAR A LA DERECHA

Page 20: LISTAS DOBLEMENTE ENCADENADAS

UNIVERSIDAD ANTONIO NARIÑOEstructuras de Datos

Tema: Listas Doblemente Encadenadas

50 nullnull

Nota:Si desea alimentar nodos a la Derecha de la estructura se alimenta así:

nodo

Nodoanterior Nodosiguiente

Nododatoq

qanterior q siguienteqvalor

Alimentar a la Derecha

nuevo

cola

Primer Nodo

q = Localizar

Ejemplo de ingreso a la Derecha:

Page 21: LISTAS DOBLEMENTE ENCADENADAS

UNIVERSIDAD ANTONIO NARIÑOEstructuras de Datos

Tema: Listas Doblemente Encadenadas

50 nullnull

Nota:Si desea alimentar nodos a la Derecha de la estructura se alimenta así:

nodo

Nodoanterior Nodosiguiente

Nododato

null

q

qanterior q siguienteqvalor

Alimentar a la Derecha

nuevo

cola

Primer Nodo

q = Localizarqanterior = null;

001A

003b

Ejemplo de ingreso a la Derecha:

Page 22: LISTAS DOBLEMENTE ENCADENADAS

UNIVERSIDAD ANTONIO NARIÑOEstructuras de Datos

Tema: Listas Doblemente Encadenadas

50 nullnull

Nota:Si desea alimentar nodos a la Derecha la estructura se alimenta así:

nodo

Nodoanterior Nodosiguiente

Nododato

nullnull

q

qanterior q siguienteqvalor

Alimentar a la Izquierdanuevo

cola

Primer Nodo

q = Localizarqanterior = null;qsiguiente = null;

001A

003b

Ejemplo de ingreso a la Derecha

Page 23: LISTAS DOBLEMENTE ENCADENADAS

UNIVERSIDAD ANTONIO NARIÑOEstructuras de Datos

Tema: Listas Doblemente Encadenadas

50 nullnull

Nota:Si desea alimentar nodos a la Derecha de la estructura se alimenta así:

nodo

Nodoanterior Nodosiguiente

Nododato

400 nullnull

q

qanterior q siguienteqvalor

Alimentar a la Izquierdanuevo

cola

Primer Nodo

q = Localizarqanterior = null;qsiguiente = null;Cout << “Digitar Datos”;Cint >> qvalor; //Dato ingresado 400

001A

003b

Ejemplo de ingreso a la Izquierda:

Page 24: LISTAS DOBLEMENTE ENCADENADAS

UNIVERSIDAD ANTONIO NARIÑOEstructuras de Datos

Tema: Listas Doblemente Encadenadas

50 nullnull

Nota:Vamos a Proceder a Unir los Dos Nodos así:

nodo

Nodoanterior Nodosiguiente

Nododato

400 NULL001A

q

qanterior q siguienteqvalor

Alimentar a la Izquierda

nuevo

cola

Primer Nodo

q = Localizarqanterior = null;qsiguiente = null;Cout << “Digitar Datos”;Cint >> qvalor; //Dato ingresado 200qanterior = cola;

001A

003b

Ejemplo de ingreso a la Derecha:

Page 25: LISTAS DOBLEMENTE ENCADENADAS

UNIVERSIDAD ANTONIO NARIÑOEstructuras de Datos

Tema: Listas Doblemente Encadenadas

50 003boo2a

Nota:Vamos a Proceder a Unir los Dos Nodos así:

nodo

Nodoanterior Nodosiguiente

Nododato

400 NULL001A

q

qanterior q siguienteqvalor

Alimentar a la Izquierda

nuevo

cola

Primer Nodo

q = Localizarqanterior = null;qsiguiente = null;cout << “Digitar Datos”;cint >> qvalor; //Dato ingresado 400qanterior = cola;colasiguiente = q;

001A 003b

Ejemplo de ingreso a la Derecha:

Page 26: LISTAS DOBLEMENTE ENCADENADAS

UNIVERSIDAD ANTONIO NARIÑOEstructuras de Datos

Tema: Listas Doblemente Encadenadas

50 003boo2a

Nota:Ahora corremos la cola al nuevo nodo así:

nodo

Nodoanterior Nodosiguiente

Nododato

400 NULL001A

q

qanterior q siguienteqvalor

Alimentar a la Izquierda

nuevo cola

Primer Nodo

q = Localizarqanterior = null;qsiguiente = null;Cout << “Digitar Datos”;Cint >> qvalor; //Dato ingresado 200qanterior = cola;colasiguiente = q;cola = q;

001A 003b

Ejemplo de ingreso a la Izquierda:

Page 27: LISTAS DOBLEMENTE ENCADENADAS

FINAGREGAR A LA DERECHA

Page 28: LISTAS DOBLEMENTE ENCADENADAS

UNIVERSIDAD ANTONIO NARIÑOEstructuras de Datos

Tema: Listas Doblemente Encadenadas

50 003b002A

Finalmente la Lista debe quedar de la siguiente manera.

nodo

200 001ANULL 400 NULL001A

q

Segundo nodo Tercer nodo

nuevocabcola

Primer Nodo001A 003b002A

Vemos que los apuntadores cab y cola se han movido para cada extremo.Si seguimos alimentando la Lista no olvidar que cab y cola deben seguirseMoviendo para el extremo que les corresponde.

Page 29: LISTAS DOBLEMENTE ENCADENADAS

GRACIAS