Estructuras Estáticas

Estructuras Estáticas

CONCEPTO:Las estructuras estáticas son mucho más sencillas de manipular que las dinámicas, y son suficientes para resolver la mayoría de los problemas. Las estructuras dinámicas, de manejo más difícil, permiten aprovechar mejor el espacio en memoria y tienen aplicaciones más específicas.
Además, se pueden mencionar como una clase de estructura de datos diferente las estructuras externas, entendiendo como tales aquéllas que no se almacenan en la memoria principal (RAM) del ordenador, sino en alguna memoria secundaria (típicamente, un disco duro). Las estructuras externas, que también podemos denominar archivos o ficheros, son en realidad estructuras dinámicas almacenadas en memoria secundaria.

ARREGLOS: 
Un arreglo puede definirse como un grupo o una colección finita, homogénea y ordenada de elementos. Los arreglos pueden ser de los siguientes tipos:
  • Unidimencional - vectores
  • Bidimencional - matrices
  • multidimencional - cubos

             * Arreglos Unidimensionales



Arreglo Unidimensional

Cada elemento  del arreglo representa la edad de una persona, así para referirnos a la edad de la persona ubicada en la posición número 5, lo haremos indicando el nombre del arreglo y el respectivo subíndice: EDAD (5)
En general para hacer  referencia  a un elemento de un arreglo unidimensional lo haremos así:  
NOMBRE DEL ARREGLO [ Subíndice ]
  
             Un arreglo unidimensional es un tipo de datos estructurado que está formado de 
             una  colección finita y ordenada                                                   
             de datos del mismo tipo. Es la estructura natural para modelar listas de elementos 
             iguales.
             El tipo de acceso a los arreglos unidimensionales es el acceso directo, es decir,
             podemos acceder a cualquier   
             elemento del arreglo sin tener que consultar a elementos anteriores o posteriores,
             esto   mediante el uso de un  índice para cada elemento del arreglo que nos da su
             posición relativa.
             Para implementar arreglos unidimensionales se debe reservar espacio en memoria,
             y se debe proporcionar la dirección base del arreglo, la cota superior y la inferior.


           *Arreglos bidimencionales



Cada elemento representa la nota de un estudiante (filas) en cada una de las 5 asignaturas (columnas), así para referirnos a la nota del estudiante ubicado en la posición número 3 en la asignatura 4, lo haremos indicando el nombre del arreglo, el número del estudiante y la posición de la asignatura, así : NOTAS ( 3 , 4 )  
NOMBRE DEL ARREGLO [ No. Fila , No.  Columna ]

           Este tipo de arreglos al igual que los anteriores es un tipo de dato estructurado, finito
        ordenado y homogéneo. El   
        acceso a ellos también es en forma directa por medio de un par de índices.
        Los arreglos bidimensionales se usan para representar datos que pueden verse como
        una tabla con filas y columnas. La primera dimensión del arreglo representa las                      
        columnas,cada elemento contiene un valor y cada dimensión representa una relación.

        *Arreglos multidimencionales



           Este también es un tipo de dato estructurado, que está compuesto por n
           dimensiones.          
           Para hacer referencia a cada componente del arreglo es necesario utilizar n índices,
           uno para cada dimensión  Para determinar el número de elementos en este tipo de  
           arreglos se usan las siguientes fórmulas:
                     RANGO (Ri) = lsi - (lii + 1)
                    No. TOTAL DE ELEMENTOS = R1 * R2* R3 * ...* Rn
            donde:
                    i = 1 ... n
                    n = No. total de dimensiones
                    Para determinar la dirección de memoria se usa la siguiente formula:
                    LOC A[i1,i2,i3,...,in] = base(A) + [(i1-li1)*R3*R4*Rn + (i2-li2)*R3*R2*... (in - 
                    lin)*Rn]*w

VECTOR:es un arreglo, generalmente asociados a los arreglos unidimensionales.  Es una zona de almacenamiento contiguo, que contiene una serie de elementos del mismo tipo y se distinguen entre sí por un índice tambien es una estructura de datos estaticas.

                      --->Secuencia de elementos
                      --->El tamaño es conocido
                      --->Se encuentran en momoria adyacente
                      --->Mismo tipo
                     ---> Empiezan el la posición '0' cero
                     --->Se accede a los elementos a travez de '1' indice



            Int [ ] arreglo; \\ Ojo esto solo es la declaracion

            Int  [ ] arreglo = new int [10];\\new : asignacion dinamica de memoria
                         Int [ ] arreglo
                         Arreglo = new int[10];


EJEMPLO EN LENGUAJE  JAVA;


Diagrama de claces


Implementación:


Paquete Presentación
Clase Formulario.java:




package Presentacion;

import Logica.Pares;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Formulario
{
    public static void main (String arg []) throws IOException
    {
        int vector[]=new int[10];
        int i;
        System.out.println("Digite los valores: ");
        for(i=0;i<=9;i++)
        {
            vector[i]=leer();
        }
        Pares objeto=new Pares();
        System.out.println("Los numeros pares son: "+ objeto.numeros_pares(vector));
    }
    public static int leer() throws IOException
    {
        InputStreamReader entrada=new InputStreamReader (System.in);
        BufferedReader lectura=new BufferedReader (entrada);
        String numero=lectura.readLine();
        return(Integer.parseInt(numero));
    }
}
 








Paquete Lógica.
Clase Pares.java:


package Logica;

public class Pares
{
    private int dato;

    public boolean verifica_par(int dato)
    {
        if(dato%2==0)
        {
            return (true);
        }
        else
        {
            return(false);
        }
    }
    public String numeros_pares(int vector[])
    {
        String cadena = "";
        int lista[]=new int[10];
        int listaordenada[]=new int[10];
        int j=0;
        int temp;
        for(int i=0;i<=9;i++)
        {
            if(verifica_par(vector[i]))
            {
                lista[j]=vector[i];
                j++;
            }
        }

        for(int l=8;l>0;l--)
        {
            for(int lo=0;lo<=l;lo++)
            {
                if(lista[lo]>lista[lo+1])
                {
                    temp=lista[lo+1];
                    lista[lo+1]=lista[lo];
                    lista[lo]=temp;
                }
            }
        }

        for(int k=0;k<=9;k++)
        {
           cadena+=" "+lista[k];
        }
        return(cadena);
    }

    public int getDato() {
        return dato;
    }

    public void setDato(int dato) {
        this.dato = dato;
    }
}






Leia Mais

Tipos Abstractos de Datos

Tipos Abstractos de Datos

TAD: Un tipo de datos definido por el programador se denomina tipo abstracto de datos (TAD) para distinguirlo de los tipos predefinidos de datos. Los tipos abstractos de datos están formados por los datos (estructuras de datos) y las operaciones (procedimientos o funciones) que se realizan sobre esos datos. El conjunto de operaciones definidas sobre el TAD debe ser cerrado, es decir, sólo se debe acceder a los datos mediante las operaciones abstractas definidas sobre ellos. La abstracción de datos sólo permite acceder a ellos de manera controlada.
Las estructuras de los TAD se componen de dos partes: la interfaz y la implementación. Esto se debe a que las estructuras de datos reales que utilizamos para almacenar la representación de un tipo abstracto de datos son invisibles para los usuarios o clientes. Mientras que en la interfaz se declaran las operaciones y los datos, la implementación contiene el código fuente de las operaciones y lo mantiene oculto al usuario.
Las principales ventajas que nos aportan los TAD son las siguientes:
1.    Mejoran la conceptualización y hacen más claro y comprensible el código.
2.    Hacen que el sistema sea más robusto.
3.    Reducen el tiempo de compilación.
4.    Permiten modificar la implementación sin que afecte al interfaz público.
5.    Facilitan la extensibilidad.

TAD ENTEROS: son conjuntos de datos  como por ejemplo [0,1,2,3,4,5,6.....n] :
-operaciones 
-asignaciones
-incrementos
-decrementos
-operaciones aritmeticas


el tipo de datos de los enteros que ofrece el
lenguaje Pascal; la definición del TAD correspondiente consiste en determinar:
- Cuáles son sus valores. Los números enteros dentro del intérvalo [minint, maxint] .
- Cuáles son sus operaciones. La suma, la resta, el producto, y el cociente y el resto de la
división.
- Cuáles son las propiedades que cumplen estas operaciones. Hay muchas; por
ejemplo: a+b = b+a, a*0 = 0, etc.


TAD ESTUDIANTE:
       Conjunto de datos 
             -RU[ numero]
             -Nombre[texto]
             -edad[numero]
      Operaciones:
             -ver nombre()
             -calcular edad()
             -modificar datos()
TAD CONJUNTO:Se trata de construir el TAD CONJUNTO con una implementación no acotada con
cabecera y una biblioteca que incluya operaciones básicas sobre conjuntos.

Se introduce el concepto de  iterador activo, y se compara éste con el  iterador
pasivo estudiado en la práctica 2 (el TAD PILA).
       Conjunto de datos:
             -set[números,textos]
       Operaciones:
             - unión
             -intersección
             -comparación



Leia Mais

Estructura de Datos

Memoria Estatica y Dinamica



Que  es  memoria?
En informática, la memoria (también llamada almacenamiento) se refiere a parte de los componentes que forman parte de una computadora, Son dispositivos que retienen datos informáticos durante algún intervalo de tiempo. Las memorias de computadora proporcionan unas de las principales funciones de la computación moderna, la retención o almacenamiento de información. Es uno de los componentes fundamentales de todas las computadoras modernas que, acoplados a una unidad central de procesamiento (CPU por su sigla en inglés, central processing unit), implementa lo fundamental del modelo de computadora de Arquitectura de von Neumann, usado desde los años 1940.
Que es estática?
En informática una variable estática es una variable cuyo valor no varía durante la vida del proceso en ejecución. Normalmente una variable estática tiene un ámbito más amplio que otras variables.





 Los valores de variables estáticas se pueden establecer una vez (durante el tiempo de ejecución) o se pueden cambiar en múltiples ocasiones durante la ejecución del programa. La terminología "variable estática" se basa en C C++, pero también se usa en muchos lenguajes de programación derivados. En lenguajes de diferente origen el mismo concepto puede denominarse "variable global".


Que es dinámica?

En informática, la programación dinámica es un método para reducir el tiempo de ejecución de un algoritmo mediante la utilización de subproblemas superpuestos y subestructuras óptimas, como se describe a continuación.



El matemático Richard Bellman inventó la programación dinámica en 1953 que se utiliza para optimizar problemas complejos que pueden ser discretizados y secuencializados.


Memoria  estática?
Es la memoria que se reserva en el momento de la compilación antes de comenzar a ejecutar el programa. Los objetos son creados al iniciar el programa y destruidos al finalizar el mismo. Mantienen la misma localización en memoria durante todo el transcurso del programa hasta que son destruidos. 
Los objetos administrados de este modo son: variables globales, variables estáticas de funciones, miembros static de clases y literales de cualquier tipo.



Consideraciones


  1.   Error en tiempo de ejecucion de indice fuera de rango
  2.   Se debe conocer con anticipación el tamaño de la estructura V [3 ], M[2,2], C[5,3,2]
  3.   Se guarda en memoria adyacente ejem
  4.   Vectores, Matrices, Cubos, registros, archivos


Ventajas


  1.   Lógica simple
  2.   Optimo para resolverproblemas P y M
  3. Desventajas 
  4.   No se puede modificar el tamaño de las estructuras en T.D.E
  5.   No se obtima con grandes cantidades de datos
  6.   Desperdicio de momoria cando no se utiliza la totalidad del tamaño por ejem V[100]


Memoria Dinamica

La memoria dinámica se refiere a aquella memoria que no puede ser definida ya que no se conoce o no se tiene idea del número de la variable a considerarse, la solución a este problema es la memoria dinámica que permite solicitar memoria en tiempo de ejecución, por lo que cuanta más memoria se necesite, más se solicita al sistema operativo. El sistema operativo maneja la memoria gracias al uso de punteros, por la misma naturaleza del proceso nos impide conocer el tamaño de la memoria necesaria en el momento de compilar.
Un dato importante es que como tal este tipo de datos se crean y se destruyen mientras se ejecuta el programa y por lo tanto la estructura de datos se va dimensionando de forma precisa a los requerimientos del programa, evitándonos así perder datos o desperdiciar memoria si hubiéramos tratado de definirla cantidad de memoria a utilizar en el momento de compilar el programa.



Consideraciones


  1.   Manejo transparente del tamaño de la estructura 
  2.   Se guarda donde se encuentra el espacio 
  3.   No se guarda necesariamente en memoria adyacente 


Ventajas


  1.   El tamaño de la estructura no infiere en la lógica del programa


Desventajas
  las estructuras de datos son una forma avanzada de manejar datos en tiempo de ejecución




Memoria estática y dinámica

Leia Mais