Sie sind auf Seite 1von 17

1.

1 Tipos de datos abstractos (TDA)


1.2 Modularidad
1.3 Uso de TDA
1.4 Manejo de memoria esttica.
1.5 Manejo de memoria dinmica

Profesor: Nava Fombona Gabriel


Alumno: Kevin Daniel Roman Martnez
Materia: Estructura de datos

1.1 Tipos de Datos Abstractos (TDA)

Un TDA es un tipo de dato definido por el programador que se puede manipular de un modo
similar a los tipos de datos definidos por el sistema.

Est formado por un conjunto vlido de elementos y un nmero de operaciones primitivas


que se pueden realizar sobre ellos.
Un TDA es el elemento bsico de la abstraccin de datos.
Su desarrollo es independiente del lenguaje de programacin utilizado, aunque este puede
aportar mecanismos que faciliten su realizacin.

En un TDA existen dos elementos diferenciados:


- La Interfaz de utilizacin
- La representacin
A la hora de utilizar el TDA, la representacin debe permanecer oculta.
Solo podremos utilizar las operaciones del tipo para trabajar con sus elementos.

1.2 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

1.3 Uso de TDA


Usar el TDA permite aprovechar el nivel de abstraccin en el desarrollo de un problema o
programa ocultando las caractersticas de un objeto y obviarlas, de manera que solamente
utilizamos el nombre del objeto en nuestro programa.

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.

1.4 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:

arreglo

10

20

30

40

50

ndice

direccin 1300 1304 1308 1312 1316

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

direccin

40

50

60

2700

2704

2708

70

80

90

2712

2716

2720

70

80

90

2724

2728

2732

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

direccin

40

50

60

2700

2712

2724

70

80

90

2704

2716

2728

70

80

90

2708

2720

2732

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.

1.5 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

rbol

Dir

---->

Dir Dato Dir --->

<-----

<---

Dir Dato Dir

Dir Dato

Dir

Dato

Dir

Dir

Dir

Dato

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 void addElement(Object El objeto especificado por elemento se aade al vector.


elemento)
Int capacity( )

Devuelve la capacidad del vector

Object clone( )

Devuelve un duplicado del vector invocante.

Bolean

contains(Object Devuelve true si elemento est contenido en el vector, y

elemento)

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 tamao.

tamano)
Object firstElement( )

Devuelve el primer elemento del vector

Int indexOf(Object elemento)

Devuelve el ndice de la primera aparicin de elemento. Si el


objeto no est en el vector, se devuelve 1.

Int indexOf(Object elemento, Devuelve el ndice de la primera aparicin de elemento en o


int inicio)

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 por ndice.

elemento,int indice)
Bolean isEmpty( )

Devuelve true si el vector esta vaci y false si contiene uno o


ms elementos.

Object lastElement( )
Int

Devuelve el ltimo elemento del vector.

lastIndexOf(Object Devuelve el ndice de la ltima aparicin de elemento, si el

elemento)
Int

elemento no est en el vector, se devuelve 1.


lastIndexOf(Object Devuelve el ndice de la ltima aparicin antes de inicio. Si el

elemento,int inicio)

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

Quita elemento del vector. Si existe en el vector ms de una

removeElement(Object

instancia del objeto especificado, entonces se quita la

elemento)

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 ndice.

indice)
Void

setElementAt(Object Se asigna elemento a la posicin indicada por ndice.

elemento,int indice)
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.

Programa realizado por mi:


Usando modularidad con vectores.
public class Datoss {
private
private
private
private

String[] nombre =new String[10];


int[] edad =new int[10];
int[] nc =new int[10];
int cont=0;

public void setNombre(String nom){


nombre[cont]=nom;

}
public void setEdad(int aos){
edad[cont]=aos;

}
public void setNc(int numc){
nc[cont]=numc;
cont++;
}
public String getNombre(){
return nombre[cont];

public int getEdad(){

return edad[cont];
}

public int getNc(){


return nc[cont];
}

public void irPrimero(){


cont=0;
}
public void go(){
cont++;
}
}

Clase Main

import java.util.*;
public class main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Datoss dts=new Datoss();
String n="";
int num=0;
for(int i=0; i<3;i++){
System.out.println("Nombre"+(i+1));
n = sc.next();
dts.setNombre(n);
n="";

System.out.println("Edad"+(i+1));
num = sc.nextInt();
dts.setEdad(num);
num=0;

System.out.println("Numero de control"+(i+1));
num = sc.nextInt();
dts.setNc(num);
num=0;
}
dts.irPrimero();

for(int j=0;j<3;j++){
System.out.println(dts.getNombre()+" "+dts.getEdad()+"
"+dts.getNc());
dts.go();
}
}
}

Das könnte Ihnen auch gefallen