Descargar la presentación
La descarga está en progreso. Por favor, espere
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
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.