Tipos de Datos Abstractos y Estructuras Dinamicasv2

121
Algoritmos y estructuras de datos Silvia B. González Brambila [email protected] H-293

description

Estructuras de datos

Transcript of Tipos de Datos Abstractos y Estructuras Dinamicasv2

Diapositiva 1

Algoritmos y estructuras de datosSilvia B. Gonzlez [email protected]

ObjetivosAplicar tcnicas de programacin en C usando estructuras y recursividadImplementar estructuras de datos usando memoria esttica y dinmica en CSeleccionar estructuras de datos para resolver problemas especficosSeleccionar algoritmos de bsqueda y ordenamiento para problemas especficosContenido sintticoTipos de datos abstractos y estructuras dinmicasRecursividad y eficienciaEstructuras para listasEstructuras para rbolesEstructuras para grficasAlgoritmos de bsqueda internaAlgoritmos de ordenamiento internoAlgoritmos de procesamiento de cadenas

BibliografaAho A. V., Ullman, J. D., Hopcroft J. E., Estructuras de datos y algoritmos, Pearson, 2000Sedgewick R., Algorithms in C Parts 1-4: Fundamentals, Data structures, Sorting, Searching, Addison Wesley, 3ra. ed., 2001Sedgewick R., Algorithms in C Part 5: Graph algorithms, Addison Wesley, 3ra. ed., 2001Forma de evaluacinprogramas (aproximadamente 6):40%3 exmenes:60%

1. Tipos de datos abstractos y estructuras dinmicasResolver problemas requiere deHabilidad para crear y usar abstraccionesLos datos representan una abstraccin de la realidad en el sentido de que ciertas propiedades y caractersticas de los objetos reales son ignorados .Una abstraccin es una simplificacin de hechos; extraer y agruparResolver problema elegir una abstraccin o sea definir un conjunto de datos que representa la situacin realEleccin de representacinDatos + operacionesLa computadoras almacenan y manipulan datosDefinicionesUn tipo de datos es una coleccin de valoresUn tipo de datos abstracto (TDA) es un tipo de datos definido de forma nica mediante un tipo y un conjunto dado de operaciones definidas sobre el tipoUna estructura de datos es la implementacin fsica de un tipo de datos abstractoTipos de datos bsicosEntero tiene como tipo el conjunto de nmeros enteros definidos por las matemticas {-1,-2, , -) {0,1,2, , }

Tipo de datos elementalEn pseudocdigoenterointrealrealbooleanoboolcaractercharTDA bsicosEnteros tiene como tipo el conjunto de nmeros enteros definidos por las matemticas {-1,-2, , -) {0,1,2, , } y como operaciones la suma, la resta, la multiplicacin y la divisin entera.RealesBooleanosCaracteres

Operaciones para los numricosEnteros y Reales

Las prioridades se alteran con el uso de parntesis. Cuando existen operadores con la misma prioridad entonces se aplica la regla de asociatividad de izquierda a derecha.

OperacinSmboloPrioridadsuma+1resta-1multiplicacin*2divisin/2potenciacin^3divisin enteradiv2mdulomod2Operaciones para los BooleanosOperacinSmboloAND&OR|NOTClasesEvolucin de los TDARepresentacin de una clase bsciaUna clase tiene la siguiente forma:clase Nombre {principal {enunciados}}

Detalles de las clasesEl nombre de una clase y de una variable se forma de la siguiente manera:Una letra seguida de cero o ms letras, dgitos, $ o _Lo anterior se puede expresar como: *

Un enunciado en su forma ms simple permite que una variable almacene un valor especifico ya sea que se exprese explcitamente o a travs de una operacin.A esta operacin se le conoce como asignacin y se expresa en pseudocdigo mediante el siguiente smbolo:Ejemplo: si se desea que una variable "a" contenga el valor de 5, se expresa explcitamente como:a 5

Poniendo todo junto/** *Suma el entero 5 y el entero 7 **/clase Suma5y7 {principal {int a 5 //en la variable a se almacena el valor de 5int b 7 //en la variable b se almacena el valor de 7int c a + b //en c se almacena la suma de a con b}}

ComunicacinSin embargo, el algoritmo anterior carece de algo muy importante la comunicacin con el usuario, dicho de otra forma el resultado de la suma no se muestra.En muchas ocasiones tambin es necesario que el usuario establezca comunicacin con la mquina y para esto existen las operaciones de entrada y salida.

Operaciones de entrada/salidaEn pseudocdigo la operacin que permite establecer comunicacin al usuario con la mquina es:lee nombreVariableLa instruccin anterior hace que a la variable nombrada se le asigne el valor que el usuario proporcion.La operacin contraria es:escribe nombreVariableCuando se desea que la mquina comunique algo al usuario de manera predefinida, el conjunto de smbolos se encerrara entre comillasEjemplo: Dar las buenas tardes/** * Da las buenas tardes al usuario a travs de la pantalla **/clase Saludo {principal {escribe buenos das}}

EjercicioEscribir un programa que permita sumar dos nmeros enteros proporcionados por el usuarioSolucin/** * Suma dos enteros proporcionados por el usuario, el resultado lo imprime en pantalla **/clase Suma2Enteros {principal {int a, b, cescribe De un valor enterolee aescribe de otro valor enterolee bc a + bescribe La suma deescribe aescribe conescribe bescribe esescribe c}}

En algunas ocasiones se desea que la operacin de salida (escribe) concatene cadenas con valores de variables. Conviene utilizar el operador de concatenacin (+). Ms claro y compacto/** * Suma dos enteros proporcionados por el usuario, el resultado lo * imprime en pantalla. Versin ms compacta que la clase anterior **/clase Suma2Enteros {principal {int a, b, cescribe De un valor enterolee aescribe de otro valor enterolee bc a + bescribe La suma de + a + con + b + es + c}}EjercicioCalcular el IVA de un productoSolucin/** * Calcula el IVA de un producto. El usuario deber * proporcionar el valor * del producto **/clase CalculaIVA {principal {real precio, ivaescribe Dame el valor del productolee precioiva precio * 0.15escribe El IVA de un producto de $ + precio + es + iva}}

Uso de constantesEn algunas ocasiones existen valores que no cambian frecuentemente o son fijos, como el caso del IVA o el valor de (pi). En estos casos es conveniente utilizar constantes. Las constantes son valores de variables que no pueden ser reasignados es decir durante el programa no est permitido cambiar su valor. En pseudocdigo se empleara palabra clave const seguida del tipo y nombre de la constante, el smbolo de asignacin y de su valorSolucin con constante/** * Calcula el IVA de un producto. El usuario deber proporcionar el valor * del producto. Se utiliza una constante entera **/clase CalculaIVA {principal {const real costoIVA 0.15real precio, ivaescribe Dame el valor del productolee precioiva precio * costoIVAescribe El IVA de un producto de $ + precio + es + iva}}

EjemploSi ahora se desea calcular el IVA y el costo total del producto podramos escribir la siguiente clase:/** * Calcula el IVA y el costo total de un producto. El usuario deber* proporcionar el valor del producto. Se utiliza una constante **/clase CalculaIVA {principal {const int costoIVA 0.15real precio, iva, costoescribe Dame el valor del productolee precioiva precio * costoIVAtotal precio + ivaescribe El IVA de un producto de $ + precio + es + ivaescribe y su costo total es de $ + total}}

EjercicioSuponga que se desea calcular el costo de peaje de camiones. Los camiones que llegan a una cabina de peaje deben pagar $5.00 por eje mas $10.00 por cada tonelada del peso total del camin.

Planteamiento de solucinSolucin/** * Calcula la cuota de peaje que deber pagar un camin con base * a su peso **/clase Peaje {principal {const real costoEje 5.0const real costoTonelada 10.0int numEjes, numToneladasescribe Proporcione el nmero de ejes del caminlee numEjesescribe Cuntas toneladas son?lee numToneladascosto numEjes * costoEje + numToneladas * costoToneladaescribe El peaje del camin de: + numToneladas + y + numEjes + es $ + costo}}

Algunas reglasLos nombres de variables y algoritmos debern ser significativosEstrictamente prohibido utilizar del lado derecho de una expresin una variable que no haya sido inicializada previamente, i. e., del lado derecho de una expresin siempre debern aparecer variables que tengan un valor determinado o bien un valorLos nombres de las clases debern ser diferentes a los de cualquier variable que se utilice en el algoritmo (por el momento)

Elementos de programacinEl orden en que los enunciados se ejecutan en un algoritmo se conoce como flujo de control.

Flujo de controlA menos que se especifique lo contrario la ejecucin de un programa se realiza de manera lineal, de tal forma que se inicia en la primera sentencia y se procede a ejecutar la siguiente, y as sucesivamente hasta que se encuentra la ltima sentencia. Esta estructura de control se conoce como secuenciacin.Es posible alterar el flujo de control a travs de otras estructuras de control, las cuales pueden clasificarse en dos categoras: seleccin e iteracin.

SeleccinLas estructuras de seleccin a veces llamadas condicionales permiten discriminar qu sentencia se ejecutara despus. En pseudocdigo se estudiarn las siguientes: si-entonces-otro y el si-entonces. La decisin entre qu sentencia ejecutar est basada en una expresin booleana (aquella que al ser evaluada produce un valor de verdadero o un valor de falso).SeleccinPseudocdigo

si c1 e1otro e2

si c2 e3

Java

if (c1 )e1;else e2;

if (c1 )e1;

Ejemplo/** * Determina si una persona es joven (menor de 21 aos) **/clase SiempreJoven {principal {const int joven 21//Declaracin de la constante jovenint edadescribe Proporcione su edadlee edadsi edad < joven escribe La juventud es un tesoro divino, disfrtalaescribe La edad es un estado mental}}

IteracinLas estructuras iterativas o repetitivas permiten que una sentencia se ejecute varias veces dependiendo de una expresin booleana. En pseudocdigo se consideran las siguientes: paramientrasrepite

ParaEl para permite escribir una iteracin que se realizar de acuerdo al valor inicial de una variable y hasta que dicha variable alcance un valor final.para variable valorInicial hasta valorFinal, incrementoe1

Ejemplo/** * Imprime los nmeros del 1 al 100 **/clase Imprime1-100 {principal {para i 1 hasta 100, 1escribe i}}

Debido a que muchas veces el incremento es 1 se obviara, es decir no se pondr.EjercicioImprimir los mltiplos de 5 entre un lmite inferior y un lmite superior

Solucin/** * Imprime los nmeros mltiplos de 5 comprendidos entre un * lmite inferior y un lmite superior **/clase ImprimeMultiplos5 {principal {int limInf, limSupescribe Proporcione el lmite inferior y el lmite superiorlee limInf, limSuppara i limInf hasta limSupsi i mod 5 = 0 entoncesescribe i}}

MientrasSe usa para repetir una instruccin durante todo el tiempo en que una condicin particular sea verdadera.

En pseudocdigo:

mientras c1 e1

Ejemploclass EjemMientras { principal { int i 0 mientras (i