Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Estructuras
Estructuras
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
ii
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
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
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