P. 1
LISTAS DOBLEMENTE ENCADENAS EN C++

LISTAS DOBLEMENTE ENCADENAS EN C++

|Views: 404|Likes:
Guia con la Explicación de Listas Doblemente Encadenadas en C++. La guia tiene ejemplos de como alimenta la lista ingresando datos a la Izquierda o derecha del nodo principal.
Guia con la Explicación de Listas Doblemente Encadenadas en C++. La guia tiene ejemplos de como alimenta la lista ingresando datos a la Izquierda o derecha del nodo principal.

More info:

Published by: Heiver Cuesta Dávila on May 24, 2011
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PPT, PDF, TXT or read online from Scribd
See more
See less

12/21/2013

pdf

text

original

UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos

Tema: Listas Doblemente Encadenadas

Las Listas doblemente encadenas tienen la siguiente estructura:
nodo

Nodo anterior

Nodo siguiente

Nodo dato

La estructura esta clasificada con tres elementos: 1. El tipo de Estructura se llama Nodo 2. Nodo anterior hace referencia a la dirección de otro nodo 3. Nodo siguiente hace referencia a la dirección de otro nodo 4. Nodo dato es la parte en donde se almacena información.

UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos
Tema: Listas Doblemente Encadenadas

EJEMPLO C++:
nodo

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

Nodo anterior

Nodo siguiente

Nodo valor

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)

UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos
Tema: Listas Doblemente Encadenadas

EJEMPLO C++:
Struct nodo { int valor; struct nodo *anterior, struct nodo *siguiente, }; Struct nodo *cab, *cola, *nuevo;

001A nuevo

Dirección de la Estructura

Primer Nodo:
nuevo = Localizar

UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos
Tema: Listas Doblemente Encadenadas

EJEMPLO C++:
Struct nodo { int valor; struct nodo *anterior, struct nodo *siguiente, }; Struct nodo *cab, *cola, *nuevo;

001A nuevo

Dirección de la Estructura

nuevo anterior

NULL

Primer Nodo:
nuevo = Localizar nuevo anterior = NULL;

UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos
Tema: Listas Doblemente Encadenadas

EJEMPLO C++:
Struct nodo { int valor; struct nodo *anterior, struct nodo *siguiente, }; Struct nodo *cab, *cola, *nuevo;

001A nuevo

Dirección de la Estructura

nuevo anterior

NULL

NULL

nuevo siguiente

Primer Nodo:
nuevo = Localizar nuevo anterior = NULL; nuevo siguiente = NULL;

UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos
Tema: Listas Doblemente Encadenadas

EJEMPLO C++:
Struct nodo { int valor; struct nodo *anterior, struct nodo *siguiente, }; Struct nodo *cab, *cola, *nuevo;

001A nuevo

Dirección de la Estructura

nuevo anterior

NULL

50
nuevo valor

NULL

nuevo siguiente

Primer Nodo:
nuevo = Localizar nuevo anterior = NULL; nuevo siguiente = NULL; Cout << Favor ingresar Datos ; Cint >> nuevo valor; //supongamos que el usuario ingresa el Número 50 y Enter.

UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos
Tema: Listas Doblemente Encadenadas

EJEMPLO C++:
Struct nodo { int valor; struct nodo *anterior, struct nodo *siguiente, }; Struct nodo *cab, *cola, *nuevo;

001A

Dirección de la Estructura

nuevo anterior

NULL

50

NULL

nuevo siguiente

nuevo valor

Primer Nodo:

nuevo cab

nuevo = Localizar nuevo anterior = NULL; nuevo siguiente = NULL; Cout << Favor ingresar Datos ; Cint >> nuevo valor; //supongamos que el usuario ingresa el Número 50 y Enter. cab = nuevo;

UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos
Tema: Listas Doblemente Encadenadas

EJEMPLO C++:
Struct nodo { int valor; struct nodo *anterior, struct nodo *siguiente, }; Struct nodo *cab, *cola, *nuevo;

001A

Dirección de la Estructura

nuevo anterior

nuevo siguiente

NULL

50

NULL

nuevo valor

Primer Nodo:

nuevo = Localizar nuevo anterior = NULL; nuevo siguiente = NULL; Cout << Favor ingresar Datos ; Cint >> nuevo valor; //supongamos que el usuario ingresa el Número 50 y Enter. cab = nuevo; cola = nuevo;

nuevo cab cola

UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos
Tema: Listas Doblemente Encadenadas

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

Nodo anterior

Nodo siguiente

Alimentar a la Izquierda
q Nodo dato

Alimentar a la Derecha
q

nuevo cab cola
q anterior q valor q siguiente q anterior q valor q siguiente

Ing. Heiver Cuesta Dávila

INICIO AGREGAR A LA IZQUIERDA

UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos
Tema: Listas Doblemente Encadenadas Ejemplo de ingreso a la Izquierda:

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

Nodo anterior

null

50
Nodo dato

null

Nodo siguiente

Alimentar a la Izquierda
q

nuevo cab cola
q anterior q valor q siguiente

q = Localizar

q

Ing. Heiver Cuesta Dávila

UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos
Tema: Listas Doblemente Encadenadas Ejemplo de ingreso a la Izquierda:

No ta: Si desea alimentar nodos a la Izquierda la estructura se alimenta así:
Primer Nodo 001A
nodo

Nodo anterior

null

50
Nodo dato

null

Nodo siguiente

002A Alimentar a la Izquierda
q

null
q anterior q valor q siguiente

nuevo cab cola

q = Localizar q anterior = null;

q

UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos
Tema: Listas Doblemente Encadenadas Ejemplo de ingreso a la Izquierda:

Nota: Si desea alimentar nodos a la Izquierda la estructura se alimenta así:
Primer Nodo 001A
nodo

Nodo anterior

null

50
Nodo dato

null

Nodo siguiente

002A Alimentar a la Izquierda
q

null
q anterior q valor

null
q siguiente

nuevo cab cola

q = Localizar q anterior = null; q siguiente = null;

q

UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos
Tema: Listas Doblemente Encadenadas Ejemplo de ingreso a la Izquierda:

Nota: Si desea alimentar nodos a la Izquierda la estructura se alimenta así:
Primer Nodo 001A
nodo

Nodo anterior

null

50
Nodo dato

null

Nodo siguiente

002A Alimentar a la Izquierda
q

null 200 null
q anterior q valor q siguiente

nuevo cab cola

q

q = Localizar q anterior = null; q siguiente = null; Cout << Digitar Datos ; Cint >> q valor; //Dato ingresado 200

UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos
Tema: Listas Doblemente Encadenadas Ejemplo de ingreso a la Izquierda:

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

Primer Nodo 001A
nodo

Nodo siguiente

002A Alimentar a la Izquierda

null 200
q anterior q valor

001A

null

50
Nodo dato

null q = Localizar q anterior = null; q siguiente = null; Cout << Digitar Datos ; Cint >> q valor; //Dato ingresado 200 q siguiente = cab;

q siguiente

nuevo cab cola

UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos
Tema: Listas Doblemente Encadenadas Ejemplo de ingreso a la Izquierda:

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

Primer Nodo 001A
nodo

Nodo siguiente

002A Alimentar a la Izquierda

null 200
q anterior q valor

001A

002A

50
Nodo dato

null q = Localizar q anterior = null; q siguiente = null; Cout << Digitar Datos ; Cint >> q valor; //Dato ingresado 200 q siguiente = cab; cab anterior = q;

q siguiente q

nuevo cab cola

UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos
Tema: Listas Doblemente Encadenadas Ejemplo de ingreso a la Izquierda:

No ta: Ahora corremos la cabecera al nuevo Nodo:
Nodo anterior

Primer Nodo 001A
nodo

Nodo siguiente

002A Alimentar a la Izquierda

null 200
q anterior q valor

001A

002A

50
Nodo dato

null q = Localizar q anterior = null; q siguiente = null; Cout << Digitar Datos ; Cint >> q valor; //Dato ingresado 200 q siguiente = cab; cab anterior = q; cab = q;

q siguiente

cab

q

nuevo cola

FIN AGREGAR A LA IZQUIERDA

INICIO AGREGAR A LA DERECHA

UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos
Tema: Listas Doblemente Encadenadas Ejemplo de ingreso a la Derecha:

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

Nodo anterior

null

50
Nodo dato

null

Nodo siguiente

Alimentar a la Derecha
q

nuevo cola
q anterior q valor q siguiente

q = Localizar

UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos
Tema: Listas Doblemente Encadenadas Ejemplo de ingreso a la Derecha:

Nota: Si desea alimentar nodos a la Derecha de la estructura se alimenta así:
Primer Nodo 001A
nodo

Nodo anterior

null

50
Nodo dato

null

Nodo siguiente

003b Alimentar a la Derecha
q

nuevo

q = Localizar q anterior = null;

cola

null
q anterior q valor q siguiente

UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos
Tema: Listas Doblemente Encadenadas Ejemplo de ingreso a la Derecha

Nota: Si desea alimentar nodos a la Derecha la estructura se alimenta así:
Primer Nodo 001A
nodo

Nodo anterior

null

50
Nodo dato

null

Nodo siguiente

003b Alimentar a la Izquierda
q

nuevo

q = Localizar q anterior = null; q siguiente = null;

cola

null
q anterior q valor

null
q siguiente

UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos
Tema: Listas Doblemente Encadenadas Ejemplo de ingreso a la Izquierda:

Nota: Si desea alimentar nodos a la Derecha de la estructura se alimenta así:
Primer Nodo 001A
nodo

Nodo anterior

null

50
Nodo dato

null

Nodo siguiente

003b Alimentar a la Izquierda
q

q = Localizar q anterior = null; q siguiente = null; Cout << Digitar Datos ; Cint >> q valor; //Dato ingresado 400

nuevo cola

null 400 null
q anterior q valor q siguiente

UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos
Tema: Listas Doblemente Encadenadas Ejemplo de ingreso a la Derecha:

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

Primer Nodo 001A
nodo

Nodo siguiente

null

50
Nodo dato

null

003b Alimentar a la Izquierda

q = Localizar q anterior = null; q siguiente = null; Cout << Digitar Datos ; Cint >> q valor; //Dato ingresado 200 q anterior = cola;

nuevo cola

001A

400
q valor

NULL

q anterior

q siguiente

q

UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos
Tema: Listas Doblemente Encadenadas Ejemplo de ingreso a la Derecha:

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

Primer Nodo 001A
nodo

Nodo siguiente

003b Alimentar a la Izquierda

oo2a

50
Nodo dato

003b

001A

400
q valor

NULL

q anterior

q siguiente q

nuevo

q = Localizar q anterior = null; q siguiente = null; cout << Digitar Datos ; cint >> q valor; //Dato ingresado 400 q anterior = cola; cola siguiente = q;

cola

UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos
Tema: Listas Doblemente Encadenadas Ejemplo de ingreso a la Izquierda:

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

Primer Nodo 001A
nodo

Nodo siguiente

003b Alimentar a la Izquierda

oo2a

50
Nodo dato

003b

001A

400
q valor

NULL

q anterior

q siguiente

q = Localizar q anterior = null; q siguiente = null; Cout << Digitar Datos ; Cint >> q valor; //Dato ingresado 200 q anterior = cola; cola siguiente = q; cola = q;

nuevo

cola

q

FIN AGREGAR A LA DERECHA

UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos
Tema: Listas Doblemente Encadenadas

Finalmente la Lista debe quedar de la siguiente manera.
002A Segundo nodo 001A Primer Nodo
nodo

003b Tercer nodo

NULL

200

001A

002A

50

003b

001A

400

NULL

cab

q

cola

nuevo

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 seguirse Moviendo para el extremo que les corresponde.

GRACIAS

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->