Teoría de la Programación [TP

]

Estructuras de Datos para los Algoritmos
Juan Ramón Pérez Pérez

Curso 03-04

Teoría de la programación (TP) Estructuras de Datos

1

Necesidad de las estructuras de datos
• Los algoritmos requieren una representación apropiada de los datos para lograr ser eficientes. • Esta representación junto con las operaciones permitidas se llama estructura de datos.

Curso 03-04

Teoría de la programación (TP) Estructuras de Datos

2

Matrices, pilas y colas
• Matriz (array), estructura de datos que consta de un número fijo de elementos del mismo tipo.
– Vectores, matrices unidimensionales.

• Pila, LIFO (Last In Fisrt Out) estructura de datos en la cual el acceso está limitado al elemento más recientemente insertado. • Cola, FIFO (First In First Out) permite acceder al elemento más antiguo.
Curso 03-04 Teoría de la programación (TP) Estructuras de Datos 3

1

binarySearch(). realiza copia superficial. copia datos de un array en otro.Arrays en Java • Se definen y utilizan con el operador de indexación corchetes [ ] • Es un objeto más su identificador es una referencia. miembro intrínseco. • System. convierte el array en un contenedor tipo lista de Java. fill(). compara la igualdad de dos arrays. Curso 03-04 Teoría de la programación (TP) Estructuras de Datos 6 2 . indica cuántos elementos hay en el array.util. – Acceso: matriz[2][0] – Devolver un array: String[][] conjuntoCadenas() Curso 03-04 Teoría de la programación (TP) Estructuras de Datos 5 Operaciones con arrays • java. • Siempre se controlan los rangos. ordena un array. rellena un array con un valor. sort().arraycopy(). • length. Curso 03-04 Teoría de la programación (TP) Estructuras de Datos 4 Arrays multidimensionales en Java – Declaración: int [][] – Construcción: int [][] matriz= new int [3][4]. clase que implementa un conjunto de métodos estáticos que permiten realizar operaciones con arrays: – – – – – equals(). cuando llamamos al constructor decidimos el tamaño. sólo se puede consultar. asList(). busca un dato en un array ordenado.Arrays. • Arrays dinámicos.

lang. el algoritmo general de ordenación permanece igual.Comparable.verPasajeros() > avion2. • Algoritmo de ordenación genérico: […] if (Comparable1.cilindrada()) […] • Algoritmo de ordenación aviones: […] if (avion1. – Se debe implementar el método compare() Curso 03-04 Teoría de la programación (TP) Estructuras de Datos Ejemplo Reverse.java 9 3 . • Algoritmo de ordenación coches: […] if (coche1. • La parte del código que varía la encapsulamos en la propia clase. • Podemos escribir código de ordenación para cada tipo no se puede reutilizar. lo que cambia es la forma de comparar los objetos.cilindrada() > coche2.java – Si tenemos que ordenar una clase que no implementa comparable o no debemos emplear este tipo de comparación.Diseño de la ordenación de arrays • Problema de escribir código de ordenación genérico: debemos llevar a cabo comparaciones basadas en el tipo del objeto. – Interfaz con un único método compareTo() • Segunda forma: Ejemplo CompType. – Crear una clase separada que implementa la interfaz Comparator.verPasajeros()) […] Curso 03-04 Teoría de la programación (TP) Estructuras de Datos 7 Diseño de la ordenación de arrays • Podemos “separar los elementos que cambian de los que permanecen igual”.comparar(Comparable2)>0) […] Curso 03-04 Teoría de la programación (TP) Estructuras de Datos 8 Comparación para la ordenación • Primera forma de proporcionar esto: – La clase a ordenar debe implementar la interfaz java.

El número de elementos no suele estar fijado. • Object extraer() – Devuelve y borra el elemento más antiguo de la cola. Interfaz Pila. • void vaciar() – Vacía la cola. • Object verPrimero() – Devuelve el elemento más antiguo de la cola. • void vaciar() – Vacía la pila. • boolean estaVacia() – Comprueba si la pila está vacía. • boolean estaVacia() – Comprueba si la cola está vacía. en vez de un vector de posiciones consecutivas. Interfaz Cola.Operaciones con pilas • void push(Object x) – Inserta un nuevo elemento en la pila. si no está llena • Object pop() – Devuelve y borra el elemento más recientemente insertado. es una colección de elementos de información dispuestos en un cierto orden. DsTools Curso 03-04 Teoría de la programación (TP) Estructuras de Datos 12 4 .java Curso 03-04 Teoría de la programación (TP) Estructuras de Datos DsTools 10 Operaciones con colas • void insertar(Object x) – Inserta un nuevo elemento en la cola. • Object top() – Devuelve el elemento más recientemente insertado. • Lista enlazada.java Curso 03-04 Teoría de la programación (TP) Estructuras de Datos DsTools 11 Listas • Lista. los elementos se almacenan de forma no contigua. ni suele estar limitado por anticipado.

• Java incluye dos clases que implementan el interfaz List: ArrayList y LinkedList.add(new Integer(1)).Collections. System. visualizar colección. contains(). a los que se puede aplicar alguna regla. comprueba si está vacío.add(new Integer(8)).java 15 5 . l.add(new Integer(3)). l.iterator().hasNext()) { ent= (Integer)i. devuelve el número de elementos del contenedor. size(). isEmpty(). iterator(). } } } Curso 03-04 Teoría de la programación (TP) Estructuras de Datos PruebaIteradorLista. – remove().*.next(). añadir un elemento.println(). Curso 03-04 Teoría de la programación (TP) Estructuras de Datos 13 Operaciones de Collection – – – – – – System. add().out. … l. Integer ent= null. public class PruebaIteradorLista { public static void main(String[] args) { List l= new ArrayList().out. devuelve un iterador. while (i. Curso 03-04 Teoría de la programación (TP) Estructuras de Datos 14 Recorrido de una colección utilizando un iterador import java. comprueba si existe un elemento. • Clase auxiliar que permite realizar más operaciones: java. Iterator i= l. • Una lista (List) es un tipo de colección que contiene elementos en una secuencia concreta. elimina un elemento del contenedor.util.Soporte de Java para listas • En Java se puede trabajar con el concepto colección (Collection): grupo de elementos individuales.util.println(ent).

insertar() O(1) en promedio. 18 Pilas Colas Listas enlazadas Colas de prioridad Curso 03-04 6 . – Rendimiento pobre en el caso peor. • Acceder rápidamente al elemento menor de una colección y poder extraerlo. – Requieren almacenar dos referencias en cada nodo. • ¿Por qué no utilizar un árbol binario de búsqueda? – Árboles binarios innecesariamente potentes. Curso 03-04 Teoría de la programación (TP) Estructuras de Datos 16 Cola de prioridad • void insertar(Comparable x) – Inserta un nuevo elemento en la cola. Sólo insertar y extraer el más antiguo.java 17 Resumen Estructura Arrays Acceso A cualquier elemento: a[i] O(1) Al más reciente: extraer() O(1) Al más antiguo: extraer() O(1) A cualquier elemento: O(n) Al menor: buscarMin() O(1) extraer() O(log n) Teoría de la programación (TP) Estructuras de Datos Otras características De tamaño fijo. • Comparable extraer() – Devuelve y borra el elemento menor de la cola. • void vaciar() – Vacía la cola. Las operaciones de inserción y borrado son sencillas. • Comparable buscarMin() – Devuelve el elemento menor de la cola. Sólo insertar y extraer el más reciente. O(log n) en el caso peor. • boolean estaVacia() – Comprueba si la cola está vacía. Se complican las operaciones de inserción y borrado. Curso 03-04 Teoría de la programación (TP) Estructuras de Datos DsTools Interfaz ColaPrioridad.Cola de prioridad • Estructura de datos que permite guardar elementos ordenador de menor a mayor. • boolean estaLlena() – Comprueba si la cola está llena.

p es el padre de c. • Un grafo es fuertemente conexo si se puede pasar desde cualquier nodo hasta cualquier otro siguiendo una secuencia de aristas. DsTools Curso 03-04 Teoría de la programación (TP) Estructuras de Datos 19 Grafos (I) • Un grafo. – Grafos no dirigidos. respetando el sentido de las flechas. • En los dos tipos. – Todo nodo c. los nodos están unidos mediante líneas sin indicación de dirección. • Formalmente un grafo es una pareja G=<N. de forma que se obtiene una estructura jerárquica. – Hay un único camino desde la raíz a cada nodo. está conectado por medio de una arista a un único nodo p. las secuencias de aristas pueden formar caminos y ciclos. – Grafos dirigidos. excepto la raíz. lo nodo están unidos mediante flechas llamadas aristas. independientemente del sentido. Curso 03-04 Teoría de la programación (TP) Estructuras de Datos 21 7 . • Un árbol tiene las siguientes características: – Un nodo es distinguido como la raíz.A> en donde N es un conjunto de nodos y A es un DsTools conjunto de aristas. y c es uno de los hijos de p. El número de aristas que deben atravesarse es la longitud del camino.Árboles • Un árbol está formado por un conjunto de nodos y un conjunto de aristas que conectan pares de nodos. también se llaman aristas. Curso 03-04 Teoría de la programación (TP) Estructuras de Datos 20 Grafos (II) • Un grafo es conexo si se puede llegar desde cualquier nodo hasta cualquier otro siguiendo una secuencia de aristas. es un conjunto de nodos unidos por un conjunto de líneas o flechas.

El Lenguaje de Programación Java. Bratley. P. 9 y Cap.. Estructuras de datos]. Prentice Hall 1997. Holmes. Gosling. • Brassard. 3ª edición. Estructuras de datos]. Prentice Hall 2002. Curso 03-04 Teoría de la programación (TP) Estructuras de Datos 22 8 . Piensa en Java. [Cap 6. [Cap 5. Fundamentos de Alforitmia. 2ª edición. Mark Allen. [Cap. • Bruce Eckel. Addison Wesley 2001. Addison Wesley 2000. G. Estructuras de datos en Java.Bibliografía • Weiss. 4 final] • Arnold.

Sign up to vote on this title
UsefulNot useful