Documente Academic
Documente Profesional
Documente Cultură
Programa cin
Datos)
(Estructuras de
Contenido
UNIVERSIDAD NACIONAL AUTNOMA DE MXICO..................................................................1 FACULTAD DE CONTADURA Y ADMINISTRACIN....................................................................1 Licenciatura En In !r"#tica......................................................................................................................1 Aut!r$ L.I. Mar%a &e L!ur&e' I'a(e) ........................................................................................................1 O*+ETIVO ,ENERAL............................................................................................................................Uni&a& 1. FUNDAMENTOS DE ESTRUCTURAS DE DATOS............................................................
OBJETIVO GENERAL
Al terminar el curso, el alumno implantar y manipular las estructuras de datos estticas y dinmicas ms importantes que todo buen programador debe conocer, definiendo estructuras lgicas de datos que le permitan hacer un uso ms eficiente del espacio de memoria, de minimizar los tiempos de acceso, as como de lograr formas ms efectivas de insercin y eliminacin de datos en estructuras de almacenamiento.
1.1. Abstraccin
'n esta unidad, se tratar inicialmente el concepto de abstra podemos encontrar en programacin, particularmente la abstra i!n y las diversas formas de abstraccin que i!n de datos.
1.1.1. Definicin
Abstraer es omitir detalles irrelevantes a las necesidades inmediatas. '(cluir detalles no deseados o no significativos al problema a resolver. 's la capacidad para encapsular y aislar la informacin del diseo y e)ecucin. 'n el desarrollo de nuestra comprensin de fenmenos comple)os la herramienta ms potente disponible por el intelecto humano es la abstraccin. *a abstraccin resulta de un reconocimiento de similitudes entre ob)etos, situaciones o procesos del mundo real y la decisin de concentrarse en estas similitudes e ignorar inicialmente las diferencias. +,oare*a abstraccin genera un modelo mental, que es una vista simplificada de cmo funcionan las cosas para interactuar con ellas, de esta forma, el diseo de soft.are produce modelos que pueden ser mane)ados por una computadora, los cuales deben ser mas sencillos que el sistema imitado o sern in/tiles. *a abstraccin nos permite simplificar el anlisis y resolucin de un problema separando las caractersticas que son relevantes de aquellas que no lo son. *a relevancia depender fuertemente del conte(to. *a abstraccin fue evolucionando desde la aparicin de los primeros lengua)es de programacin %instrucciones binarias que manipulaban directamente las interrupciones de la computadora& hasta la agrupacin de instrucciones primitivas que forman macro instrucciones que permiten distanciarse de las caractersticas arquitectnicas especficas del hard.are escribiendo soft.are para propsito gen#rico sin importar sobre qu# mquina se e)ecuta el programa.
1.1.2.
i!eles de Abstraccin
*a me)or forma de controlar la comple)idad es aumentar el nivel de abstraccin. Aunque la abstraccin es un concepto general aplicable en cualquier campo nosotros estamos interesados en la abstraccin que proporciona un lengua)e de programacin. 'n este sentido la aportacin ms importante ha sido el desarrollo de los lengua)es de alto nivel, #stos nos permiten utilizar ciertas construcciones de alto nivel en lugar de una secuencia de instrucciones mquina.
,acer encontrado 0 falso ,acer i 0 "i#ite$in%erior%a& 1ientras i ( li#ite$s&'erior%a& hacer 2i a+i- 0 ( entonces ,acer z 0 i ,acer encontrado 0 verdadero 3in si ,acer i 0 i 4 5 3in mientras
,acer encontrado 0 falso ,acer i 0 "i#ite$s&'erior%a& 1ientras i ) "i#ite$in%erior%a& hacer 2i a+i- 0 ( entonces ,acer z 0 i ,acer encontrado 0 verdadero 3in si ,acer i 0 i 65 3in mientras
Dos algoritmos A/n as, el nivel de abstraccin proporcionado por un lengua)e de programacin resulta insuficiente. Consid#rese, por e)emplo, los algoritmos anteriores, los cules tienen una traslacin directa a cualquier lengua)e de alto nivel, ambos buscan la ocurrencia de x en el vector a, en el primer algoritmo se busca la primera ocurrencia y en el segundo la /ltima. As, desde el punto de vista del lengua)e de alto nivel correspondera a programas distintos y, sin embargo, podra ser que ambos estuviesen escritos con el mismo ob)etivo7 determinar si e(iste alguna ocurrencia de x en a y en su caso obtener el ndice z de dicha ocurrencia. 8na forma de aumentar el nivel de abstraccin de los lengua)es de programacin sera el disear un lengua)e de muy alto nivel que incorporara un con)unto de estructuras de datos generales y un con)unto de potentes primitivas para mane)ar dichas estructuras. 'n cuyo caso el problema anterior podra resolverse de la siguiente forma7 ,acer encontrado 0 esta$en%a, (&$ 2i encontrado entonces ,acer z 0 indice9de%a, (& 3in si siendo esta9en%a, (& e indice9de%a, (& primitivas del lengua)e que permiten determinar si ocurre x en a y retornar la posicin de dicha ocurrencia en a, respectivamente. 'l problema de disear un lengua)e de programacin del tipo indicado es que presumiblemente debera contener la mayor parte de las abstracciones que los usuarios demandaran. As aunque dispusi#ramos de tal lengua)e dada la gran cantidad de estructuras de datos que hay y de operaciones que se podran realizar con ellos sera inmane)able. 8na alternativa para aumentar el nivel de abstraccin de un lengua)e de programacin es que #ste incluya mecanismos que permitan construir al usuario sus propias abstracciones. 'l mecanismo ms com/n para tal fin es el uso de funciones y procedimientos, aunque e(isten otros mecanismos. :ebe tenerse en cuenta que las dos alternativas indicadas para aumentar el nivel de abstraccin de un lengua)e de programacin no son dis)untas. As, por e)emplo, los lengua)es de programacin ofrecen diversas estructuras de datos y el usuario puede definir nuevas abstracciones. or otro lado, un sistema puede visualizarse desde diversos puntos de vista %niveles de abstraccin& dependiendo de quien y para qu# se analiza la situacin. 'n una visin general de un sistema la abstraccin tendr generalizaciones$ en cambio, una visin para modificar el sistema e(igir una abstraccin detallada. ')emplo7 un auto desde el punto de vista del conductor, vendedor, fabricante, etc.
*a historia de la programacin es, en definitiva, un camino hacia un grado creciente de abstraccin7 *os lenguajes de alto nivel permitieron a los programadores abstraerse del sinfn de detalles de los lengua)es ensambladores, y traba)ar de un modo independiente de las mquinas concretas. *os procedimientos con parmetros %abstraccin por parametrizacin&, permiten dar un nombre a un con)unto comple)o de instrucciones y activarlas con una sola instruccin. *as construcciones creadas para sincronizar procesos en muchos lengua)es de programacin concurrente abstraen al programador de la necesidad de tener en cuenta si la mquina subyacente dispone de un solo procesador, de varios que comparten una memoria com/n, o si consiste en una red de computadoras. *as especificaciones formalizan el efecto de las instrucciones de un lengua)e sin tener que descender al detalle de cmo se e)ecutan en una computadora. *os tipos de datos abstractos permiten definir una coleccin de valores y de operaciones mediante una especificacin independiente de cualquier representacin.
rocedimiento intercambia %& var t 7 ;ipo:ato$ inicio hacer t 0 ( hacer ( 0 y hacer y 0 t fin rocedimiento sin parmetros
rocedimiento intercambia %(, y7 ;ipo:ato& var t 7 ;ipo:ato$ inicio hacer t 0 ( hacer ( 0 y hacer y 0 t fin rocedimiento con parmetros
As, en el caso del primer procedimiento, su invocacin /nicamente permite intercambiar los valores de las variables x e y, mientras que en el segundo caso su invocacin permite intercambiar los valores de cualquier par de variables de tipo ;ipo:ato que se utilicen como argumentos.
'l nombre del mdulo asigna una descripcin abstracta que captura el significado global del mdulo. 8sar el nombre en vez del cdigo permite al programador aplicar la accin en t#rminos de su descripcin de alto nivel en vez de los detalles de ba)o nivel. *os mdulos ocultan informacin de elementos locales ya que no se pueden usar fuera de ellos. 'l programador usa el ;A: sin conocer sus detalles internos. *os parmetros del mdulo sirven como interfaz p/blica del mdulo permitiendo crear entidades propias.
:ebe observarse, que una abstraccin funcional puede ser una funcin o un procedimiento.
mediante una especificacin que es independiente de cualquier representacin. ara construir un tipo de datos abstracto, debemos ser capaces de7 '(portar una definicin de tipo. roporcionar un con)unto de operaciones que puedan usarse para manipular los e)emplares de tipo. roteger los datos asociados con el tipo de tal manera que se pueda operar con ellos slo mediante las operaciones provistas. Crear m/ltiples e)emplares del tipo.
*os ;A: proporcionan mecanismos para separar la interfaz y la implementacin del tipo de dato. *a implementacin de un ;A: consta de7 / *a representacin7 eleccin de las estructuras de datos. / *as operaciones7 eleccin de los algoritmos. *a interfaz se refiere a las operaciones y datos visibles al e(terior del ;A:. *os tipos de datos abstractos representaron un gran avance en la !ngenier"a del #oftware, de hecho la aplicacin de los mismos permiti me)orar notablemente el dise$o modular de los programas respecto al m#todo de diseo tradicional por refinamientos sucesivos basado en la abstraccin funcional. 2e solventaron, as, los inconvenientes que presentaba este /ltimo m#todo de diseo7 *os tipos de datos utilizados eran los predefinidos del lengua)e. 'sto introduca un desequilibrio, al tener que e(presar acciones abstractas en t#rminos de tipos concretos de ba)o nivel. *as decisiones de representacin de unos tipos en otro se tomaban demasiado temprano en el proceso de diseo. :ichas decisiones podran y deberan ser aplazadas hasta el momento en que se conocieran las operaciones que se van a necesitar para cada nuevo tipo.
*os detalles de representacin de los tipos estaban presentes en los algoritmos de alto nivel, oscureciendo innecesariamente su comprensin. *a correcta utilizacin de los ;A:s en el dise$o de programas da lugar a programas de gran modularidad y calidad7 son ms legibles, son ms fciles de mantener y son ms fciles de modificar.
*a razn de tales venta)as est en la diferencia entre el antiguo concepto de tipo de dato %con)unto de valores& y el nuevo que incluye sus operaciones. 2i se considera el tipo de dato como un con)unto de valores, entonces todo lo que se necesita para implementarlo es elegir una representacin de almacenamiento %o estructura de datos& para las variables del tipo, por tanto, si la representacin cambia tambi#n deben modificarse todos los programas que usan el tipo de dato. 2i por el contrario, se considera el tipo de dato como un con)unto de ob)etos )unto con un con)unto de operaciones para manipularlos implementadas en t#rminos de la representacin elegida y si los programas que utilizan el tipo de dato slo dependen de estas operaciones y no de la representacin, entonces un cambio de representacin slo obliga a modificar las operaciones, no siendo necesario modificar los programas que utilizan el tipo de dato. 'videntemente, para poder utilizar un tipo de dato de esta forma es necesario disponer de su especificacin$ es decir, de las caractersticas del tipo de dato y el significado de cada una de las operaciones definidas
Unidad 1. Fundamentos de Estructuras de Datos Pg. 10
%especificacin de funcin&. As, el fin que persigue el concepto de tipo abstracto de dato es separar el uso del tipo de dato de su implementacin. ara conseguir este ob)etivo el diseo de un ;A: se divide en dos partes7 la parte de especificacin la parte de implementacin
TAD
Composicin de un ;A: *a parte de especificacin define cmo se puede utilizar el tipo de dato y est formada por la sinta(is y la semntica %A "&. *a parte de implementacin define una posible realizacin del tipo de dato y est formada por la representacin %o estructura de datos& y los algoritmos correspondientes a las operaciones en t#rminos de la misma. :e este modo, para utilizar el tipo de dato no es necesario conocer su implementacin, a/n ms, es importante que el posible conocimiento de la misma se ignore por completo.
1.2.2. 0aractersticas
8na estructura de datos se caracteriza por lo siguiente7 uede descomponerse en los elementos que la forman. *a manera en que se colocan %almacenan& los elementos dentro de la estructura afectar la forma en que se realicen los accesos a cada elemento.
8n dato es una cantidad que toma un /nico valor que puede cambiar en cualquier momento. *os algoritmos de solucin de problemas deben incluir reglas de acceso a la estructura de datos. Bormalmente la eleccin de una estructura de datos depende de su funcin$ tras la seleccin, se elegir la me)or disposicin de los datos y por /ltimo se agregarn los valores. 'n consecuencia, los valores de los datos pueden cambiar frecuentemente, la disposicin con menos frecuencia y la estructura de los datos se modifica raramente. *a eleccin del m#todo adecuado para e(presar los datos de un problema es esencial para conseguir una buena solucin. 2i se hace una eleccin incorrecta, el algoritmo resultante puede ser muchas veces complicado y difcil o imposible de codificar. or el contrario, una buena eleccin de estructura de datos generar algoritmos ms claros, sencillos y rpidos.
'ntero Bum#rico
Unidad 1. Fundamentos de Estructuras de Datos Pg. 12
:ecimal 2imple Caracter Bo Bum#rico *gico 'lemental Arreglo 'sttico Cegistro 'structurado :inmico ;ipo de :ato ila 3ila *ineal *igada *ista Compuesto %;A:& Drbol Bo *ineal :irigido !rafo Bo :irigido :oblemente *igada Ainario A A4 3ila 2imple 3ila Circular 3ila :oble 3ila de rioridad Apuntadores
8nidimensional %Eector& Aidimensional %1atriz& 1ultidimensional % oliedro&
Con el fin de me)orar la calidad de los programas creados durante el curso, se proporciona una lista de caractersticas a cubrir en cada uno. / / / / / / / / / / 1odularizar con diseo descendente. 'vitar variables globales. :efinir constantes con nombres en solo may/sculas. Bo escribir cdigo espagueti. 'scribir rutinas cortas que hagan una sola cosa. 8sar adecuadamente los parmetros %por valor o referencia&. 8sar declaraciones de tipos %;:86 ;ipos :efinidos por el 8suario&. Agregar documentacin interna. 1ane)ar los errores. *egibilidad %usar min/sculas para funciones estndar y palabras reservadas, nombres significativos para los identificadores, may/sculas para constantes, capitalizar los nombres de identificadores, iniciar los nombres de variables con una letra que indique el tipo de dato que almacena %a 6 arreglo, c 6 carcter < cadena, e 6 entero, l 6 lgico, f 6 flotante, r 6 registro&, sangrado de F a G espacios, alinear instrucciones de control&. *as interfaces de usuario %ventanas de programa& deben incluir7 o Bombre del programa %;tulo&. o "nstrucciones al usuario para poder e)ecutarlo correctamente. o Confirmacin de los datos ingresados por el usuario. o 2i la pantalla que se est mostrando es una pantalla de salida, se deben mostrar tambi#n los datos de entrada %ingresados por el usuario&.
Tarea ,acer un resumen de esta unidad %m(imo 5 cuartilla, no olvidar conclusiones y bibliografa 6leer otras fuentes&. '(plicar7 5. Hu# es la abstraccin I. ara qu# se emplea la abstraccin en la programacin. F. Hu# es un ;A: ?. Hu# son las estructuras de datos G. Cules son las caractersticas de las estructuras de datos. '(plicar cules son las similitudes %si e(isten& y diferencias entre7 J. Abstraccin funcional y abstraccin de datos. >. 'specificacin y la implementacin de un ;A:. K. *os tipos de datos elementales y los compuestos. =. *os tipos de datos simples y estructurados. 5L. *os tipos de datos lineales y no lineales.