Anda di halaman 1dari 47

Estructura de

Datos
I.S.C. Salvador Cruz Alfaro
Seleccionar, diseñar, implementar y manipular estructuras de datos que optimicen el rendimiento de
aplicaciones de software, basadas en un paradigma y considerando la complejidad de los algoritmos
utilizados.

2010
Estructura de Datos

Table of Contents
Unidad 1 Análisis de Algoritmos. ..............................................................................................................................2
1.1 Concepto de Complejidad de algoritmos. ................................................................................................... 41
1.2 Aritmética de la notación O. ........................................................................................................................ 42
Unidad 2 Manejo de memoria. ............................................................................................................................. 45
2.1 Memoria estática. ........................................................................................................................................ 45
2.2 Memoria dinámica....................................................................................................................................... 46

I.S.C. Salvador Cruz


1
Estructura de Datos

Unidad 1 Análisis de Algoritmos.

I.S.C. Salvador Cruz


2
Estructura de Datos

I.S.C. Salvador Cruz


3
Estructura de Datos

I.S.C. Salvador Cruz


4
Estructura de Datos

I.S.C. Salvador Cruz


5
Estructura de Datos

I.S.C. Salvador Cruz


6
Estructura de Datos

I.S.C. Salvador Cruz


7
Estructura de Datos

I.S.C. Salvador Cruz


8
Estructura de Datos

I.S.C. Salvador Cruz


9
Estructura de Datos

I.S.C. Salvador Cruz


10
Estructura de Datos

I.S.C. Salvador Cruz


11
Estructura de Datos

I.S.C. Salvador Cruz


12
Estructura de Datos

I.S.C. Salvador Cruz


13
Estructura de Datos

I.S.C. Salvador Cruz


14
Estructura de Datos

I.S.C. Salvador Cruz


15
Estructura de Datos

I.S.C. Salvador Cruz


16
Estructura de Datos

I.S.C. Salvador Cruz


17
Estructura de Datos

I.S.C. Salvador Cruz


18
Estructura de Datos

I.S.C. Salvador Cruz


19
Estructura de Datos

I.S.C. Salvador Cruz


20
Estructura de Datos

I.S.C. Salvador Cruz


21
Estructura de Datos

I.S.C. Salvador Cruz


22
Estructura de Datos

I.S.C. Salvador Cruz


23
Estructura de Datos

I.S.C. Salvador Cruz


24
Estructura de Datos

I.S.C. Salvador Cruz


25
Estructura de Datos

I.S.C. Salvador Cruz


26
Estructura de Datos

I.S.C. Salvador Cruz


27
Estructura de Datos

I.S.C. Salvador Cruz


28
Estructura de Datos

I.S.C. Salvador Cruz


29
Estructura de Datos

I.S.C. Salvador Cruz


30
Estructura de Datos

I.S.C. Salvador Cruz


31
Estructura de Datos

I.S.C. Salvador Cruz


32
Estructura de Datos

I.S.C. Salvador Cruz


33
Estructura de Datos

I.S.C. Salvador Cruz


34
Estructura de Datos

I.S.C. Salvador Cruz


35
Estructura de Datos

I.S.C. Salvador Cruz


36
Estructura de Datos

I.S.C. Salvador Cruz


37
Estructura de Datos

I.S.C. Salvador Cruz


38
Estructura de Datos

I.S.C. Salvador Cruz


39
Estructura de Datos

I.S.C. Salvador Cruz


40
Estructura de Datos

1.1 Concepto de Complejidad de algoritmos.

I.S.C. Salvador Cruz


41
Estructura de Datos

1.2 Aritmética de la notación O.

I.S.C. Salvador Cruz


42
Estructura de Datos

I.S.C. Salvador Cruz


43
Estructura de Datos

I.S.C. Salvador Cruz


44
Estructura de Datos

Unidad 2 Manejo de memoria.


2.1 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) debe 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

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

I.S.C. Salvador Cruz


45
Estructura de Datos

tamaño puede deducirse en tiempo de compilación.


2. q inicializa sus variables y comienza su ejecución.
a. 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

2.2 Memoria dinámica.

La memoria dinámica sirve para que los programas se adapten siempre al tamaño del problema que
tienen que resolver, sin desperdiciar recursos de memoria. Esto se traduce asimismo en una mayor eficiencia
en la ejecución de los programas.

La memoria dinámica es un espacio de almacenamiento que se puede solicitar en tiempo de ejecución.


Además de solicitar espacios de almacenamiento, también podemos liberarlos (en tiempo de ejecución)
cuando dejemos de necesitarlos.

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

I.S.C. Salvador Cruz


46

Anda mungkin juga menyukai