Estructura y Organizacion de Datos Unidad I

Embed Size (px)

Citation preview

Estructuras y Organizacin de DatosIngeniera en Tecnologas de la Informacin y Comunicaciones Objetivo general del curso: Aplicar estructuras de datos en la elaboracin de programas. Utilizar listas enlazadas para la solucin de problemas computacionales. Manipular diversos tipos de rboles para clasificar datos. Comparar los diversos algoritmos de ordenamiento. Comparar los diversos algoritmos de bsqueda. Aplicar la recursividad como estrategia de solucin de problemas. Analizar las estrategias de recuperacin de informacin perdida o daada en dispositivos de almacenamiento secundario.

Esta asignatura aporta al perfil del Ingeniero en Tecnologa de la Informacin y Comunicaciones las siguientes competencias: Conocimiento y manejo de tecnologas y herramientas actuales y emergentes acordes a las necesidades del entorno. Concientizarlo de la importancia de la estructuras de datos, para implementarlas en el desarrollo de sistemas de informacin utilizando una metodologa basada en la programacin de componentes e implementando tecnologa web. Identificar las especificaciones, aplicaciones e implementaciones de las principales estructuras de datos. Implementar eficientemente las principales estructuras de datos. Utilizar correctamente las estructuras de datos adecuadas para resolver distintos problemas.

Competencias previas Aplicar algoritmos computacionales. Aplicar tcnicas de modelado para la solucin de problemas. Aplicar la sintaxis de un lenguaje orientado a objetos. Aplicar un lenguaje orientado a objetos para la solucin de problemas. Utilizar el modelado de objetos. Crear programas en algn lenguaje computacional.

Competencias a desarrollarCompetencias especficas: Aplicar las estructuras de datos en la elaboracin de programas. Utilizar listas enlazadas para la solucin de problemas computacionales. Manipular diversos tipos de rboles para clasificar datos. Comparar los diversos algoritmos de ordenamiento. Comparar los diversos algoritmos de bsqueda. Aplicar la recursividad como estrategia de solucin de problemas. Analizar las estrategias de recuperacin de informacin perdida o daada en dispositivos de almacenamiento secundario

Reticula Ingeniera en Tecnologias de la Informacion y Comunicaciones ITIC-2010-225.pdf

Temario:1. Fundamentos de estructura de datos 1.1. Definicin. 1.2. Clasificacin. 1.3. Estructuras lineales y no lineales. 1.4. Estructuras dinmicas y estticas. 2. Estructuras lineales 2.1. Pilas estticas y dinmicas. 2.2. Colas estticas y dinmicas. 2.3. Aplicaciones 3. Estructuras no lineales 3.1. Recursividad. 3.2. rboles. 3.3. Grafos. 4. Mtodos de ordenamiento y bsqueda 4.1. Algoritmos de ordenamiento. 4.2. Mtodos de bsqueda. 4.3. Recuperacin de datos.

Unidades de aprendizaje del curso y su respectiva bibliografa.Unidad 1: Fundamentos de estructuras de datos Competencia especfica a desarrollar Actividades de Aprendizaje Investigar los conceptos fundamentales de las estructuras de datos. Identificar los conceptos bsicos de las Identificar las estructuras de datos lineales y estructuras de datos. no lineales de acuerdo al problema a Identificar las diferentes estructuras de datos, resolver. respecto a su implementacin. Identificar las estructuras de datos estticas y dinmicas de acuerdo al problema a resolver. Unidad 2: Estructuras lineales Competencia especfica a desarrollar Actividades de Aprendizaje Elaborar mapas conceptuales para comprender los conceptos bsicos, el funcionamiento y las aplicaciones que tienen Aplicar las principales estructuras de datos las estructuras de datos lineales. lineales. Realizar ejercicios implementando estructuras de datos lineales. Unidad 3: Estructuras no lineales Competencia especfica a desarrollar Actividades de Aprendizaje Elaborar mapas conceptuales para comprender los conceptos bsicos, el funcionamiento y las aplicaciones que tienen las estructuras de datos no lineales. Aplicar las principales estructuras de datos no Realizar ejercicios de conversin de lineales. soluciones recursivas a soluciones iterativas y viceversa. Realizar ejercicios implementando estructuras de datos no lineales.

Unidad 4: Mtodos de ordenamiento y bsqueda Competencia especfica a desarrollar Actividades de Aprendizaje Discutir el uso de los mtodos de ordenamiento, bsqueda y recuperacin de datos en memoria principal y secundaria. Investigar los diversos algoritmos de los mtodos de ordenamiento, bsqueda y recuperacin de datos segn el tipo de Clasificar tcnicas para recuperacin de problema que se desea resolver. informacin en dispositivos de almacenamiento Elaborar un mapa conceptual que visualice primario y secundario. las diferencias entre los mtodos en cuestin. Gestionar datos de forma ptima, para facilitar Aplicar los algoritmos investigados en dos su procesamiento y la toma de decisiones. lenguajes orientados a objeto y anotar observaciones. Elaborar una aplicacin informtica donde se implementen archivos y aplicar mtodos de ordenamiento, bsqueda y recuperacin de datos en memoria principal y secundaria.

Bibliografa1. Joyanes Aguilar, Luis. Estructura de Datos en Java. Primera edicin. Ed. McGraw Hill. 2007. 2. Lewis, John. Estructura de Datos con JAVA: Diseo de estructuras y algoritmos. Primera edicin. Ed. Pearson. 2007. 3. Guardati Buemo, Silvia. Estructura de Datos orientada a objetos: Algoritmos con C++. Primera edicin. Ed. Pearson. 2007. 4. Allen, Marc. Estructura de Datos con JAVA: Compatible con JAVA 2. Ed. Prentice Hall. 5. Cairo, Osvaldo. Estructura de Datos. Tercera edicin. Ed. McGraw Hill; 2006.

Estrategias didcticas a seguir. Exmenes 60% Productos de Aprendizaje 40%

Los criterios de evaluacin y acreditacin respectiva. Fechas de Exmenes Examen 1er 2. 3er Regularizacin o 2 Oportunidad Calificacin Final Fecha Unidades

Otras Observaciones: Personificador Hora de entrada Asistencia a clase Derecho a examen Revisin equitativa Regularizacin Extraordinario I

Calendarizacin del trabajo semestral.En cada unidad se desarrollaran prcticas que involucren la resolucin de problemas utilizando lenguajes de programacin orientados a objetos de los temas vistos en clase.

1.

Fundamentos de estructura de datos

En la prctica, la mayor parte de informacin til no aparece aislada en forma de datos simples, sino que lo hace de forma organizada y estructurada. Los datos de los diccionarios o enciclopedias son colecciones de datos y serian intiles si no estuvieran organizadas de acuerdo con unas determinadas reglas. Adems bajo esta estructura de organizacin la informacin supone ventajas adicionales al facilitar el acceso y el manejo de datos. Como tendremos ocasin de ver, la seleccin de una estructura de datos frente a otra, a la hora de programar es una decisin importante, ya que ellos influye decisivamente en el algoritmo que se vaya a utilizar para la resolucin del problema. Programacin = Estructura de Datos + Algoritmos 1.1. Definicin.

En programacin, una estructura de datos es una forma de organizar un conjunto de datos elementales con el objetivo de facilitar su manipulacin. Un dato elemental es la mnima informacin que se tiene en un sistema. Bit Acrnimo de Binary digit. (dgito binario). Un bit es un dgito del sistema de numeracin binario (0, 1). Unidad bsica de almacenamiento de informacin, equivale a ocho bits (octeto).Abrev. K M G T P E Z Y B Ge 210 = 1024 220 = 1 048 576 230 = 1 073 741 824 240 = 1 099 511 627 776 250 = 1 125 899 906 842 624 260 = 1 152 921 504 606 846 976 270 = 1 180 591 620 717 411 303 424 280 = 1 208 925 819 614 629 174 706 176 290 = 1 237 940 039 285 380 274 899 124 224 2100 = 1 267 650 600 228 229 401 496 703 205 376 Factor 103 = 1000 106 = 1 000 000 109 = 1 000 000 000 1012 = 1 000 000 000 000 1015 = 1 000 000 000 000 000 1018 = 1 000 000 000 000 000 000 1021 = 1 000 000 000 000 000 000 000 1024 = 1 000 000 000 000 000 000 000 000 1027 = 1 000 000 000 000 000 000 000 000 000 1030 = 1 000 000 000 000 000 000 000 000 000 000 Tamao

ByteNombre Kilo Mega Giga Tera Peta Exa Zetta Yotta Bronto Geop

Carcter

Cualquier signo tipogrfico. Puede ser una letra, un nmero, un signo de puntuacin o un espacio. En gramtica tradicional es cada uno de los segmentos limitados por pausas o espacios en la cadena hablada o escrita que puede aparecer libremente en cualquier posicin y que est dotada de una funcin.

Palabra

1.2.

Clasificacin.byte short int long char boolean

Predefinidos Ordinal Definidos por el usuario Simple Reales Cronolgicos Apuntador, punteros o referencias

Enteros Carcter Lgicos

Enumerados Subrango

float double

No Ordinal

Tipos de datos Compuesto o Complejo

Cadenas

String StringBuffer

Estructura de datos

Arreglos Registros Listas Conjuntos rboles Grafos

Arrays Vector Class

Abstractos

abstract class

1.3.

Estructuras lineales y no lineales.

Estructura de datos lineales, los datos o elementos se almacenan en posiciones de memoria consecutivas. Por ejemplo los Arreglos y las Listas. Estructura de datos no lineales, los datos o elementos no se almacenan en posiciones de memoria consecutivas. Por ejemplo, los rboles son estructura de datos no lineales y se pueden representar estructuras jerrquicas, direcciones o etiquetas de una manera organizada.

Tipo de datos en Java

Tipo boolean char byte

Tamao en bits 1 16 8

Rango de valores true o false Nota: El No. de bits puede variar segn la plataforma \u0000 hasta \uFFFF' Conjunto Unicode de ISO -128 a +127 -27 a 27 1

Tipo short int long

Tamao en bits 16 32 64

Rango de valores -32,768 a +32,767 -215 a 215 1 -2,147,483,648 a +2,147,483,647 -231 a 231 1 -9,223,372,036,854,775,808 a +9,223,372,036,854,775,807 -263 a 263 1 Rango negativo: -3.4028234663852886E+38 hasta -1.40129846432481707E-45 Rango positivo: 1.40129846432481707E-45 hasta 3.4028234663852886E+38 Rango negativo: -1.797693134862157E308 hasta -4.94065645841246544E324 Rango positivo: 4.94065645841246544E324 hasta 1.797693134862157E308

float

32

double

64

Tokens elementos lxico de los programas Existen 5 clase de tokens: identificadores, palabras reservadas, literales, operadores y otros. Identificadores Los identificadores pueden representar variables, constantes, mtodos, nombres de archivos, etc. Diagrama de contexto de los identificadores:

Regla para formar un identificador: 1. Debe comenzar por una letra 2. Despus de la 1er. Letra puede contener letras, dgitos o guin de piso 3. No estn permitidos los espacios en blanco 4. No deben formar palabras reservadas 5. Java es sensibles a las maysculas y minsculas 6. En Java la longitud de los identificadores no tiene lmite.

Arreglos

Una de las caractersticas de Java es que los temas complejos como punteros o apuntadores lo hacen de una forma sencilla. Las referencias no son mas que apuntadores, pero manejados de una forma simplificada. Los arreglos son referencia o apuntadores. Definicin. Un arreglo (vector o tabla) es una secuencia de objetos del mismo tipo. A los objetos se les llama elementos del arreglo y se enumeran del 0 al n-1, adems se almacenan linealmente en posiciones de memoria consecutivas. Unidimensionales. Tipo [ ] identificador

;

,Tipo identificador [ ]

;

,Los corchetes pueden colocarse de dos formas: o Los corchetes colocados despus del tipo de dato, esto indica que todos los identificadores son arreglos. o Los corchetes colocados despus del identificador, indica que solo el identificador que tenga los corchetes es un arreglo.

Ejemplo: int enteros[], x, y; float [] cal1, cal2, cal3, prom; char [] letra1, letra2[], letra3;

enteros en un arreglos de tipo int, x y y son variables tipo int. cal1, cal2, cal3 y prom son arreglos unidimensionales. letra1 y letra3 son arreglos de una dimension del tipo char y letra2 es una arreglo de arreglos de tipo char (una matriz).

Esto solo esta declarando el nombre del arreglo y el tipo de datos que se van a almacenar en l (referencia), para declarar el nmero de elementos del arreglo se hace por medio del operador new.

Ejemplo: float [] CalificacionFinal; CalificacionFinal = new float [45]; La primera sentencia declara un arreglo CalificacionFinal que manejara tipos de datos float. La segunda sentencia declara que manejara 45 elementos (del 0 al 44). Otra forma de hacer la declaracin del arreglo, as como de los elementos es: float [] CalificacionFinal = new float [45]; Para almacenar datos en un arreglo basta con poner el nombre del arreglo, el subndice, el smbolo igual y la expresin que se quiere almacenar y finalmente punto y coma. CalificacionFinal[5] = 70; System.out.println(La Calificacin Final 6 es: + CalificacionFinal[5]); Otra forma de introducir datos en un arreglos es inicializndolo desde la declaracin. int enteros[] = {5, 4, 9 ,8, 7, 6, 2 , 1, 3, 0}; Tamao de los arreglos (length) Java considera cada arreglo un objeto, debido a ello se pude conocer el nmero de elementos de un arreglo por medio del campo length.

Bidimensionales. Los arreglos vistos anteriormente se conocen como arreglos unidimensionales y se caracterizan por tener un solo subndice. Los arreglos multidimencionales son aquellos que tienen ms de una dimensin y, en consecuencia, ms de un ndice. Los arreglos ms usuales son los de dos dimensiones, conocidos como matrices. Un arreglo de dos dimensiones equivale a una tabla con filas y columnas: n 0 1 2 3 4 0 1 2 3

m Declaracin de arreglos bidimensionales (matriz) Ejemplo:

;Tipo [ ] [ ] identificador

,Tipo identificador [ ] [ ]

;

,int puestos[ ][ ], x, y; float [ ][ ] cal1, cal2, cal3, prom; puestos en un arreglos de dos dimensiones del tipo int, x y y son variables tipo int. cal1, cal2, cal3 y prom son arreglos bidimensionales.

Como ya se menciono estas declaraciones son simplemente referencias, para declarar el nmero de elementos del arreglo se hace por medio del operador new.

Ejemplo: float [ ][ ] Calificaciones; Calificaciones = new float [45][4]; La primera sentencia declara un arreglo Calificaciones que manejara tipos de datos float. La segunda sentencia declara que manejara 45 filas (del 0 al 44) y 4 columnas (del 0 al 3). Otra forma de hacer la declaracin del arreglo, as como de los elementos es: float [ ][ ] Calificaciones = new float [45][3]; Inicializacin de arreglos multidimensionales Al igual que los arreglos unidimensionales, los arreglos multidimensionales se pueden inicializar desde la declaracin. Ejemplo: int tabla1[][] = { {51, 24, 33}, {32, 23, 45} }; Se define una matriz de 2 filas por 3 columnas Tambin se puede utilizar otros formatos como los siguientes: int tabla1[ ][ ] = { {51, 24, 33}, {32, 23, 45} } int tabla1[ ][ ] = { {51, 24, 33}, {32, 23, 45} }; tabla1[ ][ ] 0 0 1 51 32 1 24 23 2 33 45

int tabla2[ ][ ] = { { 1, 2, 3, 4}, { 5, 6, 7, 8}, { 9, 10, 11, 12} };

tabla2[ ][ ] 0 0 1 2 1 5 9 1 2 6 10 2 3 7 11 3 4 8 12

Java trata los arreglos de dos o ms dimensiones como un arreglo de arreglos, por tanto puede crear arreglos no proporcionales. Por ejemplo: a) double datos[ ][ ] = { {1.5, -2.5}, {5.0, 0.0, 1.5} };

Se ha creado un arreglo con dos filas, la 1 con dos columnas y la 2. con 3. b) int [ ] a = { 1, 3, 5 }, b = { 2, 4, 6, 8, 10 }; int z[ ][ ] = { a, b };

Primero se defini el arreglo a con 3 elementos y despus el arreglos b con 5 elementos, posteriormente se define la matriz z con dos filas, la primera con 3 elementos (los del arreglo a) y la segunda con 5 elementos (los del arreglo b). Mtodo length con los arreglos bidimensionales Para saber la longitud de la ltima dimensin se debe especificar los subndices de los subndices precedentes, por ejemplo para una matriz:

Acceso a los elementos del arreglo bidimensional Por ejemplo si tenemos el siguiente matriz: int [ ][ ] a = new int [3][4]; a Fila 0 Fila 1 Fila 2 Columna 0 a[0][0] a[1][0] a[2][0] Columna 1 a[0][1] a[1][1] a[2][1] Columna 2 a[0][2] a[1][2] a[2][2]ndice de la columna ndice de la fila Nombre del arreglo

Columna 3 a[0][3] a[1][3] a[2][3]

Para almacenar datos en una matriz basta con poner el nombre del arreglo, el subndice de las filas y el subndice de las columnas, el smbolo igual y la expresin que se quiere almacenar y finalmente despus punto y coma. Por ejemplo: a[1][3] = Expresin;

Multidimensionales. Java proporciona la probabilidad de almacenar varias dimensiones, aunque raramente los problemas del mundo real se manejan ms tres dimensiones, esto porque para los seres humanos es difcil representar grficamente arreglos con ms de tres dimensiones. Para representar un arreglo de tres dimensiones lo haremos por medio de un cubo. int cubo [ ][ ][ ] = new int [4][5][3]; 4

3

x 5

y

z

Almacenar datos en el arreglo multidimensional: Al igual que en los anteriores arreglos, se deben poner los subndices al cual se quiere acceder y posteriormente la expresin a asignar. cubo[2][3][1] = 15; Objetos que permiten E/S por consola. En Java, la entrada y salida se lee y escribe en flujos (streams). La fuente bsica de entrada de datos es el teclado y la fuente de salida es pantalla. La clase System define dos referencias a objetos static para la gestin de entrada (in) y salida (out). Salida (System.out) El objeto out definida en la clase System est asociado con el flujo de salida, que dirige los datos a consola y permite visualizarlos en pantalla, por ejemplo: System.out.println(Esta es una cadena); Se visualizar en pantalla: Esta es una cadena. Descripcin del mtodo print: void print(cadena) void println(cadena) Despliega una cadena en pantalla. Despliega una cadena en pantalla y al final un carcter de nueva lnea (\n).

Con estos mtodos se puede escribir cualquier cadena o dato de los tipos primitivos, como por ejemplo: System.out.println( "Valores de las Variables: \n" + "a=" + a +"\n" + "b=" + b +"\n" + "x=" + x +"\n" + "y=" + y );

Entrada (System.in) Por medio de un objeto Scanner se puede leer datos desde un programa, esta clase pertenece al paquete java.util y debe ser importada. Para poder utilizarlo instancie un objeto de la siguiente forma: Sacanner identificador = new Scanner (System.in); Esta expresin crea un objeto Scanner y determina que leer los datos desde teclado mediante los siguientes mtodos: identificador.nextBoolean() Para Booleanos identificador.nextByte() Para nmeros Enteros tipo byte identificador.nextShort() Para nmeros Enteros tipo short identificador.nextInt() Para nmeros Enteros tipo int identificador.nextLong() Para nmeros Enteros tipo long identificador.nextFloat() Para nmeros flotantes identificador.nextDouble() Para nmeros doubles identificador.next() Para el siguiente token identificador.nextLine() Para una lnea

El siguiente ejemplo lee dos nmeros enteros desde Windows, los suma y muestra el resultado en una ventana.

Al convertir datos tipo String a tipo int (con Integer.parseInt()) manda una excepcin de formato de numero si ocurre un error.

El mtodo showMessageDialog de la clase JOptionPane tiene varias formas de enviarles parmetros: public static void showMessageDialog(Component componentePadre, Object Mensaje) Donde: componentePadre Determina la ventana en que se desplegara el mensaje, si es null, se despliega en la ventana por defecto. Objeto a desplegar

Mensaje

public static void showMessageDialog(Component componentePadre, Object Mensaje, String Titulo, int TipodeMensaje) Donde: componentePadre Determina la ventana en que se desplegara el mensaje, si es null, se despliega en la ventana por defecto. Objeto a desplegar Cadena de characters de la caja de dialogo Valor entero que determina que imagen se despliega segn la siguiente tabla:

Mensaje Titulo TipodeMensaje

Tipo de cuadro de dilogo de mensaje

Icono

Descripcin

JOptionPane.ERROR_MESSAGE

Ventana de Error

JOptionPane.INFORMATION_MESSAGE JOptionPane.WARNING_MESSAGE

Ventana Informativa Ventana de Advertencia

Tipo de cuadro de dilogo de mensaje

Icono

Descripcin

JOptionPane.QUESTION_MESSAGE

Ventana de introduccin de datos o seleccin de alguna alternativa Sin Icono Ventana estndar de mtodos

JOptionPane.PLAIN_MESSAGE Clase Math

La Clase Math proporciona una gran variedad matemticos al igual que algunas constantes tiles. Campos Descripcin

final static double E final static double PI

Constante e: 2.7182818284590452354 Constante pi: 3.14159265358979323846

Mtodos static double abs(double d) static float abs(float f) static long abs(long l) static int abs(int i) static double acos(double d)

Descripcin

Regresa el valor absoluto especificado.

Regresa el inverso del coseno del ngulo especificado en radianes. Regresa el inverso del seno del ngulo especificado en radianes. Regresa el inverso de la tangente del nmero especificado. Regresa el ngulo definido por las coordenadas rectangulares (d1, d2) Regresa el entero ms pequeo, mayor o igual d. Ejemplo: Math.ceil(9.3) 10.0 Math.ceil(-9.3) -9.0

static double asin(double d)

static double atan(double d)

static double atan2(double d1, double d2)

static double ceil(double d)

Mtodos static double cos(double d)

Descripcin Regresa el coseno del ngulo especificado en radianes. Regresa ed. Ejemplo:

static double exp(double d)

Math.exp(1.0) 2.71828 Math.exp(2.0) 7.38906 Regresa el entero ms grande, menor o igual a d. Ejemplo:

static double floor(double d) Math.floor(9.3) Math.floor(-9.3) 9.0 -10.0

static double log(double d)

Regresa el logaritmo natural de d (base e). Ejemplo: Math.log(Math.E) 1.0

static double max(double d1, double d2) static float max(float f1, float f2) static long max(long l1, long l2) static int max(int i1, int i2) static double min(double d1, double d2) static float min(float f1, float f2) static long min(long l1, long l2) static int min(int i1, int i2)static double pow(double base, double exp) throws AritmeticException

Regresa el valor ms grande. Ejemplo: Math.max(2.3,12.7) Math.max(-2.3,-12.7) 12.7 -2.3

Regresa el valor ms pequeo. Ejemplo: Math.min(2.3,12.7) Math.min(-2.3,-12.7) 2.3 -12.7

Regresa baseexp. Ejemplo: 52

static double random()

Regresa un nmero aleatorio comprendido entre 0.0 y 1.0. 0.0