Vous êtes sur la page 1sur 8

Estructuras de Datos

http://eduportfolio.org/portfolios/view/83629
En la informtica, as como se lee en su nombre, es necesario poder
procesar informacin, almacenarla y modificarla. Esta informacin muchas veces
es representada a travs de los datos. El dato es el elemento primario de la
informacin y a su vez est formado por smbolos que por s mismos no tienen
valor alguno, pero que al ser unidos con otros smbolos pueden adquirir significado
significado.
Los datos estn conformados por dos tipos:
Primitivos
Compuestos
Los datos primitivos son aquellos ms simples, stos no pueden descomponerse en
partes. Ejemplos de tipos de datos podran ser los enteros, lgicos, caracteres, etc.
Los datos compuestos son los tipos de datos cuyas partes, al ser descompuestas,
tienen signficado.En esta categora caben los tipos agregados que son colecciones
de elementos de datos. Ejemplos de los tipos agregados pueden ser los arreglos,
registros y las cadenas.
Exsisten tipos de datos definidos por el usuario y stos reciben el nombre
de clases.
Los datos dan paso a un concepto que se utiliza frecuentemente en la informtica:
las estructuras de datos.
Una estructura de datos es una agregacin de tipos de datos compuestos y
atmicos en un conjunto con relaciones bien definidas. Una estructura significa un
conjunto de reglas que contienen los datos juntos.(Luis Joyanes Aguilar, 2008,
Primera Edicin Espaol, Estructuras de datos en Java, McGraw-Hill, Espaa)
Por qu utilizar estructuras de datos?
La POO se caracterizar por reutilizar componentes previamente creados, es por eso
que se utilizan estructuras de datos. Una vez que una estructura ha sido
implementada puede ser utilizada muchas veces para aplicaciones diferentes. En
algunos casos necesitaramos guardar nuestros pasos o acciones para poder
regresar sobre ellas o quizs en otro necesitaramos almacenar datos que
dependiendo de su insercin pueden ser procesados, es aqu donde entran las
estructuras de datos.
Ejemplo de arreglo bidimensional.

Tipos de estructuras de
datos
Existen dos tipos de estructuras de datos segn su forma:
Aquellas que son una combinacin de tipos de datos.
Las que son una combinacin de otras estructuras de datos
As mismo existen dos tipos de estructuras de datos segn su implementacin:

Estticas: este tipo de estructura utiliza un espacio de memoria reservado


con anterioridad a la ejecucin del programa, por ende no puede
modificarse en su ejecucin. Pero cuenta con la ventaja de ocupar casillas
continuas de memoria. Las colas y pilas pueden implementarse de esta
manera.
Dinmicas: stas no tienen limitaciones en cuanto al uso de la memoria; su
implementacin se basa en el uso de los apuntadores.
Por ltimo cabe diferenciar las estructuras de datos lineales y las no lineales.
Lineales: reciben su nombre por la manera en la que se relacionan los
elementos, uno despus de otro. Sus elementos estan organizados en una
secuencia lineal. En esta categora estn las pilas, colas y listas.
Estructuras de datos no lineales o jerrquicas: se conforman de una manera
jerrquica como indica su nombre, o por niveles. Sus nodos pueden estar
conectados a ms de un nodo, por ende no son lineales.
Los grafos y rboles son tipos de estructuras jerrquicas.

Pilas
Una pila es una estructura de datos en la cual el acceso est limitado al elemento
ms recientemente insertado. Podemos imaginarnos una pila de libros o de platos,
su funciomaniento es el mismo. Conceptualmente el ltimo elemento que se
agrega a la pila se coloca en su cima, de donde se puede tomar muy fcilmente.
Mientras que los elementos que llevan ms tiempo en la pila son ms dificiles de
acceder. En un principio los elementos que no estn en la cima son inaccesibles.
Las operaciones elementales de un pila son insertar, eliminar y buscar. Se
puede notar qe una pila puede ser utilizda para dar vuelta a una lista de
elementos.
No se puede eliminar elementos que no estn en la cima.
No se pueden insertar elementos que sea sobre la cima.
Aplicaciones para las pilas: el gestor de ventana de Windows utiliza una pila para
que, al cerrar una ventana, se muestre la anterior; tambin se utilizan pilas para
saber que cada parentsis est debidamente unido con otro al momento de
realizar operaciones; las pilas son usadas para poder regresar sobre los pasos que
se han hecho, por ejemplo para resolver laberintos en inteligencia artificial.
Ejemplo visual de una pila.

Pila implementada con arreglo:


Pila.java (834 o)

Pila implementada con listas:


Pila.java (753 o)

Colas

Dependiendo de la situacin necesitaremos encontrar y eliminar el elementos ms


recientemente encontrado, pero en otras situaciones sera la forma errnea de
proceder. Es por eso que existen lo que conocemos como colas. Podemos
imaginarnos conceptualmente a las colas como las colas de un supermercado o un
banco, donde el primer elemento que entra es el prximo en salir y el ltimo
elemento espera hasta que la cola se vace para poder ser atendido o salir.
Las operaciones bsicas de la cola son: insertar, quitar el primer elemento y
acceder al primer elemento.
Note que slo se puede insertar en la ltima posicin.
Una aplicacin prctica para las colas pueden encontrarse en el sistema de las
impresoras, las cuales imprimen el elemento que lleva ms tiempo en su lista de
impresn primero y posteriormente siguen con las que llevan menos tiempo.
Las colas tambin son utilizadas en la ejecucin de procesos de sistemas
operativos como Unix, por ejemplo.
Tipos de colas:
Circulares: son las que estn implementadas para funcionar de una manera
circular o anular, los elementos que salen pueden ser llenados por otros
elementos siempre que haya espacio.
De Prioridad: son las que dependiendo de la prioridad del elemento pueden
colocarse en el primer lugar para que su procesamiento se haga
inmediatamente.
Ejemplo visual de una cola circular.

Cola implementada con lista:


Cola.java (1.2 ko)

Cola implementada con arreglo:


Cola.java (1.6 ko)

Cola circular:
ColaC.java (1.9 ko)

Listas Enlazadas
Las listas enlazadas se caracterizan por almacenar los elementos de una forma no
contigua, en su lugar utiliza apuntadores al siguiente espacio de memoria.
Los elementos se almacenan en un nodo que contiene el objeto a utilizar y ademas
hace referencia al siguiente nodo de la lista. Cuando un nodo hace referencia
a null decimos que es el ltimo elemento.

La mayor ventaja de las listas enlazadas es su facilidad de manipulacin al


momento de insertar nuevos nodos, y al momento de recorrerlos ya que su
recorrido siempre se realiza en tiempo constante.
Cabe mencionar que con las listas enlazadas pueden implementarse tanto las colas
como las pilas, solo habra que limitar el acceso a los nodos y listo.
Las operaciones elementales de las listas son la insercin, buscar, visitar el
primer elemento y eliminar elementos.
Dentro de las listas enlazadas existen dos tipos:
Listas enlazadas simples: los nodos solamente contienen apuntadores al
siguiente nodo. Ejemplo de lista enlazada.
Listas enlazadas dobles: los nodos hacen referencia a los nodos siguientes
y adems apuntan al nodo anterios. Ejemplo de lista enlazada doble.

Clase lista:
Lista.java (4.2 ko)

rboles
Los rboles son estructuras de datos jerrquicas utilizadas con mucha frecuencia.
Los rboles estn formados por un conjunto de nodos y un conjunto de aristas que
conectan los dichos nodos.
Los rbolos con raz se caracterizan por:
Tener un nodo distinguido como raz.
Todo nodo c est conectado por medio de una arista a un nico nodo p.
Slo existe un nico camino de la raz a cada nodo.
Conceptos importantes:
Raz: es el nodo principal de un rbol, de l se desprenden el resto de los
nodos. Es el nico nodo que no tiene un padre.
Nodo Padre: son aquellos nodos que hacen referencia a otros nodos.
Nodo HIjo: son los nodos referenciados por un mismo padre.
Nodo Hoja: son los extremos del rbol, no contienen nodos hijos.
Altura: es el mximo numero de niveles de todos los nodos del rbol.
Longitud o Nivel: es la cantidad de aristas que se requieren recorrer para
llegar a un nodo en particular.
Algunas aplicaciones de los rboles se encuentran en los compiladores que crean
rboles de sintaxis; tambin se encuentran en algoritmos de compresin como el
caso de los jpeg.
Las operaciones bsicas de los rboles son: buscar, insertar y borrar.
A diferencia de las estructuras anteriores los rboles nos permiten borrar de la
posicin que deseemos.
Cabe mencionar que los rboles son grafos, pero no todos los grafos son rboles.

ABB
Los rboles binarios de bsqueda tambin conocidos como ABB son variantes de
los rboles que se caracterizan por la cantidad de hijos que contiene cada nodo,
que tal como lo dice su nombre binario son dos.
Los ABB utilizan los mismos conceptos que un rbol comun.
Los ABB estn estructurados de tal manera que dependiendo de el valor que
contenga el nodo raz, los nodos hijos estn a la derecha o izquierda de ese nodo;
si se agrega un dato con un valor menor al de la raz, ste se agregar como hijo
izquierdo del nodo raz; en cambio si se agrega un nodo con un valor mayor a
aqul que se encuentra en la raz se agregar al lado derecho del nodo raz. Lo
mismo ocurre para los nodos que se agreguen con posterioridad de manera que los
ABB toman una estructura particular con gran potencial.
Gracias a la conformacin de stos ABB, la utilidad por excelencia de los ABB es su
mtodo de bsqueda, el cual reduce el timpo de ejecucin al momento de buscar
elementos, hacindolo ms eficiente que otros mtdos de bsqueda.
Las operaciones elementales del ABB son las mismas que las de un rbol
comn: insertar, borrar, buscar y recorridos. Los recorridos de los rboles son
un gran ejemplo del uso de algoritmos recursivos.
Slo puede realizarse la insericin en los nodos hoja.
Para borrar un nodo hay dos caminos:
Referenciar el nodo deseado al nodo con valor ms grande de su rama
izquierda y borrar ese nodo.
Referencial el nodo deseado al nodo con valor ms bajo de la rama derecha
y borrar ese nodo.
Ejemplo de un ABB.
El ABB consta de tres recorridos fundamentales:
Recorrido Pre-Orden(NID):
Se visita el Nodo.
Se realiza el recorrido Pre-Orden por la rama Izquierda
Despus se realiza para la rama Derecha.
Recorrido In-Orden (IND):
Se baja por la rama Izquierda y se realiza el recorrido In-Orden.
Se visita el Nodo.
Se reliza el recorrido In-Orden para la rama Derecha.
Recorrido Post-Orden(IDN):

Se realiza el recorrido en Post-Orden por la rama Izquierda.


Se realiza el reccorido en Post-Orden por la rama Derecha.
Se visita el Nodo.

Clase ABB:
Arbol.java (9.8 ko)

Clase Nodo:
Nodo.java (1.3 ko)

AVL
Los rboles AVL son una versin mejorada de los ABB. Reciben su nombre de sus
creadores Andelson-Velskii y Landis.
Los AVL cuentan con algo que se conoce como factor de equilibrio. El factor de
equilibrio es la diferencia entre las alturas de los nodos derecho e izquierdo. Para
que un AVL se encuentre equilibrado su factor de equilibrio puede ser -1,0 o 1. En
caso de que su factor de equilibrio no se encuentre en ese rango se dice que el
rbol est desequilibrado, por lo que se hacen las rotaciones pertinentes.
Operaciones elementales: borrar, insertar, buscar y rotaciones.
Hay que tener en cuenta que una vez que se borra o se inserta un mtodo hay que
modificarlo de nuevo para que quede equilibrado.
El potencial ms grande de los AVL es su bsqueda, ya que por cada decisin que
se toma se elimina un 50% de las opciones.
Para borrar un nodo hay dos caminos:
Referenciar el nodo deseado al nodo con valor ms grande de su rama
izquierda y borrar ese nodo.
Referencial el nodo deseado al nodo con valor ms bajo de la rama derecha
y borrar ese nodo.
Tipos de rotaciones:
Simples: afectan a dos nodos, el tercero no se modifica y es necesario slo
para una rotacin.
Dobles: afectan a tres nodos. Consta de dos rotaciones simples.

Clase AVL:
ArbolAVL.java (6.6 ko)

Clase Nodo AVL:


NodoAVL.java (626 o)

Grafos
Los grafos son estructuras que nos permiten relacionar conexiones entre dos
objetos, por eso son binarias. De manera informal podemos decir que es una
coleccin de vrtices y aristas que los unen.
Definicion formal de un grafo:
Un grafo G = (V,E) est formado por un conjunto de vrtices V, y un conjunto de
aristas E. Cada arista es un par (v,w), donde v,w pertenece a V. (Mark Allen Weiss,
2000, Primera Edicin Espaol, Estructuras de datos en Java, Pearson, Espaa)

Dentro de los grafos existe lo que conocemos como caminos. Los caminos
permiten unir dos nodos a traves de varias aristas. La longitud de un camino, en
caso de que el grafo no tenga peso puede considerarse como el numero de aristas
que cruza hasta llegar al nodo deseado. En cambio, si el grafo tiene peso o costes,
la longitud del camino se determina por la suma de los costes entre aristas que le
toma llegar de un nodo a otro.
Los grafos pueden ser:
Dirigidos: son los grafos formados por aristas con sentido o direccin.
No dirigidos: son los grafos en los que se puede moverse en cualquier
direccin a travs de las aristas.
Mixto: combinacin de grafos dirigidos y grafos no dirigidos.
Adems pueden ser:
Grafos valorado: son aquellos cuyas aristas tienen un coste o peso.
Grafos no valorado: no existe coste entre las aristas.
Recorridos:
Anchura: este recorrido se lleva a cabo utilizando una cola. Se toma un nodo
inicial, se introduce en la cola y sus hijos. Luego se visita el nodo. El
proceso se repite hasta que todos los nodos han sido visitados y no se
visita un nodo dos veces.
Profundidad: en este recorrido se utiliza una pila. Se inicia con un nodo y se
visita. Posteriormente se introducen los hijos de dicho nodo y el proceso se
repite hasta que todos los nodos no repetidos hayan sido visitados.
Los sistemas GPS son una aplicacin prctica para los grafos. Tambin puede
utilizarse como una conexin entre personas, a modo de aplicacin en trabajos de
investigacin policial.
Ejemplo de un grafo.

Clase Grafo:
Grafo.java (4.1 ko)

Representacin de un grafo
Matriz de adyacencia
En la matriz de adyacencia los nodos se ubican tanto en columnas como en filas en
el mismo orden. Para cada posicion de la matriz se marca con un 1 si existe una
arista entre el nodo de la fila y el nodo de la columna. De no existir arista entre
ellos se marca con un 0 la casilla.
La matriz de adyacencia tambin puede contener valores distintos a 1 en el caso
de que represente un grafo valorado y el valor de 1 es reemplazado por el valor del
coste del arco o arista.
Ejemplo de una matriz de adyacencia.
Lista de adyacencia
Los grafos pueden representarse mediante una listas, en los cuales se unen los
elementos que estn unidos en el grafo mediante las aristas. Las listas de
adyacencia pueden parecer tediosas puesto que es ms difcil visualizar el grafo,
pero cuentan con la ventaja de que el grafo puede verse modificado el momento
de agregar algn elemento o borrar ya que su manejo de memoria es dinmico.

Matriz de cierre transitivo y cierre transitivo


Para encontrar los caminos de cierta longitud, se utiliza la relacion entre la matriz
de adyacencia y la matriz de caminos. La matriz de caminos se define como la
matriz de adyaciencia eleveda a una potencia n con 0 < n < N, donde N es el
numero total de nodos. La matriz de cierre transitivo es aquella que determina en
su totalidad la conexin entre nodos, es decir la matriz de adyacencia elevada a la
potencia N.

Algoritmos
Algoritmo de Djikstra
Este algoritmo determina el camino ms corto de un nodo hacia cualquier otro
nodo. Se aplica a los grafos valorados. Tiene un enfoque voraz.
Este algoritmo inicia con un nodo, partiendo de l se identifica cada arista y su
peso. Luego se marca la arista de menor peso y sucede lo mismo para esa arista y
el nodo original ya que ste tambin ha sido marcado. El algoritmo contina
marcando las aristas de menor peso hasta alcanzar el nodo deseado. En caso de
que un peso sea igual al otro ste no se toma en cuenta.
Algoritmo Recursivo
Es el tipo de algoritmo que resuelve problemas mediantes llamadas a s mismo, es
decir recurre a s mismo. Al momento de presentarse la solucin trivial del
problema que el algoritmo conoce se llega al caso base de la recursividad,
evitando que el algoritmo recurra infinitamente.
Ejemplo de una funcin recursiva que calcula el factorial de un numero. Se sabe
que el caso base es cuando se calcula el factorial de 0 que es 1 o bien el factorial
de 1 que tambin es 1.
Algoritmo Voraz
Se llaman de esta manera porque tienen una aproximacin que se conoce como
voraz, que consiste en visitar un elemento una nica vez y dependiendo de lo
deseado el elemento se selecciona o se descarta. Por lo general estos elementos
son marcados con el fin de llegar a la solucin ptima del problema, es por eso que
sus decisiones son basadas en la opcin ms ptima que se puede tomar.
Ejemplos de algoritmos voraces: Kruskal, Dijkstra, Prim.

Vous aimerez peut-être aussi