Listas pilascolas edward.mejia-10-1314

26
Estructuras de datos Listas Pilas Colas Edward Mejia

description

 

Transcript of Listas pilascolas edward.mejia-10-1314

Page 1: Listas pilascolas edward.mejia-10-1314

Estructuras de datos

Listas Pilas Colas

Edward Mejia

Page 2: Listas pilascolas edward.mejia-10-1314

ListasEstructura de datos organizada de forma secuencial, homogénea y dinámica. Con dinámica nos referimos que puede crecer o decrecer en tiempo de ejecución según nuestras necesidades.

Podríamos mencionar 2 tipos de listas:Densa: la propia estructura determina cual es el

siguiente elemento de la lista. Ejemplo: arrays.Enlazadas: la posición del siguiente elemento de

la estructura la determina el elemento actual.

Page 3: Listas pilascolas edward.mejia-10-1314

Doblemente enlazada: al igual que la lista enlazada, es un TDA dinámico lineal pero, a diferencia de este, cada nodo de la lista doblemente enlazada contiene dos punteros, de forma que uno apunta al siguiente nodo y el otro al predecesor. Esta característica, permite que se pueda recorrer la lista en ambos sentidos, cosa que no es posible en las listas simples.

Page 4: Listas pilascolas edward.mejia-10-1314

La lista enlazada es un TDA que nos permite almacenar datos de una forma organizada, al igual que los vectores pero, a diferencia de estos, esta estructura es dinámica, por lo que no tenemos que saber "a prioridad" los elementos que puede contener.En una lista enlazada, cada elemento apunta al siguiente excepto el último que no tiene sucesor y el valor del enlace es null. Por ello los elementos son registros que contienen el dato a almacenar y un enlace al siguiente elemento. Los elementos de una lista, suelen recibir también el nombre de nodos de la lista.

Page 5: Listas pilascolas edward.mejia-10-1314

Para que esta estructura sea un TDA lista enlazada, debe tener unos operadores asociados que permitan la manipulación de los datos que contiene.

Los operadores básicos de una lista enlazada son:

Insertar: inserta un nodo con dato x en la lista, pudiendo realizarse esta inserción al principio o final de la lista o bien en orden.

Eliminar: elimina un nodo de la lista, puede ser según la posición o por el dato.

Buscar: busca un elemento en la lista.Localizar: obtiene la posición del nodo en la lista.Vaciar: borra todos los elementos de la lista

Page 6: Listas pilascolas edward.mejia-10-1314

Lista a base de vectoresTiene que declararse el tamaño de la lista.

Exige sobrevaloración. Consume mucho espacio.

Complejidad computacional de las operaciones:Buscar el enésimo, tiempo constanteVisualizar y Buscar, tiempo lineal.Insertar y Eliminar son costosas.

Insertar o eliminar un elemento exige, en promedio, desplazar la mitad de los valores, O(n).

La construcción de una lista o la eliminación de todos sus elementos podría exigir un tiempo cuadrático.

Page 7: Listas pilascolas edward.mejia-10-1314

Implementación de listas a base de apuntadoresCada nodo apunta al siguiente; el ultimo no apunta a nada. La lista es un puntero al primer nodo (y al ultimo). Complejidad computacional de las operaciones:

Visualizar y Buscar, tiempo lineal.Buscar el enésimo, tiempo lineal.Eliminar realiza un cambio de apuntadores y una orden nuevo,

O(1). Usa Buscar anterior cuyo tiempo de ejecución es lineal.

Insertar tras una posición P requiere una llamada a new y dos maniobras con apuntadores, O(1). Buscar la posición P podría llevar tiempo lineal.

Un nodo cabecera facilita la inserción y la eliminación al comienzo de la lista.

Page 8: Listas pilascolas edward.mejia-10-1314

Implementación de listas doblemente enlazadas

Cada nodo apunta al siguiente y al anterior.Duplica el uso de la memoria necesaria para

los punteros.Duplica el coste de manejo de punteros al

insertar y eliminar.La eliminación se simplifica.

No es necesario buscar el elemento anterior.

Page 9: Listas pilascolas edward.mejia-10-1314

Esquema de un nodo y una lista enlazada.

Page 10: Listas pilascolas edward.mejia-10-1314

Objetos reales modelados en listasLista de matriculas.Lista de artículos de un inventario.Lista de invitados.

Page 11: Listas pilascolas edward.mejia-10-1314

Tad listaTipo: Unidimensional{inv:N pertenece Z+(numeros enteros

positivos}Operaciones:

Crear_vectorint>vectorAsignar_valoresvectorxint>vectorOrdenar_vectorvectorxint>vectorDeterm_centrovectorxint>int

Page 12: Listas pilascolas edward.mejia-10-1314

pilasUna pila, es una estructura de datos en la que el último elemento en entrar es el primero en salir, lo que también se denominan estructuras LIFO(Last In, First Out).En esta estructura sólo se tiene acceso a la cabeza o cima de la pila.

Page 13: Listas pilascolas edward.mejia-10-1314

Acceso limitado al ultimo elemento insertado.

Operaciones básicas: apilar, desapilar y cima.Push: insertar la data en el tope de la pila.Pop: remueve la data del tope de la pila.Desapilar o cima en una pila vacía es un

error en el TDA pila.Quedarse sin espacio al apilar es un error

de implementación. Cada operación deberá tardar una

cantidad constante de tiempo en ejecutarse.Con independencia del numero de

elementos apiladas.

Page 14: Listas pilascolas edward.mejia-10-1314

Objetos Reales modelados en pilaProporcionan un medio ordenado de demorar

la realización de las tareas secundarias que aparecen durante la ejecución del programa.

•Suelen ir asociadas a algoritmosrecursivos.•Tipos derivados: pilas de programas,pila del analizador sintáctico (parser).

Page 15: Listas pilascolas edward.mejia-10-1314

TAD PILASInvariante:n>0Operaciones:crearPila()

Devuelve valor del tipo pila preparado para ser usado y que contiene un valor de pila vacía.Esta operación es la misma que la de las listas generales.

Precondiciones:N=0Poscondiciones:pilacread

Page 16: Listas pilascolas edward.mejia-10-1314

insertarPila(crearPila)Mediante este método se insertan datos a la pila ya creada. Con las pilas se usa el método push para insertar.

Precondiciones: pila<>nullPoscondiciones:insertarPilacompletado (datos

insertado en pila)borrarPila()

Con este método se elimina cierta pila de datosPrecondiciones:pila<>nullPoscondiciones:pilaeliminada

Page 17: Listas pilascolas edward.mejia-10-1314

ColaUna cola es una estructura de datos donde el primer elemento en entrar es el primero en salir, también denominadas estructuras FIFO (First In, First Out).

Esta estructura de datos se puede definir como una lista enlazada con acceso FIFO a la que sólo se tiene acceso al final de la lista para meter elementos y al principio de esta para sacarlos.

Page 18: Listas pilascolas edward.mejia-10-1314

Operaciones básicasinsertar, quitarPrimero y primero.Cada rutina debería ejecutarse en tiempo

constante.

Page 19: Listas pilascolas edward.mejia-10-1314

Implementación circular a base de vectoresLa implementación circular devuelve

cabeza y fin al principio delvector cuando rebasan la ultima posición.

Page 20: Listas pilascolas edward.mejia-10-1314
Page 21: Listas pilascolas edward.mejia-10-1314

Amortización de la duplicación del vectorCuando el vector no se duplica, toda operación

se realiza en tiempo constante.La complejidad de una inserción con duplicación

es O(N).La duplicación de un vector de N elementos

esta precedida, al menos, por N/2 inserciones que no duplican el vector.

Repartiendo el coste O(N) de la duplicación entre las inserciones precedentes.El coste de insertar aumenta solo en una

constante.

Page 22: Listas pilascolas edward.mejia-10-1314

Colas en vectores circulares

Page 23: Listas pilascolas edward.mejia-10-1314

Cola con prioridadesEn una cola de prioridad los elementos están

ordenados dependiendo de su prioridad, de tal forma que este disponible (para las operaciones Frente y Extraer) el elemento de máxima prioridad.

En caso de igualdad se sigue la regla FIFO, de dos elementos con igual prioridad sale primero el que primero entro.

Esto se puede conseguir bien insertando ordenadamente y extrayendo el primer elemento.

Page 24: Listas pilascolas edward.mejia-10-1314

TAD colaTipo: UnidimensionalInvariante: {Inv: N pertenece Z+}Operaciones:

Cola_Crear x int > vectorCola_Insertar vector x int x int > vectorCola_Extraer vector x int > vectorCola_Hayelementos vector > booleanCola_Eliminar vector x int > vectorCola_llena vector x int > vectorCola_Vaciar vector x int > vector

Page 25: Listas pilascolas edward.mejia-10-1314

Objetos reales modelados con colasLas colas se utilizan en muchos algoritmos y ensituaciones en las que el rendimiento de dos sistemas que se cruzan datos entre sí es más eficiente cuando no se intercambian indicativos y señales de control (handshaking) en cada transferencia.

•También almacenan temporalmente la transferencia de información, lo que permite procesarla en origen y en destino a tasas independientes.

•La cola de eventos en Java es un buen ejemplo.•Tipos derivados: colas de prioridad y flujos de datos