La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Tema 3: La estructura de datos Lista

Presentaciones similares


Presentación del tema: "Tema 3: La estructura de datos Lista"— 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 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 Laboratorio DEI 2003/04 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> Laboratorio DEI 2003/04 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 Laboratorio DEI 2003/04 Estructura de Datos

5 TAD Lista: Posibles implementaciones
Estática Dinámica Enlazada Secuencial Laboratorio DEI 2003/04 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> Laboratorio DEI 2003/04 Estructura de Datos

7 TAD Lista Simple: 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) Laboratorio DEI 2003/04 Estructura de Datos

8 Listas Simples Aclaraciones a las operaciones: Ejemplo y pseudocódigo
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) Laboratorio DEI 2003/04 Estructura de Datos

9 Laboratorio DEI 2003/04 Estructura de Datos

10 Laboratorio DEI 2003/04 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 denominados clave 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>>} Laboratorio DEI 2003/04 Estructura de Datos

12 TAD Lista Ordenada: 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) Laboratorio DEI 2003/04 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>>} Laboratorio DEI 2003/04 Estructura de Datos

14 TAD Pila: operaciones Creación de pila Comprobación del estado
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) Laboratorio DEI 2003/04 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 Laboratorio DEI 2003/04 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>>} Laboratorio DEI 2003/04 Estructura de Datos

17 TAD Cola: operaciones Creación de cola Comprobación del estado
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) Laboratorio DEI 2003/04 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 Laboratorio DEI 2003/04 Estructura de Datos

19 TAD Cola: casos particulares
Colas de prioridad Laboratorio DEI 2003/04 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 Laboratorio DEI 2003/04 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>>} Laboratorio DEI 2003/04 Estructura de Datos

22 LDE: operaciones Creación de una lista Comprobación del estado
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) Laboratorio DEI 2003/04 Estructura de Datos

23 Técnicas de Simplificación
A B C D 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 Laboratorio DEI 2003/04 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  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 Laboratorio DEI 2003/04 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 Laboratorio DEI 2003/04 Estructura de Datos

26 Centinelas: ejemplos Buscar(comienzo, 15, centinela, posición)
Laboratorio DEI 2003/04 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 último INICIO nodo  nuevoNodo(valorClave, valorInfo) asignarEnlace(nodo, posterior) SI listaVacia(anterior) ENTONCES nombreLista.comienzo nodo SI NO asignarEnlace(anterior, nodo) FIN SI FIN Laboratorio DEI 2003/04 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 Laboratorio DEI 2003/04 Estructura de Datos

29 Cabeceras: ejemplos insertarElemento (cabecera, 7)
Laboratorio DEI 2003/04 Estructura de Datos

30 Cabecera + centinela Usar el mismo nodo auxiliar como cabecera y centinela Convertir la lista en circular Laboratorio DEI 2003/04 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) Laboratorio DEI 2003/04 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 Laboratorio DEI 2003/04 Estructura de Datos

33 Listas intrusivas independientes
Información duplicada Pueden producirse inconsistencias y se ocupa más espacio Laboratorio DEI 2003/04 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 Laboratorio DEI 2003/04 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 Laboratorio DEI 2003/04 Estructura de Datos


Descargar ppt "Tema 3: La estructura de datos Lista"

Presentaciones similares


Anuncios Google