Estructura de Datos Semana 3 31/08/2023 – Escuela de Ingeniería de Software Logro de la sesión Al finalizar la sesión, el estudiante: • Utiliza en forma crítica las listas enlazadas para la solución de problemas e implementa programas utilizando listas enlazadas. Estructuras de datos lineales Implementación de un TAD lineal utilizando una estructura dinámica IMPLEMENTACIÓN DE UN TAD LINEAL UTILIZANDO UNA ESTRUCTURA DINÁMICA Estructuras de datos lineales • Estructura dinámica Lucas Mary Los espacios en la memoria permiten que las órdenes físicas y lógicas puedan ser diferentes John Jim Arthur Martin Mary Cada ubicación no solo almacena (una referencia a) un objeto, sino también la referencia (dirección) a su sucesor en la Lista John Jim Arthur Martin 4 IMPLEMENTACIÓN DE UN TAD LINEAL UTILIZANDO UNA ESTRUCTURA DINÁMICA Estructuras de datos lineales • Necesitamos definir una clase, Nodo, para representar cada ubicación. La clase Nodo tiene dos atributos: • Dato o elem: es la referencia a un elemento almacenado en la Lista. Es decir, almacena la dirección de memoria donde se almacena el elemento. El tipo de datos de elem debe ser del mismo tipo que los elementos de la Lista • Next o siguiente: es la referencia al nodo que almacena el siguiente elemento en la Lista. Su tipo de datos debe ser Nodo Nodo elem next Dato siguiente ESPECIFICACIÓN DE UN TAD LISTA Estructuras de datos lineales • Especificación formal: • Secuencia de elementos {a1,a2,…,an} donde cada elemento tiene un único predecesor (excepto el primero que no tiene predecesor) y un único sucesor (excepto el último que no tiene sucesor). • Las operaciones básicas de un TAD Lista son: • Agregar un elemento a la Lista • Eliminar un elemento de la Lista • Consultar un elemento de la Lista Nodo elem next Dato siguiente ESPECIFICACIÓN DE UN TAD LISTA Estructuras de datos lineales • Especificación formal (operaciones de agregar): ESPECIFICACIÓN DE UN TAD LISTA Estructuras de datos lineales • Especificación formal (operaciones de consulta): ESPECIFICACIÓN DE UN TAD LISTA Estructuras de datos lineales • Especificación formal (operaciones de borrado): IMPLEMENTACIÓN DE UN TAD LISTA USANDO UNA LISTA SIMPLEMENTE ENLAZADA Estructuras de datos lineales First (inicio) María Pepa Juan Arturo Last(fin) Martín Listas Enlazadas El nodo o elemento contiene el dato y un enlace al siguiente nodo o elemento Nodo Enlace Enlace D E Nulo Inicio Fin 11 Comparación Listas Enlazadas vs Arreglo 12 Listas Enlazadas Una lista es una estructura de datos secuencial. En una lista enlazada: la posición del siguiente elemento de la estructura la determina el elemento actual. Es necesario almacenar al menos la posición de memoria del primer elemento. Además es dinámica, es decir, su tamaño cambia durante la ejecución del programa. Una lista enlazada se puede definir recursivamente de la siguiente manera: • Una lista enlazada es una estructura vacía o • Un elemento de información y un enlace hacia una lista (un nodo). Gráficamente se suele representar así: Estructura de una Lista Enlazada Inicio Dato Inicio Fin Nulo Si inicio o fin apuntan a nulo entonces la lista está vacía Enlace o siguiente Fin 14 Operaciones en Listas Enlazadas dato sig inicio.sig.dato = 5.25 inicio.dato = 4.15 15 Clasificación de las Listas Enlazadas 16 Clasificación de las Listas Enlazadas Las listas se pueden dividir en 4 categorias: CATEGORÍA DESCRIPCIÓN Simplemente Enlazadas Cada nodo (elemento) contiene un único enlace que conecta ese nodo al nodo siguiente o nodo sucesor. La lista es eficiente en recorridos directos (“adelante”) Doblemente enlazadas Cada nodo contiene dos enlaces, uno a su nodo predecesor y el otro a su nodo sucesor. La lista es eficiente tanto como en recorrido directo (“adelante”) como en recorrido inverso (“atras”). Circular simplemente enlazada El ultimo elemento (cola) se enlaza al primer elemento (cabeza), de tal modo que la lista puede se recorrida de modo circular (“anillo”) Circular doblemente enlazada El ultimo elemento se enlaza con el primer elemento y viceversa. Esta lista se puede recorrer en modo circular tanto en direccion directa como viceversa. Recordar….? Nodo y Puntero Puntero Aux Final Los punteros hacen referencia a un Nodo por lo 19 tanto son regularmente declarados de tipo Nodo Clase Nodo Atributos del Nodo Estructura Puntero tipo Nodo Constructor con sólo dato Constructor con dato y puntero 20 Clase Nodo Puntero Puntero siguiente Puntero Nulo inicio fin 21 Clase Lista v1 22 Uso de Lista v1 23 Clase Lista v2 24 Uso de Lista v2 25 Eliminar un nodo del inicio inicio.dato inicio.siguiente 26 Clase Lista v3 27 Uso de Lista v3 28 Eliminar un nodo del final – Clase Lista v4 fin.dato temporal.siguiente fin.siguiente 29 Uso de Lista v4 30 Otras operaciones sobre las Listas simplemente enlazadas 31 Otras operaciones sobre las Listas simplemente enlazadas 32 Eliminar un nodo del final – Clase Lista v5 33 Eliminar un nodo del final – Clase Lista v5 34 Uso de Lista v5 35 Uso de Lista v5 36 Guía de Laboratorio