Está en la página 1de 5

Alberto Len Aparicio

Algoritmos y Estructuras de Datos


Estructuras de datos
____________________________________________________________________________________________________________________

ESTRUCTURAS DE DATOS
Un Tipo de dato abstracto (TDA) es un conjunto de datos u objetos al cual se le
asocian operaciones. El TDA provee de una interfaz con la cual es posible realizar las
operaciones permitidas, abstrayndose de la manera en como estn implementadas
dichas operaciones. Esto quiere decir que un mismo TDA puede ser implementado
utilizando distintas estructuras de datos y proveer la misma funcionalidad.
El paradigma de orientacin a objetos permite el encapsulamiento de los datos y las
operaciones mediante la definicin de clases e interfaces, lo cual permite ocultar la
manera en cmo ha sido implementado el TDA y solo permite el acceso a los datos a
travs de las operaciones provistas por la interfaz.
Un programa orientado a objetos usa objetos para trabajar con datos. Estos datos
objeto se organizan en estructuras de datos dependiendo de las funciones que realiza
el programa. Una buena estructura de los objetos es crucial para realizar por ejemplo
operaciones de bsqueda, insercin u borrado de datos.
Los lenguajes de programacin orientados a objetos proporcionan estructuras de datos
comunes en libreras. Las clases de estructuras de datos en java son eficientes y
fciles de usar. Estas clases estndar incluyen arreglos, vectores, pilas, diccionarios y
tablas hash.
ARREGLOS
Un arreglo es una secuencia de variables o componentes del mismo tipo y las cuales
son acezadas mediante un ndice que en java empieza desde cero. El tamao de un
arreglo se fija cuando este es creado. El uso de un ndice que cae fuera de rango del
tamao de un arreglo produce una excepcin en tiempo de ejecucin del tipo:
ArrayIndexOutOfBoundsException. Todo arreglo es un objeto de la clase Objet, por
tanto cualquier mtodo de la clase Objet puede ser invocado por un arreglo.
Un tipo array es declarado y creado en java mediante la sintaxis:
Tipo nom_array = new tipo [tamao]
Para obtener la longitud de un arreglo se utiliza
Nom_array.length
Java soporta arreglos multidimencionales. Por ejemplo, la expresin cliente [ ][ ] es un
tipo que representa un arreglo de dos dimensiones que contendr elementos de tipo
cliente. La declaracin y creacin de un arreglo bidimensional se realiza de la misma
forma que para los arreglos normales. Por ejemplo:
Cliente [ ] [ ] man = new Cliente[3 ][20 ]
ARREGLOS MULTIDIMENSIONALES Y POLINOMIO DE DERECCIONAMIENTO
Los registros se mapean en memoria usando la posicin de sus componentes, es
decir, la direccin del componente (campo) relativa a la direccin de origen del registro.
Cuando se trabaja con arreglos de mas de una dimensin se le podra llamar una
superestructura o estructura virtual que no se mapea directamente en la que posee la
memoria de la computadora que sigue siendo un arreglo lineal (unidimensional).
El concepto de arreglo multidimensional es una generalizacin inmediata del concepto
de arreglo lineal. Un arreglo de dos dimensiones es un arreglo de arreglos. Una matriz
de m n celdas, con m renglones y n columnas es, de hecho, un arreglo de m
renglones, donde cada rengln es un arreglo de n celdas. Otra vez tenemos la

Alberto Len Aparicio


Algoritmos y Estructuras de Datos
Estructuras de datos
____________________________________________________________________________________________________________________

restriccin de que, una vez establecido el tamao en cada dimensin este es


inalterable. Sin embrago Java nos provee de la flexibilidad para diferir el
establecimiento de cada uno de los tamaos siempre y cuando se haga en orden de
izquierda a derecha. Por ejemplo:
int[ ][ ] matriz;
matriz = new int [nreng][];
for (i=0; i<nreng; i++)
matriz[i] = new int [ncols];
En el cdigo diferimos la definicin del tamao del arreglo en columnas y slo
establecimos el nmero de renglones. Luego en el ciclo se establece el nmero de
columnas de cada rengln visto como un arreglo por s mismo.
Ahora el polinomio de direccionamiento calculado por el compilador es un poco ms
complicado. El arreglo bidimensional sigue estando en un rea contigua de memoria,
pero lineal, es decir los elementos del iesimo rengln se acomodan uno tras otro luego
de los del rengln i 1 en direcciones sucesivas.
Para obtener la direccin del byte inicial de la celda en la posicin (ren, col) de un
arreglo bidimensional de m renglones y n columnas se tendra que calcular:
dir = dir matriz + (n ren + col) tam
Por supuesto se pueden definir arreglos de un nmero arbitrario de dimensiones y se
pueden acceder sus elementos haciendo uso de polinomios de direccionamiento mas
complicados. En una matriz tridimensional de i m n (alto, ancho y largo)
acomodada linealmente habra que desplazarse i x m x n celdas para llegar al piso i,
luego desplazarse j n celdas para llegar al rengln j en ese piso y finalmente recorrer k
celdas mas para llegar a la celda de coordenadas (i, j, k), es decir:
idx = (i m n + j n + k)
sera el polinomio de direccionamiento para obtener el ndice, en un arreglo lineal, de
la celda en cuestin.
VECTORES
Un vector organiza sus elementos al igual que un arreglo; en una secuencia y de igual
forma se accesa a ellos mediante un ndice.
La diferencia sustancial entre un array y un vector es que el arreglo es fijo y no puede
cambiar su tamao una vez que ha sido creado a diferencia del vector que puede
expandirse o contraerse dinmicamente en respuesta a inserciones o a borrado de
objetos en el. Otra diferencia corresponde a cerca de sus tipos de elementos, mientras
los elementos de un arreglo pueden ser valores de un tipo primitivo, un objeto vector
puede trabajar con objetos de diferentes tipos como elementos de el.
Para acceder a los elementos de un vector se utiliza el mtodo elemental (ndice). La
clase vector extiende la clase Objet e implementa las interfaces Cloneable y
Serializable. La clase vector define mtodos para insercin, eliminacin y bsqueda de
objetos en vectores. Un objeto vector utiliza la nocin size para denotar el nmero de
objetos que actualmente tiene.
Un vector es creado utilizando cualquiera de sus siguientes constructores:
Vector()
Vector(int capacidad)
Vector(int capacidad, int incremento)
El primero es por default, el segundo crea un tamao definido y el tercero define un
tamao y un incremento.

ii

Alberto Len Aparicio


Algoritmos y Estructuras de Datos
Estructuras de datos
____________________________________________________________________________________________________________________

Un programa puede accesar o cambiar la capacidad de un vector con los siguientes


mtodos de instancia de la clase Vector: int capacidad (), void ensureCapacity(int
minCapacity).
La clase Vector define mtodos de instancia para accesar a los objetos almacenados
en un vector tales como los siguientes: Objet firstElement(), Objet lastElement(), Objet
elemental(int indice), etc. La case Vector define tambin mtodos para modificar el
contenido de un vector, por ejemplo: void addElement(Objet obj),
void
insertElementAt(Objet obj, int index),etc. Y tambin define mtodos para comprobar el
estado del vector como int size(), boolean isEmty() y otros.
COLAS
Una cola es una estructura de datos donde los elementos que se almacenan se van
acomodando de forma tipo FIFO. Una cola siempre aade un elemento al final de la
lista y remueve un elemento del principio o frente de dicha lista.
La funcionalidad FIFO de una cola puede ser implementada con los mtodos de
instancia de la clase Vector tales como: addElementObjet(Object obj) que aade un
objeto obj al final de un vector y removeElementAt(0) que remueve el primer elemento
y decrementa el tamao de un vector en uno. Por lo anterior decimos que se puede
usar una instancia de una clase vector como una cola.
COLAS DE PRIORIDAD
Una cola de prioridad es un tipo de datos abstracto que almacena un conjunto de
datos que poseen una llave perteneciente a algn conjunto ordenado, y permite
insertar nuevos elementos y extraer el mximo (o el mnimo, en caso de que la
estructura se organice con un criterio de orden inverso).Dos formas simples de
implementar colas de prioridad son:
Una lista ordenada:
o Insercin: O(n)
o Extraccin de mximo: O(1)

Una lista desordenada:


o
o
o

Insercin: O(1)
Extraccin de mximo: O(n)
PILAS

PILAS
La clase Stack del paquete java.util extiende la clase Vector con mtodos de instancia
que soporta el tipo LIFO. Cuando un objeto es puesto en la pila es colocado en la parte
de arriba del stack y cuando un objeto es removido es el que esta en mas arriba.
La clase Stack define el constructor Stack(), esta clase hereda los mtodos public y
protected de la clase Vector. La propiedad LIFO de un Stack es soportada con los
mtodos push(Object obj) y pop para colocar y remover el objeto que esta en el tope
de la pila. El mtodo peek() de la clase Stack accesa al elemento que esta en el tope
de la pila sin quitarlo de ella.
iii

Alberto Len Aparicio


Algoritmos y Estructuras de Datos
Estructuras de datos
____________________________________________________________________________________________________________________

LISTAS LIGADAS
Los elementos que conforman un lista ligad son llamados nodos los cuales contienes
informacin propia y un enlace a su sucesor (liga). Existen dos tipos de ligas:
indexadas y referenciadas.
Los elementos de un array o vector pueden ser usados como una lista de nodos
ligados. El ndice del primer nodo en la lista ligada es mantenido en una variable
(heder). Los nodos en la lista ligada pueden ser acezados a partir de header y los
indices contenidos en los campos liga de los nodos.
LISTAS LIGADAS SIMPLES INDEXADAS (BASADAS EN INDICES)
La clase IndexedSinglyLinkedList tiene una clase interna Nodo definida con el cdigo
siguiente:
Class Nodo{
Object data;
Int next;
}
La clase IndexedSinglyLinkedList define dos variables de instancia: nodes y
unusedNodes a travs del cdigo:
Private Nodo[ ] nodes;
Private int unusedNodes;
Cuando una instancia de la clase IndexedSinglyLinkedList es creada, un constructor
inicializa la variable nodes con un array de nodos.
Tambin se definen algunos mtodos de instancia en la clase IndexedSinglyLinkedList
para organizar y trabajar con los objetos tales como newList() que crea un header
(cabeza) para una nueva lista ligada, addObject() que trata de encontrar un nodo no
usado en el arreglo nodes y coloca un objeto dentro de el y otros mas.
LISTAS LIGADAS SIMPLES REFERENCIADAS
El termino lista ligada usualmente se refiere a una lista ligada basada en referencias o
referenciada. La clase SinglyLinkedList implementa una lista ligada simple
referenciada.
El conjunto de mtodos de esta clase es equivalente a la clase
IndexedSinglyLinkedList. Aqu mencionaremos los mtodos hasMoreElements() y
nextElement() para la enumeracin de los datos (elementos) contenidos en una lista
simple ligada.
La clase singlyLinkedList no proporciona mtodos para borrar datos. Un mtodo de
borrado o eliminacin busca la lista ligada simple para el nodo o dato (elemento) a ser
borrado o eliminado.
HEAPS
Un heap es un rbol binario de una forma especial, que permite su almacenamiento en
un arreglo sin usar punteros.
Un heap puede utilizarse para implementar una cola de prioridad almacenando los
datos de modo que las llaves estn siempre ordenadas de arriba a abajo (a diferencia
de un rbol de bsqueda binaria, que ordena sus llaves de izquierda a derecha). En
otras palabras, el padre debe tener siempre mayor prioridad que sus hijos.

iv

Alberto Len Aparicio


Algoritmos y Estructuras de Datos
Estructuras de datos
____________________________________________________________________________________________________________________

TDA Cola
Una cola es un tipo especial de lista en la cual los elementos se indertan en un extremo (el
posterior) y se suprimen en el otro (el anterior o el frente). Las colas se conocen tambien como
FIFO (first-in firts-out) o listas primero en entrar, primero en salir. Las operaciones para una
cola son anlogas a las de las pilas; las diferencias sustanciales consisten en que las inserciones
se hacen al final de la lista, y no al principio, y en que la terminologa tradicional para las colas
y listas no es la misma. Se usaran las siguientes operaciones con colas:
1. ANULA(C) convierte la cola C en una lista vacia.
2. FRENTE(C) es una funcion que devuelve el valor del primer elemento de la cola C.
FRENTE(C) se puede escribir en funcion de operaciones con listas, como
RECUPERA(PRIMERI(C),C).
3. PONE_EN_COLA(x,C) inserta el elemento x al final de la cola C. En funcion de
operaciones con listas, PONE_EN_COLA(x,C) es INSERTA(x,FIN(C),C).
4. QUITA_DE_COLA (C) suprime el primer elemento de C; es decir,
QUITA_DE_COLA(C) es SUPRIME(PRIMERO(C),C).
5. VACIA(C) devuelve verdadero si, y solo si, C es una cola vacia.
Saca_cliente

Frente

Cliente 2
Cliente 6
Cliente 11
Cliente 5
Cliente 28
Cliente 13
Cliente 9
Inserta_cliente

También podría gustarte