LISTAS DOBLEMENTE ENCADENADAS

7,042 views

Published on

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.

Published in: Education, Travel, Business
1 Comment
2 Likes
Statistics
Notes
  • gracias!!!! encerio muchas gracias, llevo semanas buscando como hacerlas y solo tienen la teoria y tu me has salvado la vida gracias de verdad
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
7,042
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
164
Comments
1
Likes
2
Embeds 0
No embeds

No notes for slide

LISTAS DOBLEMENTE ENCADENADAS

  1. 1. 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 <ul><li>La estructura esta clasificada con tres elementos: </li></ul><ul><li>El tipo de Estructura se llama Nodo </li></ul><ul><li>Nodo  anterior hace referencia a la dirección de otro nodo </li></ul><ul><li>Nodo  siguiente hace referencia a la dirección de otro nodo </li></ul><ul><li>Nodo  dato es la parte en donde se almacena información. </li></ul>
  2. 2. UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos Tema: Listas Doblemente Encadenadas EJEMPLO C++: nodo 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) Struct nodo { int valor; struct nodo *anterior, struct nodo *siguiente, }; Struct nodo *cab, *cola, *nuev o;
  3. 3. UNIVERSIDAD ANTONIO NARIÑO Estructuras 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
  4. 4. UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos Tema: Listas Doblemente Encadenadas NULL EJEMPLO C++: Primer Nodo: nuevo = Localizar nuevo  anterior = NULL; Struct nodo { int valor; struct nodo *anterior, struct nodo *siguiente, }; Struct nodo *cab, *cola, *nuevo; nuevo nuevo  anterior 001A Dirección de la Estructura
  5. 5. UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos Tema: Listas Doblemente Encadenadas NULL NULL EJEMPLO C++: Primer Nodo: nuevo = Localizar nuevo  anterior = NULL; nuevo  siguiente = NULL; Struct nodo { int valor; struct nodo *anterior, struct nodo *siguiente, }; Struct nodo *cab, *cola, *nuevo; nuevo nuevo  anterior nuevo  siguiente 001A Dirección de la Estructura
  6. 6. UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos Tema: Listas Doblemente Encadenadas 50 NULL NULL EJEMPLO C++: 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 . Struct nodo { int valor; struct nodo *anterior, struct nodo *siguiente, }; Struct nodo *cab, *cola, *nuevo; nuevo nuevo  anterior nuevo  siguiente nuevo  valor 001A Dirección de la Estructura
  7. 7. UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos Tema: Listas Doblemente Encadenadas 50 NULL NULL EJEMPLO C++: 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; Struct nodo { int valor; struct nodo *anterior, struct nodo *siguiente, }; Struct nodo *cab, *cola, *nuevo; nuevo nuevo  anterior nuevo  siguiente nuevo  valor 001A Dirección de la Estructura cab
  8. 8. UNIVERSIDAD ANTONIO NARIÑ O Estructuras de Datos Tema: Listas Doblemente Encadenadas 50 NULL NULL EJEMPLO C++: 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; Struct nodo { int valor; struct nodo *anterior, struct nodo *siguiente, }; Struct nodo *cab, *cola, *nuevo; nuevo nuevo  anterior nuevo  siguiente nuevo  valor 001A Dirección de la Estructura cab cola
  9. 9. 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. nodo Nodo  anterior Nodo  siguiente Nodo  dato q q  anterior q  siguiente q  valor q q  anterior q  siguiente q  valor Alimentar a la Izquierda Alimentar a la Derecha nuevo cab cola Primer Nodo Ing. Heiver Cuesta Dávila
  10. 10. INICIO AGREGAR A LA IZQUIERDA
  11. 11. UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos Tema: Listas Doblemente Encadenadas 50 null null No ta: Si desea alimentar nodos a la Izquierda la estructura se alimenta así: nodo Nodo  anterior Nodo  siguiente Nodo  dato q q  anterior q  siguiente q  valor Alimentar a la Izquierda nuevo cab cola Primer Nodo q = Localizar Ejemplo de ingreso a la Izquierda: Ing. Heiver Cuesta Dávila q
  12. 12. UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos Tema: Listas Doblemente Encadenadas 50 null null No ta: Si desea alimentar nodos a la Izquierda la estructura se alimenta así: nodo Nodo  anterior Nodo  siguiente Nodo  dato null q q  anterior q  siguiente q  valor Alimentar a la Izquierda nuevo cab cola Primer Nodo q = Localizar q  anterior = null; 001A 002A Ejemplo de ingreso a la Izquierda: q
  13. 13. UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos Tema: Listas Doblemente Encadenadas 50 null null Nota: Si desea alimentar nodos a la Izquierda la estructura se alimenta así: nodo Nodo  anterior Nodo  siguiente Nodo  dato null null q q  anterior q  siguiente q  valor Alimentar a la Izquierda nuevo cab cola Primer Nodo q = Localizar q  anterior = null; q  siguiente = null; 001A 002A Ejemplo de ingreso a la Izquierda: q
  14. 14. UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos Tema: Listas Doblemente Encadenadas 50 null null Nota: Si desea alimentar nodos a la Izquierda la estructura se alimenta así: nodo Nodo  anterior Nodo  siguiente Nodo  dato 200 null null q q  anterior q  siguiente q  valor Alimentar a la Izquierda nuevo cab cola Primer Nodo q = Localizar q  anterior = null; q  siguiente = null; Cout << “Digitar Datos”; Cint >> q  valor; //Dato ingresado 200 001A 002A Ejemplo de ingreso a la Izquierda: q
  15. 15. UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos Tema: Listas Doblemente Encadenadas 50 null null Nota: Vamos a Proceder a Unir los Dos Nodos así: nodo Nodo  anterior Nodo  siguiente Nodo  dato 200 001A null q  anterior q  siguiente q  valor Alimentar a la Izquierda nuevo cab cola Primer Nodo q = Localizar q  anterior = null; q  siguiente = null; Cout << “Digitar Datos”; Cint >> q  valor; //Dato ingresado 200 q  siguiente = cab; 001A 002A Ejemplo de ingreso a la Izquierda: q
  16. 16. UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos Tema: Listas Doblemente Encadenadas 50 null 002A Nota: Vamos a Proceder a Unir los Dos Nodos así: nodo Nodo  anterior Nodo  siguiente Nodo  dato 200 001A null q q  anterior q  siguiente q  valor Alimentar a la Izquierda nuevo cab cola Primer Nodo q = Localizar q  anterior = null; q  siguiente = null; Cout << “Digitar Datos”; Cint >> q  valor; //Dato ingresado 200 q  siguiente = cab; cab  anterior = q; 001A 002A Ejemplo de ingreso a la Izquierda:
  17. 17. UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos Tema: Listas Doblemente Encadenadas 50 null 002A No ta: Ahora corremos la cabecera al nuevo Nodo: nodo Nodo  anterior Nodo  siguiente Nodo  dato 200 001A null q q  anterior q  siguiente q  valor Alimentar a la Izquierda nuevo cab cola Primer Nodo 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; 001A 002A Ejemplo de ingreso a la Izquierda:
  18. 18. FIN AGREGAR A LA IZQUIERDA
  19. 19. INICIO AGREGAR A LA DERECHA
  20. 20. UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos Tema: Listas Doblemente Encadenadas 50 null null Nota: Si desea alimentar nodos a la Derecha de la estructura se alimenta así: nodo Nodo  anterior Nodo  siguiente Nodo  dato q q  anterior q  siguiente q  valor Alimentar a la Derecha nuevo cola Primer Nodo q = Localizar Ejemplo de ingreso a la Derecha:
  21. 21. UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos Tema: Listas Doblemente Encadenadas 50 null null Nota: Si desea alimentar nodos a la Derecha de la estructura se alimenta así: nodo Nodo  anterior Nodo  siguiente Nodo  dato null q q  anterior q  siguiente q  valor Alimentar a la Derecha nuevo cola Primer Nodo q = Localizar q  anterior = null; 001A 003b Ejemplo de ingreso a la Derecha:
  22. 22. UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos Tema: Listas Doblemente Encadenadas 50 null null Nota: Si desea alimentar nodos a la Derecha la estructura se alimenta así: nodo Nodo  anterior Nodo  siguiente Nodo  dato null null q q  anterior q  siguiente q  valor Alimentar a la Izquierda nuevo cola Primer Nodo q = Localizar q  anterior = null; q  siguiente = null; 001A 003b Ejemplo de ingreso a la Derecha
  23. 23. UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos Tema: Listas Doblemente Encadenadas 50 null null Nota: Si desea alimentar nodos a la Derecha de la estructura se alimenta así: nodo Nodo  anterior Nodo  siguiente Nodo  dato 400 null null q q  anterior q  siguiente q  valor Alimentar a la Izquierda nuevo cola Primer Nodo q = Localizar q  anterior = null; q  siguiente = null; Cout << “Digitar Datos”; Cint >> q  valor; //Dato ingresado 400 001A 003b Ejemplo de ingreso a la Izquierda:
  24. 24. UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos Tema: Listas Doblemente Encadenadas 50 null null Nota: Vamos a Proceder a Unir los Dos Nodos así: nodo Nodo  anterior Nodo  siguiente Nodo  dato 400 NULL 001A q q  anterior q  siguiente q  valor Alimentar a la Izquierda nuevo cola Primer Nodo q = Localizar q  anterior = null; q  siguiente = null; Cout << “Digitar Datos”; Cint >> q  valor; //Dato ingresado 200 q  anterior = cola; 001A 003b Ejemplo de ingreso a la Derecha:
  25. 25. UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos Tema: Listas Doblemente Encadenadas 50 003b oo2a Nota: Vamos a Proceder a Unir los Dos Nodos así: nodo Nodo  anterior Nodo  siguiente Nodo  dato 400 NULL 001A q q  anterior q  siguiente q  valor Alimentar a la Izquierda nuevo cola Primer Nodo q = Localizar q  anterior = null; q  siguiente = null; cout << “Digitar Datos”; cint >> q  valor; //Dato ingresado 400 q  anterior = cola; cola  siguiente = q; 001A 003b Ejemplo de ingreso a la Derecha:
  26. 26. UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos Tema: Listas Doblemente Encadenadas 50 003b oo2a Nota: Ahora corremos la cola al nuevo nodo así: nodo Nodo  anterior Nodo  siguiente Nodo  dato 400 NULL 001A q q  anterior q  siguiente q  valor Alimentar a la Izquierda nuevo cola Primer Nodo 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; 001A 003b Ejemplo de ingreso a la Izquierda:
  27. 27. FIN AGREGAR A LA DERECHA
  28. 28. UNIVERSIDAD ANTONIO NARIÑO Estructuras de Datos Tema: Listas Doblemente Encadenadas 50 003b 002A Finalmente la Lista debe quedar de la siguiente manera. nodo 200 001A NULL 400 NULL 001A q Segundo nodo Tercer nodo nuevo cab cola Primer Nodo 001A 003b 002A 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.
  29. 29. GRACIAS

×