1. ESTRUCTURAS DE DATOS
“Conceptualización de
estructuras de datos”
Por: Eduardo Robayo
2. ESTRUCTURAS DE DATOS
• Son formas de organizar información o datos.
• Una estructura de datos se parece a una “clase”.
• Realmente una estructura de datos es “una clase contenedora que
proporciona almacenamiento para ítems de datos, y capacidades para
almacenar y recuperar estos datos”.
• Generalmente a las estructuras de datos se les asocian los ALGORITMOS que
es “es una secuencia de instrucciones que realizan una tarea” (flowchart).
• Existen dos tipos de estructuras de datos:
– Estáticas (arreglos, estructuras). Tamaño fijo.
– Dinámicas (listas, pilas, colas, árbol). Su tamaño puede cambiar.
• Cada tipo de estructura de datos tiene sus métodos específicos.
• Métodos comunes en las estructuras de datos son:
– Agregar elemento.
– Eliminar elemento.
– Editar elemento.
– Ordenar
– Buscar
3. Arreglos (Arrays)
• En POO hay dos tipos de datos: Primitivo (como int o double) y objetos, en
Java los arrays son objetos.
• Las estructuras de datos mas sencillas.
• Grupo de elementos que ocupan posiciones de memoria casi siempre
adyacentes, todos con el mismo nombre y del mismo tipo.
• Un arreglo es una colección de variables del mismo tipo que son
referenciadas con un nombre común a todas.
• Respecto de la memoria es importante entender que las variables del
arreglo se ubican en posiciones de memoria casi siempre adyacentes.
• Un arreglo puede ser:
– Unidimensional
– Multidimensional.
• A una variable del arreglo se le denomina “Elemento del arreglo”.
• A cada elemento del arreglo le corresponde un índice para referirse a el.
• Son estructuras de datos porque mantienen el mismo tamaño durante toda
la ejecución del programa.
4. Arreglos de una dimensión
Arreglo: Nombres [6]
Pedro Juan Luis María Antonio Angela
Nombres[0] Nombres[1] Nombres[2] Nombres[3] Nombres[4] Nombres[5]
Para hacer referencia a un elemento en particular del
arreglo, se indica el nombre del arreglo y el número de
posición del elemento. Las posiciones generalmente se
cuentan a partir del cero como primera posición.
Lectura: Arrays
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html
5. Como se declara un arreglo en Java
Java proporciona tres técnicas para crear un
array de una dimensión:
– usar sólo un inicializador,
– usar sólo la palabra clave new, y
– utilizar la palabra clave new con un inicializador.
6. Utilizando solo un inicializador
//Creación de un arreglo de animales.
String animales[] = {“Perro”, “Gato”, “Pollo”};
Crea un array que contendrá 3 elementos.
7. Usando la palabra clave NEW
//Creación de un arreglo de SALARIOS
Int [] salarios = new int [4];
Cada elemento contendrá un ítem de tipo
primitivo Entero.
8. Usando “new” y un inicializador
El siguiente código utiliza la palabra clave new
con un inicializador para crear un array
unidimensional con datos basados en tipos
primitivos.
int [] resultados = new int [] { 70, 80, 20, 30 };
9. Es posible crear arrays de cualquier
tipo de objeto
Circulo[] arrayCirculo = new Circulo[10];
//Declara un array de 10 objetos Circulo (Circulo es una
clase definida previamente);
Entonces, es posible crear arrays de cualquier tipo de
objeto.
El array de objetos se inicializa similar a un array tradicional:
For (int i=0; i < arrayCirculo.length;i++)
arrayCirculo[i] = new Circulo();
10. Como se agregan datos a un array
for(int i=0; i<miarreglo.length; i++){
miarreglo[i]=i*i+4;
}
Mostrar los elementos del array
for(int i=0; i<nombres.length; i++){
System.out.println(nombres[i]);
}
11. Buscar elementos y ordenar un array
Existen 3 algoritmos que son comunes para
buscar y ordenar los elementos de un array.
• Búsqueda lineal
• Búsqueda binaria
• Ordenación de burbuja
12. Búsqueda lineal
El algoritmo de búsqueda lineal busca en un arreglo unidimensional un
dato específico. La búsqueda primero examina el elemento con el índice 0
y continua examinando los elementos sucesivos hasta que se encuentra el
ítem o no quedan más elementos que examinar.
Pseudocódigo
DECLARE INTEGER i, buscar= 72
DECLARE INTEGER x [] = [ 20, 15, 12, 30, -5, 72, 456 ]
FOR i = 0 TO LENGTH (x) - 1
IF x [i] IS buscarTHEN
PRINT "Found ", buscar
END Ventaja de éste algoritmo:
END IF Puede buscar en arreglos
NEXT i ordenados o desordenados.
PRINT "Did not find ", buscar Desventaja de éste algoritmo:
Mucho tiempo de búsqueda.
END
13. Búsqueda binaria
La búsqueda binaria divide el array en sección inferior y
superior calculando el índice central del array.
Si el dato se encuentra en ese elemento, la búsqueda
binaria termina.
Si el dato es numéricamente menor que el dato del
elemento central, la búsqueda binaria calcula el índice
central de la mitad inferior del array, ignorando la sección
superior y repite el proceso.
La búsqueda continua hasta que se encuentre el dato o se
exceda el límite de la sección (lo que indica que el dato
no existe en el array)
14. Pseudocódigo de la búsqueda binaria
DECLARE INTEGER x [] = [ -5, 12, 15, 20, 30, 72, 456 ]
DECLARE INTEGER loIndex = 0
DECLARE INTEGER hiIndex = LENGTH (x) - 1
DECLARE INTEGER midIndex, buscar= 72
WHILE loIndex <= hiIndex
midIndex = (loIndex + hiIndex) / 2
IF buscar> x [midIndex] THEN
loIndex = midIndex + 1
ELSE
IF buscar< x [midIndex] THEN
hiIndex = midIndex - 1
ELSE
EXIT WHILE
END IF
END WHILE
IF loIndex > hiIndex THEN
PRINT buscar, " not found"
ELSE Ventaja:
PRINT buscar, " found" Reduce el tiempo
END IF Desventaja:
END
Necesita ordenar el array previamente.
15. Ordenación por Burbuja
Este algoritmo hace varios pases sobre un array
unidimensional.
Por cada pase, el algoritmo compara datos
adyacentes para determinar si numéricamente es
mayor o menor.
Si el dato es mayor (para ordenaciones
ascendentes) o menor (para ordenaciones
descendientes) los datos se intercambian y se baja
de nuevo por el array.
En el último pase, el dato mayor (o menor) se ha
movido al final del array.
16. Pseudocódigo de la ordenación por
burbuja
Para ordenación ascendente
DECLARE INTEGER i, pass
DECLARE INTEGER x [] = [ 20, 15, 12, 30, -5, 72, 456 ]
FOR pass = 0 TO LENGTH (x) - 2
FOR i = 0 TO LENGTH (x) - pass - 2
IF x [i] > x [i + 1] THEN Analice y realice una
prueba de escritorio para
SWAP x [i], x [i + 1] que entienda el
END IF funcionamiento del
NEXT i algoritmo.
NEXT pass
END
Desventaja:
Lentitud
17. Ejercicio en clase
Desarrolle un APPLET que capture las notas definitivas del
primer corte de la asignatura “ESTRUCTURAS DE DATOS”
e indique:
1. La nota mas alta
2. La nota mas baja
3. El promedio de las notas
4. Debe permitir editar cualquier nota.
5. Mostrar las notas ordenadas de menor a mayor.
Entregue todos los archivos del proyecto en
VIRTUALSABANA empaquetados en formato ZIP.