Professional Documents
Culture Documents
1
Arrays en Java
• Se definen y utilizan con el operador de
indexación corchetes [ ]
• Es un objeto más su identificador es una
referencia.
• Arrays dinámicos, cuando llamamos al
constructor decidimos el tamaño.
• length, miembro intrínseco, sólo se puede
consultar, indica cuántos elementos hay en el
array.
• Siempre se controlan los rangos.
Curso 03-04 Teoría de la programación (TP) - 4
Estructuras de Datos
2
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.
• Podemos escribir código de ordenación para
cada tipo no se puede reutilizar.
• Algoritmo de ordenación coches:
[…]
if (coche1.cilindrada() > coche2.cilindrada())
[…]
• Algoritmo de ordenación aviones:
[…]
if (avion1.verPasajeros() > avion2.verPasajeros())
[…]
3
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.
• Object top()
– Devuelve el elemento más recientemente insertado.
• boolean estaVacia()
– Comprueba si la pila está vacía.
• void vaciar()
– Vacía la pila.
DsTools
Interfaz
Pila.java
Curso 03-04 Teoría de la programación (TP) - 10
Estructuras de Datos
Listas
• Lista, es una colección de elementos de
información dispuestos en un cierto orden.
El número 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
4
Soporte de Java para listas
• En Java se puede trabajar con el concepto
colección (Collection): grupo de elementos
individuales, a los que se puede aplicar
alguna regla.
• Una lista (List) es un tipo de colección que
contiene elementos en una secuencia
concreta.
• Java incluye dos clases que implementan
el interfaz List: ArrayList y LinkedList.
Curso 03-04 Teoría de la programación (TP) - 13
Estructuras de Datos
Operaciones de Collection
– System.out.println(), visualizar colección.
– add(), añadir un elemento.
– contains(), comprueba si existe un elemento.
– isEmpty(), comprueba si está vacío.
– iterator(), devuelve un iterador.
– size(), devuelve el número de elementos del
contenedor.
– remove(), elimina un elemento del contenedor.
• Clase auxiliar que permite realizar más
operaciones: java.util.Collections.
Curso 03-04 Teoría de la programación (TP) - 14
Estructuras de Datos
l.add(new Integer(8));
l.add(new Integer(3));
…
l.add(new Integer(1));
5
Cola de prioridad
• Estructura de datos que permite guardar
elementos ordenador de menor a mayor.
• Acceder rápidamente al elemento menor de una
colección y poder extraerlo.
• ¿Por qué no utilizar un árbol binario de
búsqueda?
– Árboles binarios innecesariamente potentes.
– Rendimiento pobre en el caso peor.
– Requieren almacenar dos referencias en cada nodo.
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á vacía.
• void vaciar()
– Vacía la cola. DsTools
Interfaz
ColaPrioridad.java
Curso 03-04 Teoría de la programación (TP) - 17
Estructuras de Datos
Resumen
Estructura Acceso Otras características
6
Á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
jerárquica.
• Un árbol tiene las siguientes características:
– Un nodo es distinguido como la raíz.
– Todo nodo c, excepto la raíz, 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 raíz a cada nodo. El
número de aristas que deben atravesarse es la
longitud del camino.
DsTools
Grafos (I)
• Un grafo, es un conjunto de nodos unidos
por un conjunto de líneas o flechas.
– Grafos dirigidos, lo nodo están unidos
mediante flechas llamadas aristas.
– Grafos no dirigidos, los nodos están unidos
mediante líneas sin indicación de dirección,
también se llaman aristas.
• En los dos tipos, las secuencias de aristas
pueden formar caminos y ciclos.
Curso 03-04 Teoría de la programación (TP) - 20
Estructuras de Datos
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
conjunto de aristas. DsTools
7
Bibliografía
• 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ª edición.
Prentice Hall 2002. [Cap. 9 y Cap. 4 final]
• Arnold, Gosling, Holmes. El Lenguaje de
Programación Java. 3ª edición. Addison Wesley
2001.