La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Tema 3: La estructura de datos Lista Estructuras de Datos Ingeniería en Informática Universidad Carlos III de Madrid Laboratorio DEI Curso 2003/04.

Presentaciones similares


Presentación del tema: "Tema 3: La estructura de datos Lista Estructuras de Datos Ingeniería en Informática Universidad Carlos III de Madrid Laboratorio DEI Curso 2003/04."— Transcripción de la presentación:

1 Tema 3: La estructura de datos Lista Estructuras de Datos Ingeniería en Informática Universidad Carlos III de Madrid Laboratorio DEI Curso 2003/04

2 Laboratorio DEI2003/04Estructura de DatosListas - 2 Listas: descripción lógica LISTA = colección de elementos homogéneos entre los que existe una relación lineal Cada elemento de la lista, a excepción del primero, tiene un único predecesor Cada elemento de la lista, a excepción del último, tiene un único sucesor Nodos y enlaces

3 Laboratorio DEI2003/04Estructura de DatosListas - 3 Listas: descripción lógica Orden de nodos afecta a la función de acceso Según orden de inserción Según clave Ejemplo Lista de calificaciones ::= + { } ::= > + >

4 Laboratorio DEI2003/04Estructura de DatosListas - 4 Listas: descripción lógica Listas Arrays Listas son flexibles y permiten cambio de implementación Operaciones Insertar, Borrar, Modificar, etc. Tipos de listas Simples Ordenadas Pilas Colas Doblemente enlazadas (LDE) Circulares

5 Laboratorio DEI2003/04Estructura de DatosListas - 5 TAD Lista: Posibles implementaciones EstáticaDinámica EnlazadaSecuencial

6 Laboratorio DEI2003/04Estructura de DatosListas - 6 Listas Simples Lista Simple = colección de elementos homogéneos cuya relación lineal es determinada por la posición del elemento en la lista Comienzo + Enlace al siguiente ( puntero) Definición: ::= + { } ::= + ::= >{ >} ::= ( > | NULL) :: =

7 Laboratorio DEI2003/04Estructura de DatosListas - 7 TAD Lista Simple: operaciones asignarInfo(referenciaNodo, valorInformacion) asignarEnlace(referenciaNodo, valorEnlace) Modificación de los nodos info(referenciaNodo) Informacion siguiente(referenciaNodo) enlace Acceso a los nodos recorrer(nombreLista Recorrido de la lista buscar(nombreLista, dato) informacion buscar(nombreLista, dato) referenciaNodo pertenece(nombreLista,informacion) Booleano borrar(nombreLista, valorInfo) Borrado de nodos insertar(nombreLista, valorInfo, posicion) insertar(nombreLista, valorInfo) listaVacia(nombreLista) Booleano listaVacia(referenciaNodo) Booleano listaLlena(nombreLista) Booleano Comprobación del estado crearLista (nombreLista) Creación de una lista Inserción de nodos Búsqueda de un nodo

8 Laboratorio DEI2003/04Estructura de DatosListas - 8 Listas Simples Aclaraciones a las operaciones: listaLlena sólo tiene sentido si lista es acotada acceso y modificación serán métodos get y put Ejemplo y pseudocódigo insertar (nombreLista, valorInfo, posición) insertar (nombreLista, valorInfo) borrar (nombreLista, valorInfo) buscar (nombreLista, dato) información recorrer (nombreLista)

9 Laboratorio DEI2003/04Estructura de DatosListas - 9

10 Laboratorio DEI2003/04Estructura de DatosListas - 10

11 Laboratorio DEI2003/04Estructura de DatosListas - 11 Listas Ordenadas La posición de cada nodo viene determinada por el valor de uno o más campos obligatorios de información del nodo denominados clave No se permite tener dos nodos con la misma clave Definición ::= + { } ::= ::= ( > | NULL) ::= + + ::= >{ >} ::= { >}

12 Laboratorio DEI2003/04Estructura de DatosListas - 12 TAD Lista Ordenada: operaciones asignarClave(referenciaNodo, valorClave) asignarInfo(referenciaNodo, valorInformacion) asignarEnlace(referenciaNodo, valorEnlace) Modificación de los nodos clave(referenciaNodo) Clave info(referenciaNodo) Informacion siguiente(referenciaNodo) enlace Acceso a los nodos recorrer(nombreLista Recorrido de la lista buscar(nombreLista, valorClave) Informacion buscar(nombreLista, valorClave) ReferenciaNodo pertenece(nombreLista,valorClave) Booleano borrar(nombreLista, valorClave) Borrado de nodos insertar(nombreLista, valorClave, valorInfo) listaVacia(nombreLista) Booleano listaVacia(referenciaNodo) Booleano listaLlena(nombreLista) Booleano Comprobación del estado crearLista (nombreLista) Creación de una lista Inserción de nodos Búsqueda de un nodo

13 Laboratorio DEI2003/04Estructura de DatosListas - 13 Pilas Pila = colección ordenada de elementos homogéneos en la que sólo se pueden añadir y eliminar elementos por el principio de la misma (cabecera) filosofía LIFO Definición ::= + { } ::= ::= ( > | NULL) ::= + ::= >{ >}

14 Laboratorio DEI2003/04Estructura de DatosListas - 14 TAD Pila: operaciones pop(nombrePila) informacion Extracción de nodos push(nombrePila, valorInfo) Inserción de nodos pilaVacia(nombrePila) Booleano pilaLlena(nombrePila) Booleano Comprobación del estado crearPila (nombrePila) Creación de pila asignarInfo(referenciaNodo, valorInformacion) asignarEnlace(referenciaNodo, valorEnlace) Modificación de los nodos info(referenciaNodo) Informacion siguiente(referenciaNodo) Enlace Acceso a los nodos cabecera(nombrePila) informacion Acceso a la cabecera* * Opcional: Accede a la cabecera sin eliminarla

15 Laboratorio DEI2003/04Estructura de DatosListas - 15 TAD Pila: ejemplos de aplicación Vuelta atrás en un navegador web Comando undo en un editor Secuencia de métodos activos en la Java Virtual Machine: main() { int i = 5; foo(i); } foo(int j) { int k; k = j+1; bar(k); } bar(int m) { … } bar PC = 1 m = 6 foo PC = 3 j = 5 k = 6 main PC = 2 i = 5 Cuando se invoca un método, se inserta en la pila una nueva entrada Por cada método se guardan: variables locales valor devuelto contador de programa Cuando el método finaliza se saca ese elemento de la pila y se devuelve el control al método que esté en la cabecera

16 Laboratorio DEI2003/04Estructura de DatosListas - 16 Colas Cola = colección ordenada de elementos homogéneos en la que sólo se pueden añadir elementos por el final y se eliminan por el principio (frente) filosofía FIFO Definición ::= + + { } ::= ::= ( > | NULL) ::= ::= + ::= >{ >}

17 Laboratorio DEI2003/04Estructura de DatosListas - 17 TAD Cola: operaciones desencolar(nombreCola) informacion Extracción de nodos encolar(nombreCola, valorInfo) Inserción de nodos colaVacia(nombreCola) Booleano colaLlena(nombreCola) Booleano Comprobación del estado crearCola (nombreCola) Creación de cola asignarInfo(referenciaNodo, valorInformacion) asignarEnlace(referenciaNodo, valorEnlace) Modificación de los nodos info(referenciaNodo) Informacion siguiente(referenciaNodo) Enlace Acceso a los nodos cabecera(nombreCola) informacion Acceso a la cabecera* * Opcional: Accede a la cabecera sin eliminarla

18 Laboratorio DEI2003/04Estructura de DatosListas - 18 TAD Cola: casos particulares Colas circulares Implementación estática como array Referencia al primero y al último Aritmética módulo C (Capacidad de la cola) Llevar la cuenta del número de elementos

19 Laboratorio DEI2003/04Estructura de DatosListas - 19 TAD Cola: casos particulares Colas de prioridad

20 Laboratorio DEI2003/04Estructura de DatosListas - 20 TAD Cola: ejemplos de aplicación Listas de espera Acceso a recursos compartidos dedicados (v.g., impresoras) Multiprogramación de la CPU

21 Laboratorio DEI2003/04Estructura de DatosListas - 21 Listas Doblemente Enlazadas (LDE) Relación lineal en ambos sentidos Enlace a predecesor y antecesor en cada nodo Recorrido puede ser en ambos sentidos Pueden ser simples u ordenadas Definición: ::= + { } :: = ::= ( > | NULL) ::= + + ::= ::= >{ >}

22 Laboratorio DEI2003/04Estructura de DatosListas - 22 LDE: operaciones Creación de una lista crearLista(nombreLista) Comprobación del estado listaVacia(nombreLista) Booleano listaVacia(referenciaNodo) Booleano listaLlena(nombreLista) Booleano Inserción de nodos insertar(nombreLista, valorInfo, posicion) insertar(nombreLista, valorInfo) Borrado de nodos borrar(nombreLista, valorInfo) Búsqueda de un nodo buscar(nombreLista, dato) informacion buscar(nombreLista, dato) referenciaNodo pertenece(nombreLista,informacion) Booleano Recorrido de la lista recorrer(nombreLista, sentido) Acceso a los nodos info(referenciaNodo) Informacion anterior(referenciaNodo) enlace siguiente(referenciaNodo) enlace Modificación de los nodos asignarInfo(referenciaNodo, valorInformacion) asignarAnterior(referenciaNodo, valorEnlace) asignarSiguiente(referenciaNodo, valorEnlace)

23 Laboratorio DEI2003/04Estructura de DatosListas - 23 Técnicas de Simplificación Algunos elementos (principio y final) se tratan como casos especiales al implementar las operaciones Rediseño de estructuras para que los elementos terminales se traten igual que el resto Estructuras auxiliares Centinelas Cabeceras ABCD

24 Laboratorio DEI2003/04Estructura de DatosListas - 24 Técnica de Simplificación (i) Búsqueda en lista ordenada: evaluar dos condiciones buscar(nombreLista, valorClave) informacion INICIO posicion nombreLista.comienzo continuar CIERTO MIENTRAS NO(listaVacia(posicion)) Y continuar) SI (clave(posicion) < valorClave) ENTONCES posicion siguiente(posicion) SI NO continuar FALSO SI(clave(posicion) = valorClave) ENTONCES DEVOLVER informacion(posicion) SI NO DEVOLVER error ese nodo no está en la lista FIN-SI FIN-SI FIN-MIENTRAS FIN

25 Laboratorio DEI2003/04Estructura de DatosListas - 25 Centinela en listas ordenadas Centinela = nodo auxiliar al final de la lista Para buscar un elemento: Colocar en el centinela el valor buscado Condición de terminación: se encuentra el valor buscado o uno mayor Si se llega al centinela, el elemento no está en la lista Ejemplo e Implementación

26 Laboratorio DEI2003/04Estructura de DatosListas - 26 Centinelas: ejemplos Buscar(comienzo, 15, centinela, posición) Buscar(comienzo, 50, centinela, posición)

27 Laboratorio DEI2003/04Estructura de DatosListas - 27 Técnica de simplificación (ii) Inserción en lista ordenada: caso especial insertarPosicion (nombreLista, valorClave, valorInfo, anterior, posterior) // Coloca el nodo entre anterior y posterior. Si anterior es vacío, entonces nodo será el primer elemento de la lista, si posterior es vacío será el último INICIO nodo nuevoNodo(valorClave, valorInfo) asignarEnlace(nodo, posterior) SI listaVacia(anterior) ENTONCES nombreLista.comienzo nodo SI NO asignarEnlace(anterior, nodo) FIN SI FIN

28 Laboratorio DEI2003/04Estructura de DatosListas - 28 Cabecera en listas ordenadas Cabecera = nodo auxiliar situado al principio de la lista, cuyos contenidos (clave e info) no pertenecen a la lista Consecuencias: No hace falta marcar comienzo No hace falta caso especial cuando lista es vacía

29 Laboratorio DEI2003/04Estructura de DatosListas - 29 Cabeceras: ejemplos insertarElemento (cabecera, 7) insertarElemento (cabecera, 1)

30 Laboratorio DEI2003/04Estructura de DatosListas - 30 Cabecera + centinela Usar el mismo nodo auxiliar como cabecera y centinela Convertir la lista en circular

31 Laboratorio DEI2003/04Estructura de DatosListas - 31 Otras técnicas de simplificación Inserción ordenada sin puntero al anterior Buscar posición del primer elemento mayor que la clave a insertar, colocar un nodo nuevo detrás e intercambiar Borrado sin puntero al anterior Buscar posición del elemento a borrar Copiar información del siguiente a esa posición Borrar el siguiente (no funciona para borrar el último elemento hay que usar centinela)

32 Laboratorio DEI2003/04Estructura de DatosListas - 32 Estructuras Intrusivas Información de interés vs. Datos de control Cómo se almacenan: Las estructuras intrusivas incluyen la información de interés entre sus elementos Las estructuras no intrusivas almacenan la información de interés en un área separada, incluyendo punteros a la misma Ejemplo: mantener 2 listas (v.g., alumnos) ordenadas por distintos campos clave k1, k2, etc. (v.g., NIA y NIF) Listas intrusivas independientes Listas intrusivas con información compartida Listas no intrusivas

33 Laboratorio DEI2003/04Estructura de DatosListas - 33 Listas intrusivas independientes Información duplicada Pueden producirse inconsistencias y se ocupa más espacio

34 Laboratorio DEI2003/04Estructura de DatosListas - 34 Listas intrusivas con info compartida Incorporar un puntero por cada clave de ordenación Hay que modificar la estructura para dar acceso a través de un nuevo campo

35 Laboratorio DEI2003/04Estructura de DatosListas - 35 Listas no intrusivas Separar info de datos de control La incorporación de nuevas listas no afecta a la definición de las previas


Descargar ppt "Tema 3: La estructura de datos Lista Estructuras de Datos Ingeniería en Informática Universidad Carlos III de Madrid Laboratorio DEI Curso 2003/04."

Presentaciones similares


Anuncios Google