SlideShare ist ein Scribd-Unternehmen logo
1 von 9
ESTRUCTURA DE DATOS                              Unidad I. INTRODUCCIÓN A LAS ESTRUCTURAS DE DATOS


UNIDAD 1: INTRODUCCIÓN A LAS ESTRUCTURAS DE DATOS


Competencia        específica      a Actividades de Aprendizaje
desarrollar
• Representar y aplicar los tipos de • Práctica de ejercicios. Elaborar un
datos abstractos por medio de un Programa en un lenguaje de
lenguaje de programación.            programación que incorpore en un
                                     vector de n elementos sus operaciones
                                     básicas: insertar, eliminar, ordenar,
                                     buscar, cantidad de memoria estática
                                     utilizada y tiempo de ordenamiento.
                                     • Práctica de ejercicios. Elaborar un
                                     programa       en   un   lenguaje   de
                                     programación que incorpore en una
                                     lista de n elementos de forma
                                     ordenada. Considere además las
                                     funciones de eliminar, buscar y
                                     cantidad      de   memoria    dinámica
                                     utilizada.



1.1 Tipos de datos abstractos (TDA) Y USO


Tipos de Datos Abstractos

Abstracción: consiste en ignorar los detalles de la manera particular en que está
hecha una cosa, quedándonos solamente con su visión general.

Un TDA es un modelo matemático de estructuras de datos que especifican los
tipos de datos almacenados, las operaciones definidas sobre esos datos y los
tipos de parámetros de esas operaciones.

Algunos lenguajes de programación tienen características que nos permiten
ampliar el lenguaje añadiendo sus propios tipos de datos. Un tipo de dato
definido por el programador se denomina tipo abstracto de datos (TDA) para
diferenciarlo del tipo fundamental (predefinido) de datos.

Por ejemplo, en Java, el tipo Punto, que representa las coordenadas x e y de un
sistema de coordenadas rectangulares, no existe. Sin embargo, es posible
implementar el tipo abstracto de datos, considerando los valores que se
almacenan en las variables y qué operaciones están disponibles para manipular
estas variables.



                                         1
ESTRUCTURA DE DATOS                              Unidad I. INTRODUCCIÓN A LAS ESTRUCTURAS DE DATOS


Un TDA se compone de estructuras de datos y los procedimientos o funciones
que manipulan esas estructuras de datos.

Un tipo abstracto de datos puede definirse mediante la ecuación:

T DA = Representación (datos) + Operaciones (funciones y procedimientos)

En un lenguaje de programación como Java un TDA puede ser expresado como
una interface, que es una simple lista de declaraciones de métodos.
Un TDA es materializado por una estructura de datos concreta, en Java, es
modelada por una clase. Una clase define los datos que serán almacenados y
las operaciones soportadas por los objetos que son instancia de la clase. Al
contrario de las interfaces, las clases especifican como las operaciones son
ejecutadas (implementación).
Ejemplos de tipos de datos abstractos son las Listas, Pilas, Colas, etc.



1.2 Modularidad

La Modularidad es la propiedad que permite subdividir una aplicación en partes
más pequeñas (llamadas módulos), cada una de las cuales debe ser tan
independiente como sea posible de la aplicación en sí y de las partes restantes.


La modularización consiste en dividir un programa en módulos que se puedan
compilar por separado, pero que tienen conexiones con otros módulos. Al igual
que la encapsulación, los lenguajes soportan la Modularidad de diversas formas.
La Modularidad es la propiedad de un sistema que permite su descomposición
en un conjunto de módulos cohesivos y débilmente acoplados. Por supuesto no
todos los módulos son iguales: tomar un programa monolítico y separarlo de
forma aleatoria en archivos no es óptimo. Se debe tener en cuenta los conceptos
asociados de dependencia, acoplamiento, cohesión, interfaz, encapsulación y
abstracción. Una vez identificado lo que es un buen módulo, se puede
contemplar la reutilización de un buen módulo como componente.


El Módulo A depende del Módulo B si cualquier cambio en el Módulo B implica
que el Módulo A también tenga que ser modificado. A veces se dice que el
Módulo A es un cliente del Módulo B, o que el Módulo B actúa como servidor del
Módulo A. En general, es normal que un mismo módulo sea tanto cliente como
servidor. Esto significa, que depende de algunos módulos, mientras que otros
módulos dependen de él. Incluso es posible que un par de módulos se tengan
uno al otro de cliente; sin embargo, éste es un ejemplo de dependencia circular,
que debe evitarse cuando sea posible debido a que impide la reutilización.



                                        2
ESTRUCTURA DE DATOS                                Unidad I. INTRODUCCIÓN A LAS ESTRUCTURAS DE DATOS




La dependencia a veces se conoce como acoplamiento. Un sistema con muchas
dependencias tiene fuerte acoplamiento. Los buenos sistemas tienen débil
acoplamiento, porque en ese caso los cambios en una parte del sistema son
menos      probables       de     propagarse     a     través     del     sistema.
Los módulos correctos a menudo tienen la propiedad de que sus interfaces
proporcionan una abstracción de algún elemento conocido de manera intuitiva
que puede, no obstante, ser difícil de implementar. Este tipo de módulos se dice
que tienen una fuerte cohesión. El módulo realiza un conjunto coherente de
cosas, pero dentro de lo posible el desarrollador del cliente está protegido de la
información irrelevante relativa a cómo el módulo hace lo que hace.



1.3 Memoria estática

La forma más fácil de almacenar el contenido de una variable en memoria en
tiempo de ejecución es en memoria estática o permanente a lo largo de toda la
ejecución del programa.

No todos los objetos (variables) pueden ser almacenados estáticamente.

Para que un objeto pueda ser almacenado en memoria estática su tamaño
(número de bytes necesarios para su almacenamiento) ha de ser conocido en
tiempo de compilación, como consecuencia de esta condición no podrán
almacenarse en memoria estática:

     •    Los objetos correspondientes a procedimientos o funciones recursivas, ya
          que en tiempo de compilación no se sabe el número de variables que
          serán necesarias.

                                           3
ESTRUCTURA DE DATOS                                  Unidad I. INTRODUCCIÓN A LAS ESTRUCTURAS DE DATOS


     •    Las estructuras dinámicas de datos tales como listas, árboles, etc. ya que
          el número de elementos que las forman no es conocido hasta que el
          programa se ejecuta.

Las técnicas de asignación de memoria estática son sencillas.

     •    A partir de una posición señalada por un puntero de referencia se aloja el
          objeto X, y se avanza el puntero tantos bytes como sean necesarios para
          almacenar el objeto X.
     •    La asignación de memoria puede hacerse en tiempo de compilación y los
          objetos están vigentes desde que comienza la ejecución del programa
          hasta que termina.

En los lenguajes que permiten la existencia de subprogramas, y siempre que
todos los objetos de estos subprogramas puedan almacenarse estáticamente se
aloja en la memoria estática un registro de activación correspondiente a cada
uno de los subprogramas.

 Estos registros de activación contendrán las variables locales, parámetros
formales y valor devuelto por la función.

Dentro de cada registro de activación las variables locales se organizan
secuencialmente. Existe un solo registro de activación para cada procedimiento
y por tanto no están permitidas las llamadas recursivas. El proceso que se sigue
cuando un procedimiento p llama a otro q es el siguiente:

     1. p evalúa los parámetros de llamada, en caso de que se trate de
        expresiones complejas, usando para ello una zona de memoria temporal
        para el almacenamiento intermedio.

          Por ejemplos, sí la llamada a q es q((3*5)+(2*2),7) las operaciones
          previas a la llamada propiamente dicha en código máquina han de
          realizarse sobre alguna zona de memoria temporal. (En algún momento
          debe haber una zona de memoria que contenga el valor intermedio 15, y
          el valor intermedio 4 para sumarlos a continuación). En caso de utilización
          de memoria estática ésta zona de temporales puede ser común a todo el
          programa, ya que su tamaño puede deducirse en tiempo de compilación.

     2. q inicializa sus variables y comienza su ejecución.

           Dado que las variables están permanentemente en memoria es fácil
          implementar la propiedad de que conserven o no su contenido para cada
          nueva llamada




                                            4
ESTRUCTURA DE DATOS                               Unidad I. INTRODUCCIÓN A LAS ESTRUCTURAS DE DATOS


1.4. Memoria Dinámica

Supongamos que nuestro programa debe manipular estructuras de datos de
longitud desconocida. Un ejemplo simple podría ser el de un programa que lee
las líneas de un archivo y las ordena. Por tanto, deberemos leer un número
indeterminado de líneas, y tras leer la última, ordenarlas. Una manera de
manejar ese número indeterminado, sería declarar una constante MAX_LINEAS,
darle un valor vergonzosamente grande, y declarar un arreglo de tamaño
MAX_LINEAS. Esto, obviamente, es muy ineficiente. Nuestro programa no sólo
quedaría limitado por ese valor máximo, sino que además gastaría esa enorme
cantidad de memoria para procesar hasta el más pequeño de los ficheros.

La solución consiste en utilizar memoria dinámica. La memoria dinámica es un
espacio de almacenamiento que se solicita en tiempo de ejecución. De esa
manera, a medida que el proceso va necesitando espacio para más líneas, va
solicitando más memoria al sistema operativo para guardarlas. El medio para
manejar la memoria que otorga el sistema operativo, es el puntero, puesto que
no podemos saber en tiempo de compilación dónde nos dará huecos el sistema
operativo (en la memoria de nuestro PC).



Memoria Dinámica.

 Sobre el tratamiento de memoria, GLib dispone de una serie de instrucciones
que sustituyen a las ya conocidas por todos malloc, free, etc. y, siguiendo con el
modo de llamar a las funciones en GLib, las funciones que sustituyen a las ya
mencionadas son g_malloc y g_free.



Reserva de memoria.

 La función g_malloc posibilita la reserva de una zona de memoria, con un
número de bytes que le pasemos como parámetro. Además, también existe una
función similar llamada g_malloc0 que, no sólo reserva una zona de memoria,
sino que, además, llena esa zona de memoria con ceros, lo cual nos puede
beneficiar si se necesita un zona de memoria totalmente limpia.

     •    gpointer g_malloc (gulong numero_de_bytes);
     •    gpointer g_malloc0 (gulong numero_de_bytes);

Existe otro conjunto de funciones que nos permiten reservar memoria de una
forma parecida a cómo se hace en los lenguajes orientados a objetos.




                                          5
ESTRUCTURA DE DATOS                                   Unidad I. INTRODUCCIÓN A LAS ESTRUCTURAS DE DATOS


Liberación de memoria.

Cuando se hace una reserva de memoria con g_malloc y, en un momento
dado, el uso de esa memoria no tiene sentido, es el momento de liberar esa
memoria. Y el sustituto de free es g_free que, básicamente, funciona igual
que la anteriormente mencionada.

     •    void g_free (gpointer memoria_reservada);



Realojamiento de memoria

 En determinadas ocasiones, sobre todo cuando se utilizan estructuras de datos
dinámicas, es necesario ajustar el tamaño de una zona de memoria (ya sea para
hacerla más grande o más pequeña). Para eso, GLib ofrece la función
g_realloc, que recibe un puntero a memoria que apunta a una región que es
la que será acomodada al nuevo tamaño y devuelve el puntero a la nueva zona
de memoria. El anterior puntero es liberado y no se debería utilizar más:

     •    gpointer  g_realloc     (gpointer    memoria_reservada                    ,       gulong
          numero_de_bytes);



Asignación dinámica

El proceso de compactación del punto anterior es una instancia particular del
problema de asignación de memoria dinámica, el cual es el cómo satisfacer una
necesidad de tamaño n con una lista de huecos libres. Existen muchas
soluciones para el problema. El conjunto de huecos es analizado para
determinar cuál hueco es el más indicado para asignarse. Las estrategias más
comunes para asignar algún hueco de la tabla son:



Primer ajuste: Consiste en asignar el primer hueco con capacidad suficiente. La
búsqueda puede iniciar ya sea al inicio o al final del conjunto de huecos o en
donde terminó la última búsqueda. La búsqueda termina al encontrar un hueco
lo suficientemente grande.



Mejor ajuste: Busca asignar el espacio más pequeño de los espacios con
capacidad suficiente. La búsqueda se debe de realizar en toda la tabla, a menos


                                           6
ESTRUCTURA DE DATOS                             Unidad I. INTRODUCCIÓN A LAS ESTRUCTURAS DE DATOS


que la tabla esté ordenada por tamaño. Esta estrategia produce el menor
desperdicio de memoria posible.



Peor ajuste: Asigna el hueco más grande. Una vez más, se debe de buscar en
toda la tabla de huecos a menos que esté organizada por tamaño. Esta
estrategia produce los huecos de sobra más grandes, los cuales pudieran ser de
más uso si llegan procesos de tamaño mediano que quepan en ellos.



Se ha demostrado mediante simulacros que tanto el primer y el mejor ajuste son
mejores que el peor ajuste en cuanto a minimizar tanto el tiempo del
almacenamiento. Ni el primer o el mejor ajuste es claramente el mejor en
términos de uso de espacio, pero por lo general el primer ajuste es más rápido.




                                        7
ESTRUCTURA DE DATOS                             Unidad I. INTRODUCCIÓN A LAS ESTRUCTURAS DE DATOS


que la tabla esté ordenada por tamaño. Esta estrategia produce el menor
desperdicio de memoria posible.



Peor ajuste: Asigna el hueco más grande. Una vez más, se debe de buscar en
toda la tabla de huecos a menos que esté organizada por tamaño. Esta
estrategia produce los huecos de sobra más grandes, los cuales pudieran ser de
más uso si llegan procesos de tamaño mediano que quepan en ellos.



Se ha demostrado mediante simulacros que tanto el primer y el mejor ajuste son
mejores que el peor ajuste en cuanto a minimizar tanto el tiempo del
almacenamiento. Ni el primer o el mejor ajuste es claramente el mejor en
términos de uso de espacio, pero por lo general el primer ajuste es más rápido.




                                        7
ESTRUCTURA DE DATOS                             Unidad I. INTRODUCCIÓN A LAS ESTRUCTURAS DE DATOS


que la tabla esté ordenada por tamaño. Esta estrategia produce el menor
desperdicio de memoria posible.



Peor ajuste: Asigna el hueco más grande. Una vez más, se debe de buscar en
toda la tabla de huecos a menos que esté organizada por tamaño. Esta
estrategia produce los huecos de sobra más grandes, los cuales pudieran ser de
más uso si llegan procesos de tamaño mediano que quepan en ellos.



Se ha demostrado mediante simulacros que tanto el primer y el mejor ajuste son
mejores que el peor ajuste en cuanto a minimizar tanto el tiempo del
almacenamiento. Ni el primer o el mejor ajuste es claramente el mejor en
términos de uso de espacio, pero por lo general el primer ajuste es más rápido.




                                        7

Weitere ähnliche Inhalte

Was ist angesagt?

Redes neuronales-funciones-activacion-hardlim- hardlims-matlab
Redes neuronales-funciones-activacion-hardlim- hardlims-matlabRedes neuronales-funciones-activacion-hardlim- hardlims-matlab
Redes neuronales-funciones-activacion-hardlim- hardlims-matlabAna Mora
 
Redes Neuronales Basadas En Sistemas Difusos
Redes Neuronales Basadas En Sistemas DifusosRedes Neuronales Basadas En Sistemas Difusos
Redes Neuronales Basadas En Sistemas DifusosESCOM
 
Hardlim hardlims en_matlab
Hardlim hardlims en_matlabHardlim hardlims en_matlab
Hardlim hardlims en_matlabjhymermartinez
 
Unidad 1. introducción a la computadora y al desarrollo de software
Unidad 1. introducción a la computadora y al desarrollo de softwareUnidad 1. introducción a la computadora y al desarrollo de software
Unidad 1. introducción a la computadora y al desarrollo de softwareJean Carlo AriZara
 
Too Tecnologia orientada a objetos
Too Tecnologia orientada a objetosToo Tecnologia orientada a objetos
Too Tecnologia orientada a objetosFrangelys Perez
 
Presentación elian-completo
Presentación elian-completoPresentación elian-completo
Presentación elian-completoelian rivas
 
Función de Activación POSLIN y PURELIN
Función de Activación POSLIN y PURELINFunción de Activación POSLIN y PURELIN
Función de Activación POSLIN y PURELINRossy Faican Cango
 
Utp 2015-2_sirn_s2_rna
 Utp 2015-2_sirn_s2_rna Utp 2015-2_sirn_s2_rna
Utp 2015-2_sirn_s2_rnajcbp_peru
 
Funciones de Activación Tansig y Logsig
Funciones de Activación Tansig y Logsig Funciones de Activación Tansig y Logsig
Funciones de Activación Tansig y Logsig Raul
 
Redes Neuronales Basadas En Sistemas Difusos
Redes Neuronales Basadas En Sistemas DifusosRedes Neuronales Basadas En Sistemas Difusos
Redes Neuronales Basadas En Sistemas DifusosESCOM
 
Funciones de activación Satlin y Satlins en Matlab
Funciones de activación Satlin y Satlins en MatlabFunciones de activación Satlin y Satlins en Matlab
Funciones de activación Satlin y Satlins en MatlabGabyta Rodríguez
 
Construccion , Diseño y Entrenamiento de Redes Neuronales Artificiales
Construccion , Diseño y Entrenamiento de Redes Neuronales ArtificialesConstruccion , Diseño y Entrenamiento de Redes Neuronales Artificiales
Construccion , Diseño y Entrenamiento de Redes Neuronales ArtificialesESCOM
 
Red Neuronal Difusa
Red Neuronal DifusaRed Neuronal Difusa
Red Neuronal DifusaESCOM
 
Utp sirn_sl8 sistemas difusos i 2012-2
 Utp sirn_sl8 sistemas difusos i 2012-2 Utp sirn_sl8 sistemas difusos i 2012-2
Utp sirn_sl8 sistemas difusos i 2012-2c09271
 
Función Logsig y tansig
Función Logsig y tansigFunción Logsig y tansig
Función Logsig y tansigVane Erraez
 
Funciones de activacion Poslin y Purelin
Funciones de activacion Poslin y PurelinFunciones de activacion Poslin y Purelin
Funciones de activacion Poslin y PurelinDiego Guamán
 

Was ist angesagt? (19)

Taller informática 11°A
Taller informática 11°ATaller informática 11°A
Taller informática 11°A
 
Redes neuronales-funciones-activacion-hardlim- hardlims-matlab
Redes neuronales-funciones-activacion-hardlim- hardlims-matlabRedes neuronales-funciones-activacion-hardlim- hardlims-matlab
Redes neuronales-funciones-activacion-hardlim- hardlims-matlab
 
Tema5-u5-ici-equipo-cad
Tema5-u5-ici-equipo-cadTema5-u5-ici-equipo-cad
Tema5-u5-ici-equipo-cad
 
Redes Neuronales Basadas En Sistemas Difusos
Redes Neuronales Basadas En Sistemas DifusosRedes Neuronales Basadas En Sistemas Difusos
Redes Neuronales Basadas En Sistemas Difusos
 
Hardlim hardlims en_matlab
Hardlim hardlims en_matlabHardlim hardlims en_matlab
Hardlim hardlims en_matlab
 
Unidad 1. introducción a la computadora y al desarrollo de software
Unidad 1. introducción a la computadora y al desarrollo de softwareUnidad 1. introducción a la computadora y al desarrollo de software
Unidad 1. introducción a la computadora y al desarrollo de software
 
Too Tecnologia orientada a objetos
Too Tecnologia orientada a objetosToo Tecnologia orientada a objetos
Too Tecnologia orientada a objetos
 
Presentación elian-completo
Presentación elian-completoPresentación elian-completo
Presentación elian-completo
 
Nhibernate
NhibernateNhibernate
Nhibernate
 
Función de Activación POSLIN y PURELIN
Función de Activación POSLIN y PURELINFunción de Activación POSLIN y PURELIN
Función de Activación POSLIN y PURELIN
 
Utp 2015-2_sirn_s2_rna
 Utp 2015-2_sirn_s2_rna Utp 2015-2_sirn_s2_rna
Utp 2015-2_sirn_s2_rna
 
Funciones de Activación Tansig y Logsig
Funciones de Activación Tansig y Logsig Funciones de Activación Tansig y Logsig
Funciones de Activación Tansig y Logsig
 
Redes Neuronales Basadas En Sistemas Difusos
Redes Neuronales Basadas En Sistemas DifusosRedes Neuronales Basadas En Sistemas Difusos
Redes Neuronales Basadas En Sistemas Difusos
 
Funciones de activación Satlin y Satlins en Matlab
Funciones de activación Satlin y Satlins en MatlabFunciones de activación Satlin y Satlins en Matlab
Funciones de activación Satlin y Satlins en Matlab
 
Construccion , Diseño y Entrenamiento de Redes Neuronales Artificiales
Construccion , Diseño y Entrenamiento de Redes Neuronales ArtificialesConstruccion , Diseño y Entrenamiento de Redes Neuronales Artificiales
Construccion , Diseño y Entrenamiento de Redes Neuronales Artificiales
 
Red Neuronal Difusa
Red Neuronal DifusaRed Neuronal Difusa
Red Neuronal Difusa
 
Utp sirn_sl8 sistemas difusos i 2012-2
 Utp sirn_sl8 sistemas difusos i 2012-2 Utp sirn_sl8 sistemas difusos i 2012-2
Utp sirn_sl8 sistemas difusos i 2012-2
 
Función Logsig y tansig
Función Logsig y tansigFunción Logsig y tansig
Función Logsig y tansig
 
Funciones de activacion Poslin y Purelin
Funciones de activacion Poslin y PurelinFunciones de activacion Poslin y Purelin
Funciones de activacion Poslin y Purelin
 

Andere mochten auch

Andere mochten auch (9)

Ejercicio 2
Ejercicio 2Ejercicio 2
Ejercicio 2
 
Tarea 3
Tarea 3Tarea 3
Tarea 3
 
Ejercicio 7
Ejercicio 7Ejercicio 7
Ejercicio 7
 
Cartaautorización
CartaautorizaciónCartaautorización
Cartaautorización
 
Cyberbuzqueda
CyberbuzquedaCyberbuzqueda
Cyberbuzqueda
 
Haskell aula5 f.ordem-sup_modulos-cifra_cesar
Haskell aula5 f.ordem-sup_modulos-cifra_cesarHaskell aula5 f.ordem-sup_modulos-cifra_cesar
Haskell aula5 f.ordem-sup_modulos-cifra_cesar
 
Mundial
MundialMundial
Mundial
 
Diapositivas metodo!!
Diapositivas metodo!!Diapositivas metodo!!
Diapositivas metodo!!
 
Funciones Matemáticas
Funciones MatemáticasFunciones Matemáticas
Funciones Matemáticas
 

Ähnlich wie Unidad 1

1. tipos de datos abstractos
1. tipos de datos abstractos1. tipos de datos abstractos
1. tipos de datos abstractosFernando Solis
 
Unidad 1 introducción a las estructuras de datos
Unidad 1 introducción a las estructuras de datosUnidad 1 introducción a las estructuras de datos
Unidad 1 introducción a las estructuras de datosUrban Skate House
 
Unidad 1 introducción a las estructuras de datos
Unidad 1 introducción a las estructuras de datosUnidad 1 introducción a las estructuras de datos
Unidad 1 introducción a las estructuras de datosEzer Ayala Mutul
 
equipo 3 clasificación de estructura(2.pptx
equipo 3  clasificación de estructura(2.pptxequipo 3  clasificación de estructura(2.pptx
equipo 3 clasificación de estructura(2.pptxPedroSilva456418
 
Estructurade datos
Estructurade datosEstructurade datos
Estructurade datosDavidElizama
 
Diapositiva estructura de datos unidad 1
Diapositiva estructura de datos unidad 1Diapositiva estructura de datos unidad 1
Diapositiva estructura de datos unidad 1Ezer Ayala Mutul
 
Presentacion unidad u1_estructura_de_datos_victor_uex
Presentacion unidad u1_estructura_de_datos_victor_uexPresentacion unidad u1_estructura_de_datos_victor_uex
Presentacion unidad u1_estructura_de_datos_victor_uexvictoruex
 
FUNDAMENTOS Y MÉTODOS DE ANÁLISIS DE REQUERIMIENTOS Raimon Koudsi
FUNDAMENTOS Y MÉTODOS DE ANÁLISIS DE REQUERIMIENTOS Raimon KoudsiFUNDAMENTOS Y MÉTODOS DE ANÁLISIS DE REQUERIMIENTOS Raimon Koudsi
FUNDAMENTOS Y MÉTODOS DE ANÁLISIS DE REQUERIMIENTOS Raimon KoudsiRaimonKoudsi
 
Paradigmas de programación
Paradigmas de programaciónParadigmas de programación
Paradigmas de programaciónMay Ibarra
 
Estructura de Datos Unidad 1 Tipo abstracto de datos TAD
Estructura de Datos Unidad 1 Tipo abstracto de datos TADEstructura de Datos Unidad 1 Tipo abstracto de datos TAD
Estructura de Datos Unidad 1 Tipo abstracto de datos TADJosé Antonio Sandoval Acosta
 
Tad,estatica,dimanica
Tad,estatica,dimanicaTad,estatica,dimanica
Tad,estatica,dimanicapootalex
 
ESTRUCTURA DE DATOS
ESTRUCTURA DE DATOSESTRUCTURA DE DATOS
ESTRUCTURA DE DATOSIsai Vazquez
 

Ähnlich wie Unidad 1 (20)

1. tipos de datos abstractos
1. tipos de datos abstractos1. tipos de datos abstractos
1. tipos de datos abstractos
 
Unidad 1 introducción a las estructuras de datos
Unidad 1 introducción a las estructuras de datosUnidad 1 introducción a las estructuras de datos
Unidad 1 introducción a las estructuras de datos
 
Unidad 1 introducción a las estructuras de datos
Unidad 1 introducción a las estructuras de datosUnidad 1 introducción a las estructuras de datos
Unidad 1 introducción a las estructuras de datos
 
equipo 3 clasificación de estructura(2.pptx
equipo 3  clasificación de estructura(2.pptxequipo 3  clasificación de estructura(2.pptx
equipo 3 clasificación de estructura(2.pptx
 
Estructurade datos
Estructurade datosEstructurade datos
Estructurade datos
 
Estructuta de datos
Estructuta de datosEstructuta de datos
Estructuta de datos
 
Diapositiva estructura de datos unidad 1
Diapositiva estructura de datos unidad 1Diapositiva estructura de datos unidad 1
Diapositiva estructura de datos unidad 1
 
Presentacion unidad u1_estructura_de_datos_victor_uex
Presentacion unidad u1_estructura_de_datos_victor_uexPresentacion unidad u1_estructura_de_datos_victor_uex
Presentacion unidad u1_estructura_de_datos_victor_uex
 
Estructura de Datos
Estructura de DatosEstructura de Datos
Estructura de Datos
 
Tipos de datos abstractos
Tipos de datos abstractosTipos de datos abstractos
Tipos de datos abstractos
 
FUNDAMENTOS Y MÉTODOS DE ANÁLISIS DE REQUERIMIENTOS Raimon Koudsi
FUNDAMENTOS Y MÉTODOS DE ANÁLISIS DE REQUERIMIENTOS Raimon KoudsiFUNDAMENTOS Y MÉTODOS DE ANÁLISIS DE REQUERIMIENTOS Raimon Koudsi
FUNDAMENTOS Y MÉTODOS DE ANÁLISIS DE REQUERIMIENTOS Raimon Koudsi
 
Paradigmas de programación
Paradigmas de programaciónParadigmas de programación
Paradigmas de programación
 
Estructura de datos pdf
Estructura de datos pdfEstructura de datos pdf
Estructura de datos pdf
 
Diseño o.o
Diseño o.oDiseño o.o
Diseño o.o
 
Diseño o.o
Diseño o.oDiseño o.o
Diseño o.o
 
Estructura de Datos Unidad 1 Tipo abstracto de datos TAD
Estructura de Datos Unidad 1 Tipo abstracto de datos TADEstructura de Datos Unidad 1 Tipo abstracto de datos TAD
Estructura de Datos Unidad 1 Tipo abstracto de datos TAD
 
Tema1 (2)
Tema1 (2)Tema1 (2)
Tema1 (2)
 
Tad
TadTad
Tad
 
Tad,estatica,dimanica
Tad,estatica,dimanicaTad,estatica,dimanica
Tad,estatica,dimanica
 
ESTRUCTURA DE DATOS
ESTRUCTURA DE DATOSESTRUCTURA DE DATOS
ESTRUCTURA DE DATOS
 

Mehr von Valentin Manzano

Mapa conceptual.gestion de riesgos
Mapa conceptual.gestion de riesgosMapa conceptual.gestion de riesgos
Mapa conceptual.gestion de riesgosValentin Manzano
 
Analisis del proceso en la conversion de la señal analogica a digit_viceversa
Analisis del proceso en la conversion de la señal analogica a digit_viceversaAnalisis del proceso en la conversion de la señal analogica a digit_viceversa
Analisis del proceso en la conversion de la señal analogica a digit_viceversaValentin Manzano
 
Cuadro comparativo de llos medios de transmision guiados y no guiados
Cuadro comparativo de llos medios de transmision guiados y no guiadosCuadro comparativo de llos medios de transmision guiados y no guiados
Cuadro comparativo de llos medios de transmision guiados y no guiadosValentin Manzano
 
Cuadro comptv medios de transmision guiados y no guiados
Cuadro comptv  medios de transmision guiados y no guiadosCuadro comptv  medios de transmision guiados y no guiados
Cuadro comptv medios de transmision guiados y no guiadosValentin Manzano
 
Ensayo telecomunicaciones valentin_manzano_crisanto
Ensayo telecomunicaciones valentin_manzano_crisantoEnsayo telecomunicaciones valentin_manzano_crisanto
Ensayo telecomunicaciones valentin_manzano_crisantoValentin Manzano
 
Ensayo telecomunicaciones samuel_ballesteros_benito
Ensayo telecomunicaciones samuel_ballesteros_benitoEnsayo telecomunicaciones samuel_ballesteros_benito
Ensayo telecomunicaciones samuel_ballesteros_benitoValentin Manzano
 
Ensayo telecomunicaciones samuel_ballesteros_benito
Ensayo telecomunicaciones samuel_ballesteros_benitoEnsayo telecomunicaciones samuel_ballesteros_benito
Ensayo telecomunicaciones samuel_ballesteros_benitoValentin Manzano
 

Mehr von Valentin Manzano (15)

Mapa conceptual.gestion de riesgos
Mapa conceptual.gestion de riesgosMapa conceptual.gestion de riesgos
Mapa conceptual.gestion de riesgos
 
Gestion de servicio de ti
Gestion de servicio de tiGestion de servicio de ti
Gestion de servicio de ti
 
Mapa conceptual
Mapa conceptualMapa conceptual
Mapa conceptual
 
Exposicion.investigacion
Exposicion.investigacionExposicion.investigacion
Exposicion.investigacion
 
Tipos de módeems
Tipos de módeemsTipos de módeems
Tipos de módeems
 
Analisis del proceso en la conversion de la señal analogica a digit_viceversa
Analisis del proceso en la conversion de la señal analogica a digit_viceversaAnalisis del proceso en la conversion de la señal analogica a digit_viceversa
Analisis del proceso en la conversion de la señal analogica a digit_viceversa
 
Cuadro comparativo de llos medios de transmision guiados y no guiados
Cuadro comparativo de llos medios de transmision guiados y no guiadosCuadro comparativo de llos medios de transmision guiados y no guiados
Cuadro comparativo de llos medios de transmision guiados y no guiados
 
Cuadro comptv medios de transmision guiados y no guiados
Cuadro comptv  medios de transmision guiados y no guiadosCuadro comptv  medios de transmision guiados y no guiados
Cuadro comptv medios de transmision guiados y no guiados
 
Ensayo telecomunicaciones valentin_manzano_crisanto
Ensayo telecomunicaciones valentin_manzano_crisantoEnsayo telecomunicaciones valentin_manzano_crisanto
Ensayo telecomunicaciones valentin_manzano_crisanto
 
Ensayo telecomunicaciones samuel_ballesteros_benito
Ensayo telecomunicaciones samuel_ballesteros_benitoEnsayo telecomunicaciones samuel_ballesteros_benito
Ensayo telecomunicaciones samuel_ballesteros_benito
 
Ensayo telecomunicaciones samuel_ballesteros_benito
Ensayo telecomunicaciones samuel_ballesteros_benitoEnsayo telecomunicaciones samuel_ballesteros_benito
Ensayo telecomunicaciones samuel_ballesteros_benito
 
Manejo de memoria
Manejo de memoriaManejo de memoria
Manejo de memoria
 
Unidad 1
Unidad 1Unidad 1
Unidad 1
 
Mapa conceptual
Mapa conceptualMapa conceptual
Mapa conceptual
 
Rodrigo
RodrigoRodrigo
Rodrigo
 

Unidad 1

  • 1. ESTRUCTURA DE DATOS Unidad I. INTRODUCCIÓN A LAS ESTRUCTURAS DE DATOS UNIDAD 1: INTRODUCCIÓN A LAS ESTRUCTURAS DE DATOS Competencia específica a Actividades de Aprendizaje desarrollar • Representar y aplicar los tipos de • Práctica de ejercicios. Elaborar un datos abstractos por medio de un Programa en un lenguaje de lenguaje de programación. programación que incorpore en un vector de n elementos sus operaciones básicas: insertar, eliminar, ordenar, buscar, cantidad de memoria estática utilizada y tiempo de ordenamiento. • Práctica de ejercicios. Elaborar un programa en un lenguaje de programación que incorpore en una lista de n elementos de forma ordenada. Considere además las funciones de eliminar, buscar y cantidad de memoria dinámica utilizada. 1.1 Tipos de datos abstractos (TDA) Y USO Tipos de Datos Abstractos Abstracción: consiste en ignorar los detalles de la manera particular en que está hecha una cosa, quedándonos solamente con su visión general. Un TDA es un modelo matemático de estructuras de datos que especifican los tipos de datos almacenados, las operaciones definidas sobre esos datos y los tipos de parámetros de esas operaciones. Algunos lenguajes de programación tienen características que nos permiten ampliar el lenguaje añadiendo sus propios tipos de datos. Un tipo de dato definido por el programador se denomina tipo abstracto de datos (TDA) para diferenciarlo del tipo fundamental (predefinido) de datos. Por ejemplo, en Java, el tipo Punto, que representa las coordenadas x e y de un sistema de coordenadas rectangulares, no existe. Sin embargo, es posible implementar el tipo abstracto de datos, considerando los valores que se almacenan en las variables y qué operaciones están disponibles para manipular estas variables. 1
  • 2. ESTRUCTURA DE DATOS Unidad I. INTRODUCCIÓN A LAS ESTRUCTURAS DE DATOS Un TDA se compone de estructuras de datos y los procedimientos o funciones que manipulan esas estructuras de datos. Un tipo abstracto de datos puede definirse mediante la ecuación: T DA = Representación (datos) + Operaciones (funciones y procedimientos) En un lenguaje de programación como Java un TDA puede ser expresado como una interface, que es una simple lista de declaraciones de métodos. Un TDA es materializado por una estructura de datos concreta, en Java, es modelada por una clase. Una clase define los datos que serán almacenados y las operaciones soportadas por los objetos que son instancia de la clase. Al contrario de las interfaces, las clases especifican como las operaciones son ejecutadas (implementación). Ejemplos de tipos de datos abstractos son las Listas, Pilas, Colas, etc. 1.2 Modularidad La Modularidad es la propiedad que permite subdividir una aplicación en partes más pequeñas (llamadas módulos), cada una de las cuales debe ser tan independiente como sea posible de la aplicación en sí y de las partes restantes. La modularización consiste en dividir un programa en módulos que se puedan compilar por separado, pero que tienen conexiones con otros módulos. Al igual que la encapsulación, los lenguajes soportan la Modularidad de diversas formas. La Modularidad es la propiedad de un sistema que permite su descomposición en un conjunto de módulos cohesivos y débilmente acoplados. Por supuesto no todos los módulos son iguales: tomar un programa monolítico y separarlo de forma aleatoria en archivos no es óptimo. Se debe tener en cuenta los conceptos asociados de dependencia, acoplamiento, cohesión, interfaz, encapsulación y abstracción. Una vez identificado lo que es un buen módulo, se puede contemplar la reutilización de un buen módulo como componente. El Módulo A depende del Módulo B si cualquier cambio en el Módulo B implica que el Módulo A también tenga que ser modificado. A veces se dice que el Módulo A es un cliente del Módulo B, o que el Módulo B actúa como servidor del Módulo A. En general, es normal que un mismo módulo sea tanto cliente como servidor. Esto significa, que depende de algunos módulos, mientras que otros módulos dependen de él. Incluso es posible que un par de módulos se tengan uno al otro de cliente; sin embargo, éste es un ejemplo de dependencia circular, que debe evitarse cuando sea posible debido a que impide la reutilización. 2
  • 3. ESTRUCTURA DE DATOS Unidad I. INTRODUCCIÓN A LAS ESTRUCTURAS DE DATOS La dependencia a veces se conoce como acoplamiento. Un sistema con muchas dependencias tiene fuerte acoplamiento. Los buenos sistemas tienen débil acoplamiento, porque en ese caso los cambios en una parte del sistema son menos probables de propagarse a través del sistema. Los módulos correctos a menudo tienen la propiedad de que sus interfaces proporcionan una abstracción de algún elemento conocido de manera intuitiva que puede, no obstante, ser difícil de implementar. Este tipo de módulos se dice que tienen una fuerte cohesión. El módulo realiza un conjunto coherente de cosas, pero dentro de lo posible el desarrollador del cliente está protegido de la información irrelevante relativa a cómo el módulo hace lo que hace. 1.3 Memoria estática La forma más fácil de almacenar el contenido de una variable en memoria en tiempo de ejecución es en memoria estática o permanente a lo largo de toda la ejecución del programa. No todos los objetos (variables) pueden ser almacenados estáticamente. Para que un objeto pueda ser almacenado en memoria estática su tamaño (número de bytes necesarios para su almacenamiento) ha de ser conocido en tiempo de compilación, como consecuencia de esta condición no podrán almacenarse en memoria estática: • Los objetos correspondientes a procedimientos o funciones recursivas, ya que en tiempo de compilación no se sabe el número de variables que serán necesarias. 3
  • 4. ESTRUCTURA DE DATOS Unidad I. INTRODUCCIÓN A LAS ESTRUCTURAS DE DATOS • Las estructuras dinámicas de datos tales como listas, árboles, etc. ya que el número de elementos que las forman no es conocido hasta que el programa se ejecuta. Las técnicas de asignación de memoria estática son sencillas. • A partir de una posición señalada por un puntero de referencia se aloja el objeto X, y se avanza el puntero tantos bytes como sean necesarios para almacenar el objeto X. • La asignación de memoria puede hacerse en tiempo de compilación y los objetos están vigentes desde que comienza la ejecución del programa hasta que termina. En los lenguajes que permiten la existencia de subprogramas, y siempre que todos los objetos de estos subprogramas puedan almacenarse estáticamente se aloja en la memoria estática un registro de activación correspondiente a cada uno de los subprogramas. Estos registros de activación contendrán las variables locales, parámetros formales y valor devuelto por la función. Dentro de cada registro de activación las variables locales se organizan secuencialmente. Existe un solo registro de activación para cada procedimiento y por tanto no están permitidas las llamadas recursivas. El proceso que se sigue cuando un procedimiento p llama a otro q es el siguiente: 1. p evalúa los parámetros de llamada, en caso de que se trate de expresiones complejas, usando para ello una zona de memoria temporal para el almacenamiento intermedio. Por ejemplos, sí la llamada a q es q((3*5)+(2*2),7) las operaciones previas a la llamada propiamente dicha en código máquina han de realizarse sobre alguna zona de memoria temporal. (En algún momento debe haber una zona de memoria que contenga el valor intermedio 15, y el valor intermedio 4 para sumarlos a continuación). En caso de utilización de memoria estática ésta zona de temporales puede ser común a todo el programa, ya que su tamaño puede deducirse en tiempo de compilación. 2. q inicializa sus variables y comienza su ejecución. Dado que las variables están permanentemente en memoria es fácil implementar la propiedad de que conserven o no su contenido para cada nueva llamada 4
  • 5. ESTRUCTURA DE DATOS Unidad I. INTRODUCCIÓN A LAS ESTRUCTURAS DE DATOS 1.4. Memoria Dinámica Supongamos que nuestro programa debe manipular estructuras de datos de longitud desconocida. Un ejemplo simple podría ser el de un programa que lee las líneas de un archivo y las ordena. Por tanto, deberemos leer un número indeterminado de líneas, y tras leer la última, ordenarlas. Una manera de manejar ese número indeterminado, sería declarar una constante MAX_LINEAS, darle un valor vergonzosamente grande, y declarar un arreglo de tamaño MAX_LINEAS. Esto, obviamente, es muy ineficiente. Nuestro programa no sólo quedaría limitado por ese valor máximo, sino que además gastaría esa enorme cantidad de memoria para procesar hasta el más pequeño de los ficheros. La solución consiste en utilizar memoria dinámica. La memoria dinámica es un espacio de almacenamiento que se solicita en tiempo de ejecución. De esa manera, a medida que el proceso va necesitando espacio para más líneas, va solicitando más memoria al sistema operativo para guardarlas. El medio para manejar la memoria que otorga el sistema operativo, es el puntero, puesto que no podemos saber en tiempo de compilación dónde nos dará huecos el sistema operativo (en la memoria de nuestro PC). Memoria Dinámica. Sobre el tratamiento de memoria, GLib dispone de una serie de instrucciones que sustituyen a las ya conocidas por todos malloc, free, etc. y, siguiendo con el modo de llamar a las funciones en GLib, las funciones que sustituyen a las ya mencionadas son g_malloc y g_free. Reserva de memoria. La función g_malloc posibilita la reserva de una zona de memoria, con un número de bytes que le pasemos como parámetro. Además, también existe una función similar llamada g_malloc0 que, no sólo reserva una zona de memoria, sino que, además, llena esa zona de memoria con ceros, lo cual nos puede beneficiar si se necesita un zona de memoria totalmente limpia. • gpointer g_malloc (gulong numero_de_bytes); • gpointer g_malloc0 (gulong numero_de_bytes); Existe otro conjunto de funciones que nos permiten reservar memoria de una forma parecida a cómo se hace en los lenguajes orientados a objetos. 5
  • 6. ESTRUCTURA DE DATOS Unidad I. INTRODUCCIÓN A LAS ESTRUCTURAS DE DATOS Liberación de memoria. Cuando se hace una reserva de memoria con g_malloc y, en un momento dado, el uso de esa memoria no tiene sentido, es el momento de liberar esa memoria. Y el sustituto de free es g_free que, básicamente, funciona igual que la anteriormente mencionada. • void g_free (gpointer memoria_reservada); Realojamiento de memoria En determinadas ocasiones, sobre todo cuando se utilizan estructuras de datos dinámicas, es necesario ajustar el tamaño de una zona de memoria (ya sea para hacerla más grande o más pequeña). Para eso, GLib ofrece la función g_realloc, que recibe un puntero a memoria que apunta a una región que es la que será acomodada al nuevo tamaño y devuelve el puntero a la nueva zona de memoria. El anterior puntero es liberado y no se debería utilizar más: • gpointer g_realloc (gpointer memoria_reservada , gulong numero_de_bytes); Asignación dinámica El proceso de compactación del punto anterior es una instancia particular del problema de asignación de memoria dinámica, el cual es el cómo satisfacer una necesidad de tamaño n con una lista de huecos libres. Existen muchas soluciones para el problema. El conjunto de huecos es analizado para determinar cuál hueco es el más indicado para asignarse. Las estrategias más comunes para asignar algún hueco de la tabla son: Primer ajuste: Consiste en asignar el primer hueco con capacidad suficiente. La búsqueda puede iniciar ya sea al inicio o al final del conjunto de huecos o en donde terminó la última búsqueda. La búsqueda termina al encontrar un hueco lo suficientemente grande. Mejor ajuste: Busca asignar el espacio más pequeño de los espacios con capacidad suficiente. La búsqueda se debe de realizar en toda la tabla, a menos 6
  • 7. ESTRUCTURA DE DATOS Unidad I. INTRODUCCIÓN A LAS ESTRUCTURAS DE DATOS que la tabla esté ordenada por tamaño. Esta estrategia produce el menor desperdicio de memoria posible. Peor ajuste: Asigna el hueco más grande. Una vez más, se debe de buscar en toda la tabla de huecos a menos que esté organizada por tamaño. Esta estrategia produce los huecos de sobra más grandes, los cuales pudieran ser de más uso si llegan procesos de tamaño mediano que quepan en ellos. Se ha demostrado mediante simulacros que tanto el primer y el mejor ajuste son mejores que el peor ajuste en cuanto a minimizar tanto el tiempo del almacenamiento. Ni el primer o el mejor ajuste es claramente el mejor en términos de uso de espacio, pero por lo general el primer ajuste es más rápido. 7
  • 8. ESTRUCTURA DE DATOS Unidad I. INTRODUCCIÓN A LAS ESTRUCTURAS DE DATOS que la tabla esté ordenada por tamaño. Esta estrategia produce el menor desperdicio de memoria posible. Peor ajuste: Asigna el hueco más grande. Una vez más, se debe de buscar en toda la tabla de huecos a menos que esté organizada por tamaño. Esta estrategia produce los huecos de sobra más grandes, los cuales pudieran ser de más uso si llegan procesos de tamaño mediano que quepan en ellos. Se ha demostrado mediante simulacros que tanto el primer y el mejor ajuste son mejores que el peor ajuste en cuanto a minimizar tanto el tiempo del almacenamiento. Ni el primer o el mejor ajuste es claramente el mejor en términos de uso de espacio, pero por lo general el primer ajuste es más rápido. 7
  • 9. ESTRUCTURA DE DATOS Unidad I. INTRODUCCIÓN A LAS ESTRUCTURAS DE DATOS que la tabla esté ordenada por tamaño. Esta estrategia produce el menor desperdicio de memoria posible. Peor ajuste: Asigna el hueco más grande. Una vez más, se debe de buscar en toda la tabla de huecos a menos que esté organizada por tamaño. Esta estrategia produce los huecos de sobra más grandes, los cuales pudieran ser de más uso si llegan procesos de tamaño mediano que quepan en ellos. Se ha demostrado mediante simulacros que tanto el primer y el mejor ajuste son mejores que el peor ajuste en cuanto a minimizar tanto el tiempo del almacenamiento. Ni el primer o el mejor ajuste es claramente el mejor en términos de uso de espacio, pero por lo general el primer ajuste es más rápido. 7