1 / 35

Tema 3: La estructura de datos Lista

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. Listas: descripción lógica. LISTA = colección de elementos homogéneos entre los que existe una relación lineal

zahina
Télécharger la présentation

Tema 3: La estructura de datos Lista

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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. 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 Estructura de Datos

  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 ::= <Alumno> + {<Alumno>} <Alumno>::= <<DNI>> + <<NIA>> + <Apellido1> + <Apellido2> + <Nombre> + <Calificación> Estructura de Datos

  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 Estructura de Datos

  5. TAD Lista: Posibles implementaciones Estática Dinámica Enlazada Secuencial Estructura de Datos

  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: <listaSimple> ::= <comienzo> + {<nodo>} <nodo> ::= <informacion> + <enlace> <informacion> ::= <<dato>>{<<dato>>} <enlace> ::= (<<ReferenciaNodo>> | NULL) <comienzo> :: =<enlace> Estructura de Datos

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

  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) Estructura de Datos

  9. Estructura de Datos

  10. Estructura de Datos

  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 denominadosclave • No se permite tener dos nodos con la misma clave • Definición <listaOrdenada> ::= <comienzo> + {<nodo>} <comienzo> ::= <enlace> <enlace> ::= (<<ReferenciaNodo>> | NULL) <nodo> ::= <clave> + <informacion> + <enlace> <clave> ::= <<dato>>{<<dato>>} <informacion> ::= {<<dato>>} Estructura de Datos

  12. TAD ListaOrdenada: 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, valorClave, valorInfo) Borrado de nodos borrar(nombreLista, valorClave) buscar(nombreLista, valorClave)  Informacion buscar(nombreLista, valorClave)ReferenciaNodo pertenece(nombreLista,valorClave)  Booleano Búsqueda de un nodo Recorrido de la lista recorrer(nombreLista Acceso a los nodos clave(referenciaNodo) Clave info(referenciaNodo)  Informacion siguiente(referenciaNodo)  enlace Modificación de los nodos asignarClave(referenciaNodo, valorClave) asignarInfo(referenciaNodo, valorInformacion) asignarEnlace(referenciaNodo, valorEnlace) Estructura de Datos

  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 <pila> ::= <cabecera> + {<nodo>} <cabecera> ::= <enlace> <enlace> ::= (<<ReferenciaNodo>> | NULL) <nodo> ::= <informacion> + <enlace> <informacion> ::= <<dato>>{<<dato>>} Estructura de Datos

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

  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: bar PC = 1 m = 6 • 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 main() { int i = 5; foo(i); } foo(int j) { int k; k = j+1; bar(k); } bar(int m) { … } foo PC = 3 j = 5 k = 6 main PC = 2 i = 5 Estructura de Datos

  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 <cola> ::= <frente> + <final> + {<nodo>} <frente> ::= <enlace> <enlace> ::= (<<ReferenciaNodo>> | NULL) <final> ::= <enlace> <nodo> ::= <informacion> + <enlace> < informacion > ::= <<dato>>{<<dato>>} Estructura de Datos

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

  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 Estructura de Datos

  19. TAD Cola: casos particulares • Colas de prioridad Estructura de Datos

  20. TAD Cola: ejemplos de aplicación • Listas de espera • Acceso a recursos compartidos dedicados (v.g., impresoras) • Multiprogramación de la CPU Estructura de Datos

  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: <lde> ::= <comienzo> + {<nodo>} <comienzo> :: = <enlace> <enlace> ::= (<<ReferenciaNodo>> | NULL) <nodo> ::= <informacion> + <predecesor> + <sucesor> <predecesor> ::= <enlace> <sucesor> ::= <enlace> <informacion> ::= <<dato>>{<<dato>>} Estructura de Datos

  22. LDE: operaciones Estructura de Datos

  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  A B C D Estructura de Datos

  24. Técnica de Simplificación (i) • Búsqueda en lista ordenada: evaluar dos condiciones buscar(nombreLista, valorClave)  informacion INICIO posicion  nombreLista.comienzo continuar  CIERTOMIENTRAS 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 Estructura de Datos

  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 Estructura de Datos

  26. Centinelas: ejemplos • Buscar(comienzo, 15, centinela, posición) • Buscar(comienzo, 50, centinela, posición) Estructura de Datos

  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 últimoINICIO nodo  nuevoNodo(valorClave, valorInfo) asignarEnlace(nodo, posterior)SI listaVacia(anterior) ENTONCES nombreLista.comienzo nodoSI NO asignarEnlace(anterior, nodo)FIN SIFIN Estructura de Datos

  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 Estructura de Datos

  29. Cabeceras: ejemplos • insertarElemento (cabecera, 7) • insertarElemento (cabecera, 1) Estructura de Datos

  30. Cabecera + centinela • Usar el mismo nodo auxiliar como cabecera y centinela • Convertir la lista en circular Estructura de Datos

  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) Estructura de Datos

  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 Estructura de Datos

  33. Listas intrusivas independientes • Información duplicada • Pueden producirse inconsistencias y se ocupa más espacio Estructura de Datos

  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 Estructura de Datos

  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 Estructura de Datos

More Related