Beruflich Dokumente
Kultur Dokumente
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:
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).
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
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.
Las estructuras de datos dinámicas no tienen limitaciones en cuanto al tamaño de memoria ocupada.
LÓGICO
COMPUESTAS
ARREGLOS
2.- Compuestas
CARÁCTER
ESTRUCTURA DE DATOS DINAMICAS CONJUNTOS
ENTERO
CADENAS
NO LINIALES
PUNTO FLOTANTE PILA REGISTROS
LINIALES
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
Tipos
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos
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
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:
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;
calcularArea(lista);
}
}
}
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.
b. Recursividad anidada:
En algunos de los argumentos de la llamada recursiva hay una nueva llamada a sí misma.
{
if(n==0 ) return(m+1);
else if(m==0) return(ack(n-1,1));
return(ack(n-1, ack(n,m-1)));
}
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
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.
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.