Está en la página 1de 21

Mater

Estructura de
Unidad
1
datos
Introduccion a
la estructura
de datos

INDICE
Introduccin a las estructuras de datos
Introduccin:..
Tipos de datos abstractos (TDA)
Modularidad.
Uso de TDA..
Manejo de memoria esttica
Manejo de memoria dinmica..

INTRODUCCIN A LAS ESTRUCTURAS DE DATOS


Un algoritmo es una secuencia finita de operaciones, organizadas para realizar
una tarea determinada.
Las estructuras de datos son la forma en que se organizan los datos para ser
usados.
Puede ser una coleccin de variables, posiblemente de diferentes tipos de datos,
conectadas de un modo determinado.
Una estructura de datos bien organizada debe permitir realizar un conjunto de
acciones sobre los datos de tal forma de minimizar el uso de los recursos y el
tiempo empleado para efectuar la operacin

TIPOS DE DATOS ABSTRACTOS


Abstraccin
La abstraccin es un mecanismo fundamental para la comprensin de fenmenos
o situaciones que implican gran cantidad de detalles.
Abstraccin es la capacidad de manejar un objeto (tema o idea) como un concepto
general, sin considerar la enorme cantidad de detalles que pueden estar
asociados con dicho objeto.
Ejemplo, se puede saber conducir un automvil sin conocer el tipo del modelo o
cmo est fabricado.
La abstraccin se utiliza para suprimir detalles irrelevantes, mientras se enfatiza
en los relevantes o significativos.
El beneficio principal de la abstraccin es que facilita al programador pensar
acerca del problema a resolver. Uno de los principios importantes del diseo de
software es el de la abstraccin y ocultacin de la informacin.

Abstraccin de datos es una tcnica que permite inventar nuevos tipos de datos
que sean ms adecuados a una aplicacin y, por consiguiente, facilitar la escritura
del programa
Tipo Abstracto de Dato (TDA)
Es un tipo de dato definido por el usuario a travs de una especificacin y una
implementacin de los objetos abstractos. (Rowe , types ACM sigplan, Vol 16-1,
1980).
Un tipo de dato abstracto (TDA) o Tipo abstracto de datos (TAD) es un modelo
matemtico compuesto por una coleccin de operacionesdefinidas sobre un
conjunto de datos para el modelo. Annimo
Un TDA es un tipo de dato definido por el usuario para representar una entidad
(abstraccin) a travs de sus caractersticas (datos o atributos) y sus operaciones
o funciones (algoritmos que manipulan los datos). Hilda Contreras
Un TDA est caracterizado por un conjunto de operaciones (mtodos) al cual le
denominamos usualmente como su interfaz pblica y representan el
comportamiento del TDA; mientras que la implementacin como la parte privada
del TDA est oculta al programa cliente que lo usa. Todos los lenguajes de alto
nivel tienen predefinidos TDA.
Con mucha frecuencia se utilizan los trminos TDA y Abstraccin de Datos de
manera equivalente, y esto es debido a la similitud e interdependencia de ambos.
Sin embargo, es importante definir por separado los dos conceptos.
La abstraccin de datos consiste en ocultar las caractersticas de un objeto y
obviarlas, de manera que solamente utilizamos el nombre del objeto en nuestro
programa. Esto es similar a una situacin de la vida cotidiana. Cuando se dice la
palabra perro, usted no necesita que se le diga lo que hace el perro. Usted ya
sabe la forma que tiene un perro y tambin sabe que los perros ladran. De manera
que se abstraen todas las caractersticas de los perros en un solo trmino, perro.
A esto se le llama Abstraccin y es un concepto muy til en la programacin, ya
que un usuario no necesita mencionar todas las caractersticas y funciones de un
objeto cada vez que ste se utiliza, sino que son declaradas por separado en el
programa y simplemente se utiliza el trmino abstracto (perro) para mencionarlo.

En el ejemplo anterior, perro es un Tipo de Dato Abstracto y todo el proceso de


definirlo, implementarlo y mencionarlo es a lo que llamamos Abstraccin de Datos.
Otro ejemplo:
Una calculadora es un ejemplo de un TDA que maneja objetos de cantidades
numricas y las operaciones aritmticas sobre dichas cantidades. Usa el sistema
decimal para las cantidades y realiza operaciones de suma, resta, multiplicacin,
etc. Sin embargo, Ud. sabe cmo una calculadora representa las cantidades
internamente? En Binario? Decimal? Palitos? Piedritas? NO no lo sabe y
tampoco le hace falta para usar la calculadora.
Un sistema de numeracin es un ejemplo de un tipo de dato abstracto que
representa el concepto de cantidad.

MODULARIDAD
La modularidad es la posibilidad de dividir una aplicacin en piezas ms
pequeas llamadas mdulos.
Por qu Modulamos las aplicaciones?

Descomponer el problema en partes ms simples

Facilitar la comprensin del sistema y de cada una de sus partes.

Si se produce un error en un mdulo, ste slo afecta a dicho mdulo

Las correcciones debidas a cambios en la especificacin afectan a un

nmero reducido de mdulos.

El sistema est compuesto de una serie de mdulos independientes

comunicados entre s
Cmo se debe modular una aplicacin?

El mdulo debe dejar bien claro cmo hacer uso de l

El acceso a los servicios de un mdulo debe ser homogneo

Un mdulo debe estar listo para su uso pero a su vez debe poder mejorarse

El lenguaje de programacin utilizado debe soportar el uso de mdulos

USO DE (TDA)
Elaborar un ejercicio que permita realizar operaciones sobre conjuntos a travs de
los TDA BitSet y StringTokenizer.
Las operaciones que permitir realizar son:
a) Unin
b) Interseccin
c) Diferencia

Clase BitSet
Java proporciona otra alternativa para manipular los bits y esta es mediante la
clase BitSet(Conjunto de bits) que crea un tipo especial de arreglo que contiene
valores de bits. Este puede aumentar de tamao segn se necesite. Esto lo hace
similar a la clase vector. Los constructores definidos para esta clase son:
BitSet( )
BitSet(int tamao)
La primera opcin crea un objeto por defecto y la segunda opcin permite
especificar su tamao inicial (Esta es la cantidad de bits que puede contener).
Todos los bits se inicializan en cero.
Los mtodos definidos para la clase BitSet son;
Mtodo

Descripcin

void and(BitSet conjBits)

Hace un AND entre los contenidos del


objeto
BitSet
invocante
y
los
especificados por conjBits. El resultado
se coloca en el objeto invocante.

void andNot(BitSet conjBits)

Por cada bit 1 en conjBits, se borra el


correspondiente bit en el BitSet
invocante.

void clear(int indice)

Pone a cero el bit especificado por


ndice.

Object clone( )

Duplica el objeto BitSet invocante.

bolean equals(Object conjBits)

Devuelve true si el conjunto de bits


invocante es equivalente al pasado en
conjBits. De los contrario, el mtodo
devuelve false.

boolean get(int indice)

Devuelve el estado actual del bit en el


ndice especificado.

int hashCode( )

Devuelve el cdigo de dispersin del


objeto invocante.

int length( )

Devuelve el nmero de bits requeridos


para almacenar los contenidos del
BitSet invocante. Este valor es
determinado por la posicin del ltimo
bit a 1.

void or(BitSet conjBits)

Hace un OR de los contenidos del


objeto BitSet invocante con los del
especificado por conjBits. El resultado
se coloca en el objeto invocante.

void set(int ndice)

Pone en 1 el bit especificado por


ndice.

int size( )

Devuelve el nmero de bits en el


objeto BitSet invocante.

String toString( )

Devuelve la cadena equivalente del


objeto BitSet invocante.

void xor(BitSet conjBits)

Hace un XOR de los contenidos del


objeto BitSet invocante con los del
especificado por conjBits. El resultado
se coloca en el objeto invocante.

Ejercicio 2.
Realizar un programa que permita encontrar los nmeros primos de 0 hasta n
aplicando el mtodo de la criba de Eratstenes; implementarlo haciendo uso de la
clase BitSet.

Manejo de Memoria
La administracin de memoria de una computadora es una tarea fundamental
debido a que la cantidad de memoria es limitada.
El sistema operativo es el encargado de administrar la memoria del sistema y
compartirla entre distintos usuarios y/o aplicaciones.
El RTS (Run Time System) de un lenguaje de programacin administra la
memoria para cada programa en ejecucin.
La ejecucin de un programa requiere que diversos elementos se almacenen
en la memoria:
Cdigo del programa (instrucciones)
Datos
Permanentes
Temporales
Direcciones para controlar de flujo de ejecucin del programa
Memoria esttica y dinmica
A la asignacin de memoria para algunos elementos fijos del programa que
es controlada por el compilador se le llama asignacin de memoria esttica.
A la asignacin y posible recuperacin de memoria durante la ejecucin de un
programa y bajo su control, se le llama asignacin de memoria dinmica.

MANEJO DE MEMORIA ESTTICA


Para implementar alguna estructura de datos, primero es necesario tener muy
claro cmo va a ser el manejo de memoria.

La diferencia entre estructuras estticas y dinmicas esta en el manejo de


memoria.
En la memoria esttica durante la ejecucin del programa el tamao de la
estructura no cambia.
La estructura que maneja memoria esttica son los vectores.
Un vector es una coleccin finita, homognea y ordenada de elementos.
Es finita porque todo arreglo tiene un lmite, homognea porque todos los
elementos son del mismo tipo y ordenada porque se puede determinar cul es el
ensimo elemento.
Un vector tiene dos partes: Componentes e ndices
Los componentes hacen referencia a los elementos que forman el arreglo y los
ndices permiten referirse a los componentes del arreglo en forma individual.
Los arreglos se clasifican en:
-

Unidimensionales (vectores o listas)


Bidimensionales (matrices o tablas)
Multidimensionales

Los arreglos tienen localidades de memoria continuas y para determinar el espacio


que deben ocupar, se requiere conocer la posicin inicial del arreglo en la memoria
y el tipo de datos primitivo del que fue declarado, como se aprecia en la siguiente
tabla.

Tipo de dato primitivo

Tamao en Bytes de memoria

byte

char

short

int

float

long

double

Para determinar la direccin fsica de un elemento de un arreglo unidimensional en


la memoria se requiere la siguiente frmula:
Direccin de memoria = Direccin inicial en la
memoria + Posicin del arreglo o ndice * Tamao en
bytes del tipo de dato primitivo
Ejemplo. Si tenemos un arreglo de 5 elementos enteros y queremos determinar la
direccin de memoria que ocupa cada uno, tomando en cuenta que la direccin
inicial del arreglo es 1300, el resultado sera es siguiente:

arregl
o

10

20

30

40

50

ndice

direcc
in

13
00

13
04

13
08

13
12

13
16

arreglo[0] = 1300 + 0 * 4 = 1300

arreglo[1] = 1300 + 1 * 4 = 1304


arreglo[2] = 1300 + 2 * 4 = 1308
arreglo[3] = 1300 + 3 * 4 = 1312
arreglo[4] = 1300 + 4 * 4 = 1316
Ejercicio. Encontrar las direcciones de memoria fsica que ocupara cada uno de
los elementos de un vector de n elementos de tipo flotante si conocemos que la
direccin inicial del mismo es la 1345.
Ejercicio. Encontrar cual es la direccin fsica que ocupan los siguientes elementos
A, M, R, H, G y O de un arreglo que contiene el alfabeto en forma ordenada de la
A a la Z y su direccin inicial es la 65.
Ejercicio. Si contamos con dos vectores almacenados en la memoria de n
elementos enteros cada uno y queremos calcular la suma de los vectores,
almacenando el resultado en un tercer vector, encuentre las direcciones de
memoria que ocuparn cada uno de los arreglos si se encuentran en una forma
consecutiva y la direccin inicial del primero es la 30.

Arreglos Bidimensionales.
Un arreglo bidimensional (matriz o tabla), es un conjunto de elementos
homogneos definidos bajo una estructura finita, controlado por dos ndices y su
representacin es por un conjunto de renglones y columnas, en forma de una
malla.
Para determinar la direccin fsica de un elemento de un arreglo bidimensional en
la memoria se puede seguir una de las siguientes formulas:
Por renglones.
Direccin de memoria = Direccin inicial en la
memoria + (Numero de columnas del arreglo *
Posicin del arreglo en rengln o ndice de

rengln + Posicin del arreglo en columna o


ndice de columna) * Tamao en bytes del tipo
de dato primitivo

Ejemplo. Si tenemos un arreglo de 3 renglones y 3 columnas con elementos


enteros y queremos determinar la direccin de memoria que ocupa cada uno,
tomando en cuenta que la direccin inicial del arreglo es 2700, el resultado sera
es siguiente:

arreglo

direcci
n

40

50

60

270
0

270
4

270
8

70

80

90

271
2

271
6

272
0

70

80

90

272
4

272
8

273
2

arreglo[0][0] = 2700 + (3 * 0 + 0) * 4 = 2700


arreglo[0][1] = 2700 + (3 * 0 + 1) * 4 = 2704
arreglo[0][2] = 2700 + (3 * 0 + 2) * 4 = 2708
arreglo[1][0] = 2700 + (3 * 1 + 0) * 4 = 2712

arreglo[1][1] = 2700 + (3 * 1 + 1) * 4 = 2716


arreglo[1][2] = 2700 + (3 * 1 + 2) * 4 = 2720
arreglo[2][0] = 2700 + (3 * 2 + 0) * 4 = 2724
arreglo[2][1] = 2700 + (3 * 2 + 1) * 4 = 2728
arreglo[2][2] = 2700 + (3 * 2 + 2) * 4 = 2732

Ejercicio. Determinar cual es la direccin de memoria fsica que ocupan los


elementos de la diagonal principal de una matriz, si su direccin inicial es 1971.
Ejercicio. Buscar cuales son las direcciones de memoria fsica que ocupan todos
los elementos pares de una matriz, si inicia en la direccin 2001.
Ejercicio. Encontrar cuales son las direcciones de memoria fsica donde se
encuentra el elemento mayor de una matriz, si su direccin inicial es la 2004.
Por columnas.

Direccin de memoria = Direccin inicial en la


memoria + (Numero de renglones del arreglo *
Posicin del arreglo en columna o ndice de
columna + Posicin del arreglo en rengln o
ndice de rengln) * Tamao en bytes del tipo
de dato primitivo

Ejemplo. Tomamos como base el ejemplo anterior, pero ahora con columnas
quedara de la siguiente manera:

arreglo

direcci
n

40

50

60

270
0

271
2

272
4

70

80

90

270
4

271
6

272
8

70

80

90

270
8

272
0

273
2

arreglo[0][0] = 2700 + (3 * 0 + 0) * 4 = 2700


arreglo[1][0] = 2700 + (3 * 0 + 1) * 4 = 2704
arreglo[2][0] = 2700 + (3 * 0 + 2) * 4 = 2708
arreglo[0][1] = 2700 + (3 * 1 + 0) * 4 = 2712
arreglo[1][1] = 2700 + (3 * 1 + 1) * 4 = 2716
arreglo[2][1] = 2700 + (3 * 1 + 2) * 4 = 2720
arreglo[0][2] = 2700 + (3 * 2 + 0) * 4 = 2724
arreglo[1][2] = 2700 + (3 * 2 + 1) * 4 = 2728
arreglo[2][2] = 2700 + (3 * 2 + 2) * 4 = 2732

Ejercicio. Encuentre las direcciones de memoria fsica de los elementos impares


de una matriz, si su direccin inicial es la 1979.

Ejercicio. Determinar cules son las direcciones de memoria donde se encuentran


las vocales de una matriz, si su direccin inicial es la 2312.
Con los arreglos unidimensionales o bidimensionales se pueden desarrollar una
serie de operaciones tales como:
-

Lectura / Escritura.
Asignacin.
Actualizacin:

Insercin.

Eliminacin.

Modificacin.
Ordenamiento.
Bsqueda.

De las operaciones anteriores la insercin, eliminacin y modificacin son


operaciones que solo se aplican a un elemento y no a todos de forma global.

MANEJO DE MEMORIA DINMICA


En la memoria dinmica durante la ejecucin del programa el tamao de la
estructura puede cambiar.
La memoria dinmica, es el espacio de almacenamiento que solicita una clase o
mtodo en tiempo de ejecucin. De esa manera, a medida que el proceso requiere
de ms espacio se solicita al sistema operativo, sin que el proceso se preocupe
por donde sern asignados los datos, ni que espacios de memoria nos entregara
el sistema operativo.
As como existen estructuras de datos estticas (arreglos), tambin existen
estructuras de datos dinmicas (listas y rboles), estas ltimas son generadas a
partir de un tipo de dato conocido como referencia (direccin de memoria). Para
utilizar las referencias se requiere de un elemento llamado nodo, el cual se
estructura de la siguiente manera.
Dato

Dir

Nodo con una referencia

Dir

Dato

Dir

Nodo con dos referencias

Las estructuras de datos que usan nodos pueden ser lineales o no lineales, dentro
de las lineales se encuentran las listas simples y dobles y en las no lineales
encontramos los rboles, estas estructuras se representan de la siguiente forma.

Lista simple.
------>
Dato

Dir

----->

Dato

Dir

Dato

Dir

Lista doble
--->
Dir

Dato

Dir

---->

Dir

Dato

Dir

Dir

Dato

Dir

Dir

Dato

Dir

<--<-----

rbol
Dir

Dir

Dato

Dato

Dir

Dir

NOTA: La direccin de un nodo apunta al dato del siguiente nodo, lo mismo


sucede en la forma inversa.

Suponga que despus de las declaraciones, observamos que necesitaremos 12


valores de tipo int en lugar de 10. En tal caso podemos emplear la siguiente
estrategia:
int original[ ]=a;
a=new int [12];
for(int i=0;i<10;i++)
a[i]=original[i];
Implementar una clase de operaciones de vectores que muestre la utilizacin de
meoria dinamica
class OperVectores{
int arr[];
public OperVectores();
public OperVectores(int tam);
public void LlenarAleatoria();
public void Mostrar();
public void pares();
public void May50();
public void asignar(int n);
public void asignar (int t[]);
}
Vector

Implementa un arreglo dinmico de objetos, es decir proporciona las capacidades


de las estructuras de datos de tipo arreglo, que puede cambiar su propio tamao
de forma dinmica.
En cualquier momento, un objeto Vector contiene un nmero de elementos que es
menor o igual que su capacidad. La capacidad es el espacio que se a reservado
para los elementos de Vector. Si un objeto Vector requiere de una capacidad
adicional, crece en base a un incremento de capacidad que usted le especifica, o
en base a un incremento de capacidad predeterminado. Si usted no especifica un
incremento de capacidad, el sistema duplicara el tamao de un objeto Vector cada
vez que se requiera de una capacidad adicional.
Los constructores de la clase Vector son los siguientes:
a) Vector( )
b) Vector(int tamao)
c) Vector(int tamao,int incr)
a) Esta es la primera forma que crea un vector por defecto, que tiene un
tamao inicial de 10.
b) Esta es la segunda opcin que crea un vector que viene especificado
por tamao.
c) La tercera forma crea un vector de capacidad especificada en tamao e
incremento incr. El incremento indica el nmero de elementos cuya
memoria se asigna cada vez que el vector se aumenta de tamao.

Los objetos Vector almacenan referencias a objetos Object. Por lo tanto, un


prograna puede almacenar referencias a cualquier objeto en un objeto Vector.
Para almacenar valores de tipos primitivos en objetos Vector, utilice las clases de
tipo de envoltura (por ejemplo, Integer y Double) del paquete java.lang para crear
objetos que contengan los valores de tipo primitivo.

Mtodos definidos por Vector

Mtodo

Descripcin

Final
addElement(Object
elemento)

void El objeto especificado por elemento se aade al


vector.

Int capacity( )

Devuelve la capacidad del vector

Object clone( )

Devuelve un duplicado del vector invocante.

Bolean
elemento)

contains(Object Devuelve true si elemento est contenido en el


vector, y devuelve false si no.

Void copyInto(Object matriz[ Los elementos contenidos en el vector invocante se


])
copian en la matriz especificada por matriz.

Object elementAt(int indice) Devuelve el elemento en la posicin indicada por


ndice.

Enumeration elements( )

Devuelve una enumeracin de los elementos del


vector.

Void
ensureCapacity(int Establece la mnima capacidad del vector en
tamano)
tamao.

Object firstElement( )

Int
elemento)

Devuelve el primer elemento del vector

indexOf(Object Devuelve el ndice de la primera aparicin de


elemento. Si el objeto no est en el vector, se

devuelve 1.

Int
indexOf(Object Devuelve el ndice de la primera aparicin de
elemento, int inicio)
elemento en o despus de inicio. Si el vector no
est en esa parte del vector, se devuelve 1.

Void insertElementAt(Object Aade elemento al vector en la posicin indicada


elemento,int indice)
por ndice.

Bolean isEmpty( )

Devuelve true si el vector esta vaci y false si


contiene uno o ms elementos.

Object lastElement( )

Devuelve el ltimo elemento del vector.

Int
lastIndexOf(Object Devuelve el ndice de la ltima aparicin de
elemento)
elemento, si el elemento no est en el vector, se
devuelve 1.

Int
lastIndexOf(Object Devuelve el ndice de la ltima aparicin antes de
elemento,int inicio)
inicio. Si el objeto no est en esa parte del vector,
se devuelve 1.

Void removeAllElements( )

Vaca el vector. Tras ejecutarse este mtodo, el


tamao del vector es 0.

Bolean
removeElement(Object
elemento)

Quita elemento del vector. Si existe en el vector


ms de una instancia del objeto especificado,
entonces se quita la primera. Devuelve true si se
hizo con xito y false si el objeto no se encontr.

void removeElementAt(int Quita el elemento en la posicin indicada por


indice)
ndice.

Void setElementAt(Object Se asigna elemento a la posicin indicada por


elemento,int indice)
ndice.

Void setSize(int tamano)

Establece el nmero de elementos en el vector en


tamao. Si el nuevo nmero es menor que el viejo,
se pierden elementos. Si el nuevo tamao es mayor
que el viejo, se aaden elementos null.

Int size( )

Devuelve el nmero de elementos actualmente en


el vector.

String toString( )

Devuelve la cadena equivalente del vector.

Void trimToSize( )

Establece la capacidad del vector para que sea


igual al nmero de elementos que contiene
actualmente.

También podría gustarte