Está en la página 1de 8

Teora de la Programacin [TP]

Estructuras de Datos para los Algoritmos


Juan Ramn Prez Prez

Curso 03-04

Teora de la programacin (TP) Estructuras de Datos

Necesidad de las estructuras de datos


Los algoritmos requieren una representacin apropiada de los datos para lograr ser eficientes. Esta representacin junto con las operaciones permitidas se llama estructura de datos.

Curso 03-04

Teora de la programacin (TP) Estructuras de Datos

Matrices, pilas y colas


Matriz (array), estructura de datos que consta de un nmero 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 ms recientemente insertado. Cola, FIFO (First In First Out) permite acceder al elemento ms antiguo.
Curso 03-04 Teora de la programacin (TP) Estructuras de Datos 3

Arrays en Java
Se definen y utilizan con el operador de indexacin corchetes [ ] Es un objeto ms su identificador es una referencia. Arrays dinmicos, cuando llamamos al constructor decidimos el tamao. length, miembro intrnseco, slo se puede consultar, indica cuntos elementos hay en el array. Siempre se controlan los rangos.
Curso 03-04 Teora de la programacin (TP) Estructuras de Datos 4

Arrays multidimensionales en Java


Declaracin: int [][] Construccin: int [][] matriz= new int [3][4]; Acceso: matriz[2][0] Devolver un array: String[][] conjuntoCadenas()

Curso 03-04

Teora de la programacin (TP) Estructuras de Datos

Operaciones con arrays


java.util.Arrays, clase que implementa un conjunto de mtodos estticos que permiten realizar operaciones con arrays:
equals(), compara la igualdad de dos arrays. fill(), rellena un array con un valor. sort(), ordena un array. binarySearch(), busca un dato en un array ordenado. asList(), convierte el array en un contenedor tipo lista de Java.

System.arraycopy(), copia datos de un array en otro, realiza copia superficial.


Curso 03-04 Teora de la programacin (TP) Estructuras de Datos 6

Diseo de la ordenacin de arrays


Problema de escribir cdigo de ordenacin genrico: debemos llevar a cabo comparaciones basadas en el tipo del objeto. Podemos escribir cdigo de ordenacin para cada tipo no se puede reutilizar. Algoritmo de ordenacin coches:
[] if (coche1.cilindrada() > coche2.cilindrada()) []

Algoritmo de ordenacin aviones:

[] if (avion1.verPasajeros() > avion2.verPasajeros()) []


Curso 03-04 Teora de la programacin (TP) Estructuras de Datos 7

Diseo de la ordenacin de arrays


Podemos separar los elementos que cambian de los que permanecen igual, el algoritmo general de ordenacin permanece igual, lo que cambia es la forma de comparar los objetos. La parte del cdigo que vara la encapsulamos en la propia clase. Algoritmo de ordenacin genrico:
[] if (Comparable1.comparar(Comparable2)>0) []
Curso 03-04 Teora de la programacin (TP) Estructuras de Datos 8

Comparacin para la ordenacin


Primera forma de proporcionar esto:
La clase a ordenar debe implementar la interfaz java.lang.Comparable. Interfaz con un nico mtodo compareTo()

Segunda forma:

Ejemplo CompType.java

Si tenemos que ordenar una clase que no implementa comparable o no debemos emplear este tipo de comparacin. Crear una clase separada que implementa la interfaz Comparator. Se debe implementar el mtodo compare()
Curso 03-04 Teora de la programacin (TP) Estructuras de Datos Ejemplo Reverse.java 9

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 ms recientemente insertado.

Object top()
Devuelve el elemento ms recientemente insertado.

boolean estaVacia()
Comprueba si la pila est vaca.

void vaciar()
Vaca la pila.
Interfaz Pila.java Curso 03-04 Teora de la programacin (TP) Estructuras de Datos

DsTools
10

Operaciones con colas


void insertar(Object x)
Inserta un nuevo elemento en la cola.

Object extraer()
Devuelve y borra el elemento ms antiguo de la cola.

Object verPrimero()
Devuelve el elemento ms antiguo de la cola.

boolean estaVacia()
Comprueba si la cola est vaca.

void vaciar()
Vaca la cola.
Interfaz Cola.java Curso 03-04 Teora de la programacin (TP) Estructuras de Datos

DsTools
11

Listas
Lista, es una coleccin de elementos de informacin dispuestos en un cierto orden. El nmero de elementos no suele estar fijado, ni suele estar limitado por anticipado. Lista enlazada, los elementos se almacenan de forma no contigua, en vez de un vector de posiciones consecutivas.
DsTools
Curso 03-04 Teora de la programacin (TP) Estructuras de Datos 12

Soporte de Java para listas


En Java se puede trabajar con el concepto coleccin (Collection): grupo de elementos individuales, a los que se puede aplicar alguna regla. Una lista (List) es un tipo de coleccin que contiene elementos en una secuencia concreta. Java incluye dos clases que implementan el interfaz List: ArrayList y LinkedList.
Curso 03-04 Teora de la programacin (TP) Estructuras de Datos 13

Operaciones de Collection
System.out.println(), visualizar coleccin. add(), aadir un elemento. contains(), comprueba si existe un elemento. isEmpty(), comprueba si est vaco. iterator(), devuelve un iterador. size(), devuelve el nmero de elementos del contenedor. remove(), elimina un elemento del contenedor.

Clase auxiliar que permite realizar ms operaciones: java.util.Collections.


Curso 03-04 Teora de la programacin (TP) Estructuras de Datos 14

Recorrido de una coleccin utilizando un iterador


import java.util.*; public class PruebaIteradorLista { public static void main(String[] args) { List l= new ArrayList(); l.add(new Integer(8)); l.add(new Integer(3)); l.add(new Integer(1)); Integer ent= null; Iterator i= l.iterator(); while (i.hasNext()) { ent= (Integer)i.next(); System.out.println(ent); } } } Curso 03-04
Teora de la programacin (TP) Estructuras de Datos PruebaIteradorLista.java 15

Cola de prioridad
Estructura de datos que permite guardar elementos ordenador de menor a mayor. Acceder rpidamente al elemento menor de una coleccin y poder extraerlo. Por qu no utilizar un rbol binario de bsqueda?
rboles binarios innecesariamente potentes. Rendimiento pobre en el caso peor. Requieren almacenar dos referencias en cada nodo.
Curso 03-04 Teora de la programacin (TP) Estructuras de Datos 16

Cola de prioridad
void insertar(Comparable x)
Inserta un nuevo elemento en la cola.

Comparable extraer()
Devuelve y borra el elemento menor de la cola.

Comparable buscarMin()
Devuelve el elemento menor de la cola.

boolean estaLlena()
Comprueba si la cola est llena.

boolean estaVacia()
Comprueba si la cola est vaca.

void vaciar()
Vaca la cola.
Curso 03-04 Teora de la programacin (TP) Estructuras de Datos

DsTools
Interfaz ColaPrioridad.java 17

Resumen
Estructura Arrays Acceso A cualquier elemento: a[i] O(1) Al ms reciente: extraer() O(1) Al ms antiguo: extraer() O(1) A cualquier elemento: O(n) Al menor: buscarMin() O(1) extraer() O(log n)
Teora de la programacin (TP) Estructuras de Datos

Otras caractersticas De tamao fijo. Se complican las operaciones de insercin y borrado. Slo insertar y extraer el ms reciente. Slo insertar y extraer el ms antiguo. Las operaciones de insercin y borrado son sencillas. insertar() O(1) en promedio, O(log n) en el caso peor.
18

Pilas Colas Listas enlazadas

Colas de prioridad

Curso 03-04

rboles
Un rbol est formado por un conjunto de nodos y un conjunto de aristas que conectan pares de nodos, de forma que se obtiene una estructura jerrquica. Un rbol tiene las siguientes caractersticas:
Un nodo es distinguido como la raz. Todo nodo c, excepto la raz, est conectado por medio de una arista a un nico nodo p. p es el padre de c, y c es uno de los hijos de p. Hay un nico camino desde la raz a cada nodo. El nmero de aristas que deben atravesarse es la longitud del camino.
DsTools
Curso 03-04 Teora de la programacin (TP) Estructuras de Datos 19

Grafos (I)
Un grafo, es un conjunto de nodos unidos por un conjunto de lneas o flechas.
Grafos dirigidos, lo nodo estn unidos mediante flechas llamadas aristas. Grafos no dirigidos, los nodos estn unidos mediante lneas sin indicacin de direccin, tambin se llaman aristas.

En los dos tipos, las secuencias de aristas pueden formar caminos y ciclos.
Curso 03-04 Teora de la programacin (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, independientemente del sentido. Un grafo es fuertemente conexo si se puede pasar desde cualquier nodo hasta cualquier otro siguiendo una secuencia de aristas, respetando el sentido de las flechas. Formalmente un grafo es una pareja G=<N,A> en donde N es un conjunto de nodos y A es un DsTools conjunto de aristas.
Curso 03-04 Teora de la programacin (TP) Estructuras de Datos 21

Bibliografa
Weiss, Mark Allen. Estructuras de datos en Java. Addison Wesley 2000. [Cap 6. Estructuras de datos]. Brassard, G.; Bratley, P. Fundamentos de Alforitmia. Prentice Hall 1997. [Cap 5. Estructuras de datos]. Bruce Eckel. Piensa en Java. 2 edicin. Prentice Hall 2002. [Cap. 9 y Cap. 4 final] Arnold, Gosling, Holmes. El Lenguaje de Programacin Java. 3 edicin. Addison Wesley 2001.
Curso 03-04 Teora de la programacin (TP) Estructuras de Datos 22

También podría gustarte