Sie sind auf Seite 1von 16

Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos

Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos


Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos

FUNDAMENTOS DE LAS ESTRUCTURAS DE DATOS


Mapa Conceptual

FUNDAMENTOS DE LAS ESTRUCTURAS DE DATOS

1. Definición de las estructuras de datos

En programación, una estructura de datos es una forma de organizar un conjunto de datos elementales con el objetivo de facilitar su
manipulación. Un dato elemental es la mínima información que se tiene en un sistema.
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos

Una estructura de datos define la organización e interrelación de estos y un conjunto de operaciones que se pueden realizar sobre ellos.
Las operaciones básicas son:

Alta, adicionar un nuevo valor a la estructura.

Baja, borrar un valor de la estructura.

Búsqueda, encontrar un determinado valor en la estructura para realizar una operación con este valor, en forma secuencial o binario
(siempre y cuando los datos estén ordenados).

Otras operaciones que se pueden realizar son:

Ordenamiento, de los elementos pertenecientes a la estructura.

Apareo, dadas dos estructuras originar una nueva ordenada y que contenga a las apareadas.

Por lo tanto, para poder acceder a determinada información en cualquier momento, se necesitará que ella esté depositada en soportes
físicos los cuales la almacenan en forma permanente. Este es el caso de la memoria externa o auxiliar como ser memorias extraíbles disco
duro, etc. La forma de guardar los datos en estos dispositivos auxiliares es mediante unas estructuras llamadas base de datos, archivos o
ficheros.

Además, existe una gran diferencia en cuanto a capacidad de almacenamiento entre la memoria central y las auxiliares, en general
la capacidad de las últimas es muy superior

A. Estructura de datos estáticas

Son aquellas en las que el tamaño ocupado en memoria se define antes que el programa se ejecute y el mismo no puede ser modif icado
durante la ejecución.

B. Estructura de datos dinámicas

Las estructuras de datos dinámicas no tienen limitaciones en cuanto al tamaño de memoria ocupada.

2. Perspectivas o niveles de la estructura de datos


Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos

A. Nivel (Lógico o abstracto)


Corresponde a la especificación lógica del Tipos de Datos Abstractos. En este nivel se define abstractamente a la Estructura de Datos y las
operaciones relacionadas con ella.

B. Nivel (Físico o de Implementación)


Se decide el lenguaje de Programación en el que se va a implementar la estructura de datos.
Así como los tipos de datos ya definidos en el lenguaje de programación servirán para representar a la estructura.

C. Nivel de Aplicación o de Uso:


El programador usará el TDA para resolver determinadas aplicaciones, el uso del TDA se limita a llamar a las operaciones sobre la estructura
que se requiera cuidando siempre de cumplir las reglas de cada operación especificadas en el nivel lógico.

3. Clasificación de los tipos de datos.

ESTRUCTURA DE DATOS INTERNAS


ESTRUCTURAS DE DATOS ESTÁTICAS
SIMPLES O PRIMITIVO

LÓGICO

COMPUESTAS
ARREGLOS
2.- Compuestas
CARÁCTER
ESTRUCTURA DE DATOS DINAMICAS CONJUNTOS
ENTERO
CADENAS
NO LINIALES
PUNTO FLOTANTE PILA REGISTROS
LINIALES

ESTRUCTURA DE DATOS EXTERNAS


ARBOL
1. COLA
Archivos
2. Base de datos GRAFOS
LISTA
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos

ESTRUCTURA DE DATOS EXTERNAS

1. Archivos
2. Base de datos

Abstracción

Encapsulamiento
Principios
POO Modularidad

Herencia

Polimorfismo

Fundamentos de las
estructuras de datos
Definición

Algoritmos divide y
vencieras Naturaleza
Algoritmos
recursivos

Pila de recursion Caracteristicas

Tipos
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos

4. Principios de la programación orientada a objetos

Los principios de la programación orientada a objetos según Booch, son los siguientes:

A. Abstracción
ABSTRACCIÓN ENCAPSULAMIENTO MODULARIDAD HERENCIA POLIMORFISMO

La abstracción es la
propiedad que permite
representar las características esenciales de un objeto, sin preocuparse de las restantes características (no esenciales). Una buena
abstracción elimina todos los detalles poco importantes y le permite enfocarse y concentrarse en los detalles importantes, se centra en la
vista externa de un objeto.
La idea de escribir programas definiendo una serie de abstracciones no es nueva, pero el uso de clases para gestionar dichas abstracciones
en lenguajes de programación ha facilitado considerablemente su aplicación.
Existe un principio muy importante relacionado con la abstracción, y esta es, la Dependencia mínima.

Ejemplo

Por ejemplo, tienes un carro y quieres "abstraerlo" para hacer un programa en el que puedas realizar operaciones en base al carro.

Puedes crear una clase con las características del carro, por ejemplo.

class carro {
int cantidadDePuertas;
int modelo;
Color colorcito;
String linea;

public carro (int cantidadDePuertas, int modelo, Color colorcito, String linea){
this.cantidadDePuertas = cantidadDePuertas;
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos

this.modelo = modelo;
this.colorcito = colorcito;
this. linea = linea;
}
}

B. Encapsulamiento

El Encapsulamiento o encapsulación es la propiedad que permite asegurar que el contenido de la información de un objeto está oculta al
mundo exterior: el objeto A no conoce lo que hace el objeto B, y viceversa. La encapsulación (también se conoce como ocultación de la
información), en esencia, es el proceso de ocultar todos los secretos de un objeto que no contribuyen a sus características esenciales.

La encapsulación también le permite controlar la forma en que se utilizan los datos y los procedimientos. Puede utilizar modificadores de
acceso como:

Ejemplo

Cuando se crea una nueva clase en Java, se puede especificar el nivel de acceso que se quiere para las variables de instancia y los
métodos definidos en la clase:

C. Modularidad:

La Modularidad es la propiedad que permite subdividir una aplicación en partes más pequeñas (llamadas módulos), cada una de las cuales
debe ser tan independiente como sea posible de la aplicación en sí y de las restantes partes.

Ejemplo
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos

PROGRAMA

Programa Principal
datos

Módulo1 Módulo2
Datos + Datos1 Datos + Datos2

Proced1 Proced2 Proced3

D. Jerarquía o Herencia

La Jerarquía es una propiedad que permite la ordenación de las abstracciones. Las dos jerarquías más importantes de un sistema complejo
son:

 estructura de clases (jerarquía “es-un” (generalización/especialización).


 estructura de objetos (jerarquía “parte-de” (agregación).

Ejemplo
Deposito Persona

DepositoFijo DepositoAhorro
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos

E. Polimorfismo

El polimorfismo permite referirse a objetos de clases diferentes mediante el mismo elemento de programa y realizar la misma operación de
diferentes formas, según sea el objeto que se referencia en ese momento.

Por ejemplo, cuando se describe la clase mamíferos se puede observar que la operación comer es una operación fundamental en la vida
de los mamíferos, de modo que cada tipo de mamífero debe poder realizar la operación o función comer. Por otra parte, una cabra o una
vaca que pastan en un campo, un niño que se come un caramelo y un león que devora a otro animal, son diferentes formas que utilizan
diferentes mamíferos para realizar la misma función (comer).

Ejemplo

package com.practica.polimorfismo;

import java.util.ArrayList;
import java.util.List;

public class CalcularOperacionesFigura {

public static void main(String[] args) {


OperacionesFigura of = new Triangulo(“Triangulo”, “Azul”, 15.0, 3.0);
OperacionesFigura of2 = new Circulo(“Circulo”, “Verde”, 12.3);
List<OperacionesFigura> lista = new ArrayList<OperacionesFigura>();
lista.add(of);
lista.add(of2);

calcularArea(lista);
}

public static void calcularArea(List<OperacionesFigura> listaOperacionesFiguras) {


for (OperacionesFigura of : listaOperacionesFiguras) {
System.out.println(“Area es: ” + of.calcularArea());
System.out.println(“Nombre es: ” + of.figura().getNombre());
System.out.println(“Color es: ” + of.figura().getColor());
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos

}
}

5. Algoritmos recursivos

El concepto de recursividad va ligado al de repetición. Son recursivos aquellos algoritmos que, estando encapsulados dentro de una
función, son llamados desde ella misma una y otra vez, en contraposición a los algoritmos iterativos, que hacen uso de bucles while,
do-while, for, etc.

Algo es recursivo si se define en términos de sí mismo (cuando para definirse hace mención a sí mismo). Para que una definición
recursiva sea válida, la referencia a sí misma debe ser relativamente más sencilla que el caso considerado.

TIPOS DE RECURSIÓN

a. Recursividad directa

O recursividad simple es aquella en cuya definición sólo aparece una llamada recursiva. Se puede transformar con facilidad en
algoritmos iterativos. Recursividad múltiple: Se da cuando hay más de una llamada a sí misma dentro del cuerpo de la función,
resultando más difícil de hacer de forma iterativa.

int fib( int n ) /* ej: Fibonacci */


{
if(n <= 1) return 1;
return(fib(n-1) + fib(n-2));
}

b. Recursividad anidada:

En algunos de los argumentos de la llamada recursiva hay una nueva llamada a sí misma.

int ack( int n, int m ) /* ej: Ackerman */


Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos

{
if(n==0 ) return(m+1);
else if(m==0) return(ack(n-1,1));
return(ack(n-1, ack(n,m-1)));
}

c. Recursividad cruzada o indirecta:


Son algoritmos donde una función provoca una llamada a sí misma de forma indirecta, a través de otras funciones.

Ej: Par o Impar:


int par( int nump )
{if(nump==0) return(1);
return( impar(nump-1));}
int impar( int numi )
{if(numi==0) return(0);
return( par(numi-1));}

NATURALEZA ITERATIVO RECURSIVO


Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos

Public int factorial(int n){ Pulbic int factorial(int n){


Int fact=1; If (n==0);
If(n==0); Return 1;
1 n=0
FACTORIAL

Return (fact); Else{


n! Else{ Return n*factorial (n-1)
for(int i=1; i<=n; i++); }
n(n-1)! n>0
fact=fact*1;
return fact;
}
Public int sumatoria(int n){ Public int suma(int n){
Int S==0; If( n==0);
0 n=0
SUMATORIA

for(int i=1; i<=n; i++){ return 0;


∑𝑛 S=S+1; else{
S(n-1)n n>0 return S; return n+suma(n-1);
} }
} }
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos

Public int potencia(inta, intb){ Public int potencia(inta; intb){


ans==1; If b==0;
if b==0; Return 1;
1 b=0
ans==1; else{
POTENCIAL

𝒂𝒃 else return a*potencia(a;b-1);


while b>=1; }
𝐚 ∗ 𝐚𝒃−𝟏 b>0
ans*=a; }
b-=1;
return ans;
}
Public int fibonacci(int n){ Public int fib(int n){
Int(n==0 || n==1) If n==1;
return n; Return 0;
fibinf==0; Else
f(n) n=0.n=1 fibsup==0; If(n==2)
FOBONACCI

for(i=2; i<=n; i++){ Return 1;


f(n)
int x; Else
f(n)=f(n-1)+f(n-2) fibinf=fibsup; Return fib(n-1)+fib(n-2)
n>=2
fibsup=x+fibinf; }
}
return fibsup;
}
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos

MULTIPLICACION Public int mult(int a; int b){ Public int mult (int a, int b){
Int r==0; If (a>1){
for(int i=0; i<a; i++){ return incog(a-1;b)+b;
r=r+b; }
} else{
return return b;
} }
}
Public int división(int a, int b){ Public int división(int a, int b){
DIVISION

If b>a{ If b>a{
return 0; return 0;
} }
else{ else{
return división(a-b, b)+1; return división(a-b, b)+1;
} }
} }
Public int mcd(int a, int b){ Public int mcd (int a, int b){
MAXIMO COMUN DIVISOR

Int res==1; Int a,b;


For(int i=1; i<a; i++){ If b==0;
If(a%i==0)&(b%i==0){ Return a;
Res i; Else{
} Return mcd(b,a%b)
} }
}
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos

METODOS RECURSISVOS

Primero debemos decir que la recursividad no es una estructura de datos, sino que es una técnica de programación que nos perm ite
que un bloque de instrucciones se ejecute n veces. Remplaza en ocasiones a estructuras repetitivas.

Este concepto será de gran utilidad para el capítulo de la estructura de datos tipo árbol.

La recursividad es un concepto difícil de entender en principio, pero luego de analizar diferentes problemas aparecen puntos comunes.

En Java los métodos pueden llamarse a sí mismos. Si dentro de un método existe la llamada a sí mismo decimos que el método es
recursivo.

Cuando un método se llama a sí mismo, se asigna espacio en la pila para las nuevas variables locales y parámetros.

Al volver de una llamada recursiva, se recuperan de la pila las variables locales y los parámetros antiguos y la ejecución se reanuda en
el punto de la llamada al método.

6. ALGORITMO DIVIDE Y VENCERÁS


En la cultura popular, divide y vencerás hace referencia a un refrán que implica resolver un problema difícil, dividiéndolo en partes
más simples tantas veces como sea necesario, hasta que la resolución de las partes se torna obvia. La solución del problema
principal se construye con las soluciones encontradas.

En las ciencias de la computación, el término divide y vencerás hace referencia a uno de los más importantes paradigmas de diseño
algorítmico. El método está basado en la resolución recursiva de un problema dividiéndolo en dos o más sub-problemas de igual tipo
o similar. El proceso continúa hasta que éstos llegan a ser lo suficientemente sencillos como para que se resuelvan directamente. Al
final, las soluciones a cada uno de los sub-problemas se combinan para dar una solución al problema original.

Das könnte Ihnen auch gefallen