Tema 1. Introducción a la programación (Lenguaje java). 1.4 Estructuras de datos.

14
Tema 1. Introducción a la programación (Lenguaje java). 1.4 Estructuras de datos.

Transcript of Tema 1. Introducción a la programación (Lenguaje java). 1.4 Estructuras de datos.

Page 1: Tema 1. Introducción a la programación (Lenguaje java). 1.4 Estructuras de datos.

Tema 1. Introducción a la programación (Lenguaje java).

1.4 Estructuras de datos.

Page 2: Tema 1. Introducción a la programación (Lenguaje java). 1.4 Estructuras de datos.

1.4 Estructuras de datos.

Concepto de Estructura de datos:Agrupación de datos que se trata como una unidad en su

conjunto. Se construyen a partir de los tipos de datos simples

Clasificación:Por su naturaleza:

Homogénea: Todos del mismo tipo (ej: vectores, tablas, matrices n dimensionales.

Heterogénea: De diferente tipo (ej: registros).Por su forma de almacenamiento.

Memoria central: Estática. Tamaño conocido a priori. Dinámica. El tamaño varía durante la ejecución del

programa (ej: listas, árboles, grafos). Memoria externa (ficheros y bases de datos).

Page 3: Tema 1. Introducción a la programación (Lenguaje java). 1.4 Estructuras de datos.

1.4 Estructuras de datos.

Tecnología para estructuras dinámicas (I). Se basa en el concepto de puntero (pointer). Puntero: variable estática cuyo contenido (referencia) es la

dirección de una región de la memoria dinámica (nodo) que contiene el dato.

Mediante un puntero se puede (además de acceder al contenido de su nodo) reservar y liberar espacio.

Modelo:

Page 4: Tema 1. Introducción a la programación (Lenguaje java). 1.4 Estructuras de datos.

1.4 Estructuras de datos.

Tecnología para estructuras dinámicas (II).En Java los punteros apuntan a (referencian)

objetos. En otros lenguajes (C o Pascal) pueden apuntar a estructuras de datos.

Sintaxis:Crear un nodo: <tipo> <variable> = new <tipo | Constructor>; Eliminar un nodo: innecesario en Java.Asignación: <puntero1> = <puntero2>.

La referencia <puntero2> se copia en <puntero1>, Comparación: <puntero1> == <puntero2>.

Devuelve un valor booleano en función de que ambas referencias sean iguales o no.

Puntero “especial”: null. No apunta a ningún sitio (no hay reserva de memoria).

Page 5: Tema 1. Introducción a la programación (Lenguaje java). 1.4 Estructuras de datos.

1.4 Estructuras de datos.

Estructuras de datos estáticas (I).Homogéneas:Unidimensionales (vectores)

Modelo.

Sintaxis. Declaración (vector nulo): <tipoElementos> [] <nombreVector>; Construcción: <tipoElementos> [ ] <nombreVector> = new <tipoElementos> [<tamaño>] Acceso:

Al conjunto (referencia): <nombreVector> A un elemento: <nombreVector> [<indice>]

Page 6: Tema 1. Introducción a la programación (Lenguaje java). 1.4 Estructuras de datos.

1.4 Estructuras de datos.Ejemplo de uso de vector:public class PruebaVectores { static float media (int [ ] dato) { float resul = 0; for (int i = 0; i < 5; i ++) resul = resul + dato [i]; resul = resul / i; return resul; } public static void main (String [ ] args) throws NumberFormatException, IOException { int [ ] d = new int [5]; int i, rango; float media; BufferedReader linea = new BufferedReader (new InputStreamReader (System.in)); System.out.println ("Introduce cinco numeros enteros: "); for (i = 0; i < 5; i ++)

d [i] = Integer.parseInt (linea.readLine ()); media = media (d); System.out.println("El valor medio es: " + media); }}

Page 7: Tema 1. Introducción a la programación (Lenguaje java). 1.4 Estructuras de datos.

1.4 Estructuras de datos.Estructuras de datos estáticas (II).Homogéneas:

Bidimensionales (matrices o tablas) Modelo.

Sintaxis. Declaración: <tipoElementosMatriz> [ ] [ ] <nombreMatriz>; Acceso:

Al conjunto (referencia): <nombreMatriz> A un elemento: <nombreMatriz> [<indice1>] [<indice2>]

N-dimensionales. Por generalización

Page 8: Tema 1. Introducción a la programación (Lenguaje java). 1.4 Estructuras de datos.

1.4 Estructuras de datos.Ejemplo de uso de matriz:public class Prueba_matrices {

static void leerMatriz (int [ ][ ] temperaturas) throws NumberFormatException, IOException { BufferedReader linea = new BufferedReader(new InputStreamReader(System.in));

for (int i = 0;i<7;i++) for (int j = 0; j < 2; j++) { System.out.println("Valor dia: " + i + " extremo: " + j + ": "); temperaturas [i] [j] = Integer.parseInt (linea.readLine ()); } }

static int min (int [ ] [ ] temperaturas) { int i, resul = temperaturas [0] [0]; for (i = 1; i < 7; i++) if (temperaturas [i] [0] < resul)

resul = temperaturas [i][0]; return resul; } public static void main(String[] args) throws NumberFormatException, IOException { int [ ] [ ] temp = new int [7] [2];

leerMatriz(temp); int mini = min(temp);

System.out.println("Temperatura minima: " + mini); }}

Page 9: Tema 1. Introducción a la programación (Lenguaje java). 1.4 Estructuras de datos.

1.4 Estructuras de datos.

Estructuras de datos estáticas (III).Heterogéneas (registros).

Cada uno de sus elementos se denomina campo o atributo. Uno de ellos suele utilizarse como identificativo o clave (key).

Modelo.

Page 10: Tema 1. Introducción a la programación (Lenguaje java). 1.4 Estructuras de datos.

1.4 Estructuras de datos.Estructuras de datos estáticas (IV).Heterogéneas (registros).Sintaxis.

Declaración:class <variableRegistro> {// miembros <modificadorDeAccesoMiembro1> <tipoCampo1><nombreCampo1>;

... <modificadorDeAccesoN> <tipoCampoN><nombreCampoN>;

// constructor   <modificadorAcceso>

<variableRegistro>(<tipoCampo1><nomCampo1>, ... ,<tipoCampoN> <nomCampoN>) {

<AsignacionDeValoresInicialesDeCampos>;}

} Acceso:

Al conjunto (referencia) <nombreRegistro> A un elemento: <nombreRegistro> .<nombreCampo>

Page 11: Tema 1. Introducción a la programación (Lenguaje java). 1.4 Estructuras de datos.

1.4 Estructuras de datos.Ejemplo de uso de registro. Clase RegistroAlumno (I):

class RegistroAlumno {

//Variables miembro public String numeroMatricula; public String apellidos; public String nombre; public String eMail; public int año; public float calificacion;

// Constructor public RegistroAlumno () { numeroMatricula=null; apellidos =null; nombre = null; eMail=null; año = 1980; calificacion = 0; }

Page 12: Tema 1. Introducción a la programación (Lenguaje java). 1.4 Estructuras de datos.

1.4 Estructuras de datos.Ejemplo de uso de registro. Clase RegistroAlumno (II)://Métodos public String aCadena () {

return numeroMatricula+" "+" "+apellidos+" "+nombre+" "+eMail+" "+año+" "+calificacion; } public void cargarRegistro () throws IOException {

BufferedReader linea = new BufferedReader (new InputStreamReader (System.in)); System.out.println ("Numero de matricula: "); numeroMatricula = new String (linea.readLine ()); System.out.println ("Apellidos: "); apellidos = new String (linea.readLine ()); System.out.println ("Nombre: "); nombre = new String (linea.readLine ()); System.out.println ("Correo electronico: "); eMail = new String (linea.readLine ()); System.out.println ("Año de nacimiento: "); año = Integer.parseInt (linea.readLine ()); System.out.println ("Calificación: "); calificacion= Float.parseFloat (linea.readLine ()); System.out.println (this.aCadena ());

}}

Page 13: Tema 1. Introducción a la programación (Lenguaje java). 1.4 Estructuras de datos.

1.4 Estructuras de datos.

Estructuras de datos estáticas (V).Híbridas (ej: vector de registros)

Page 14: Tema 1. Introducción a la programación (Lenguaje java). 1.4 Estructuras de datos.

1.4 Estructuras de datos.Ejemplo de uso de vector de registros. Clase

PruebaRegistro:public class PruebaReg {

static void cargarTabla (RegistroAlumno [ ] alumnos) throws IOException { for (int i = 0; i < 6; i ++) { System.out.println ("Datos del alumno N: " + i); alumnos [i].cargarRegistro (); } }static float mediaCalif (RegistroAlumno [ ] alumnos) { float resul; resul = 0; for (int i = 0; i < 6; i ++) resul = resul + alumnos [i].calificacion; return resul/6;}public static void main (String [ ] args) throws IOException {

RegistroAlumno [ ] alumnos = new RegistroAlumno [6];float media;for (int i = 0; i < 6; i ++) alumnos[i]= new RegistroAlumno();

cargarTabla (alumnos); media = mediaCalif (alumnos); System.out.println ("La media de las calificaciones es: "+media);}

}