tema 3 la estructura de datos lista n.
Skip this Video
Loading SlideShow in 5 Seconds..
Tema 3: La estructura de datos Lista PowerPoint Presentation
Download Presentation
Tema 3: La estructura de datos Lista

play fullscreen
1 / 35
Download Presentation

Tema 3: La estructura de datos Lista - PowerPoint PPT Presentation

zahina
139 Views
Download Presentation

Tema 3: La estructura de datos Lista

- - - - - - - - - - - - - - - - - - - - - - - - - - - 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