1 / 14

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. 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:

dewey
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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).

  3. 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:

  4. 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).

  5. 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>]

  6. 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); } }

  7. 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. • Porgeneralización

  8. 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); } }

  9. 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.

  10. 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>

  11. 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; }

  12. 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 ()); } }

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

  14. 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); } }

More Related