Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Reporte De Investigación
Presenta:
Mil Ortiz Emmanuel Alejandro
Chi Marcial Fernando Yahir
Leonardo Hernández Azamar
Chaga Chagala Isaac
Grupo: 304 B
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
INDICE
INTRODUCCION…………………………………………………………………………..3-4
CLASIFICACION DE LAS ESTRUCTURA DE DATOS………………………………5-6
TIPOS DE DATOS ABSTRACTOS (TDA)……………………………………………..7-9
EJEMPLOS DE TDA's…………………………………………………………………….10-19
MANEJO DE MEMORIA………………………………………………………………….20-23
MEMORIA ESTATICA…………………………………………………………………...23-25
MEMORIA DINAMICA…………………………………………………………………...25-26
MEMORIA AUTOMATICA………………………………………………………………...26
ANALISIS DE ALGORITMOS…………………………………………………………..27-28
COMPLEJIDAD EN EL TIEMPO………………………………………………………..29
COMPLEJIDAD EN EL ESPACIO……………………………………………………...30
EFICIENCIA DE LOS ALGORITMOS………………………………………………….30-31
CONCLUSION……………………………………………………………………………32
REFERENCIAS…………………………………………………………………………..33
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
INTRODUCCION
Las estructuras de datos son elementos fundamentales en la ciencia de la computación y la
programación. Son herramientas que permiten organizar y almacenar datos de manera
eficiente para que puedan ser procesados y manipulados de manera efectiva por un programa
o algoritmo. Las estructuras de datos son esenciales en el desarrollo de software, ya que la
elección adecuada de una estructura de datos puede tener un gran impacto en el rendimiento
y la eficiencia de un programa.
Existen diversas estructuras de datos, cada una diseñada para cumplir con un conjunto
específico de requisitos y tareas. Algunas de las estructuras de datos más comunes incluyen:
Arreglos (Arrays): Son colecciones de elementos del mismo tipo, almacenados en memoria de
manera contigua. Los elementos se acceden mediante un índice. Los arreglos son eficientes
para el acceso directo a elementos, pero no son flexibles en cuanto a su tamaño.
Listas enlazadas (Linked Lists): Estas estructuras de datos están formadas por nodos que
contienen datos y una referencia al siguiente nodo. Son flexibles en cuanto a su tamaño y
permiten la inserción y eliminación eficiente de elementos en cualquier posición.
Pilas (Stacks) y Colas (Queues): Son estructuras de datos que siguen el principio de "último
en entrar, primero en salir" (LIFO) para pilas y "primero en entrar, primero en salir" (FIFO) para
colas. Son utilizadas en una variedad de aplicaciones, como la gestión de llamadas a funciones
y la planificación de tareas.
Árboles (Trees): Los árboles son estructuras de datos jerárquicas que consisten en nodos
conectados de manera que forman una estructura de árbol. Los árboles binarios, los árboles
AVL y los árboles B son ejemplos de diferentes tipos de árboles utilizados en la organización
y búsqueda eficiente de datos.
Grafos (Graphs): Los grafos son estructuras de datos que consisten en nodos (vértices) y
conexiones entre ellos (aristas). Se utilizan para modelar relaciones complejas y se aplican en
una amplia gama de aplicaciones, como redes sociales, mapas y sistemas de recomendación.
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
Tablas Hash (Hash Tables): Son estructuras de datos que utilizan una función hash para
asignar claves a valores. Permiten un acceso rápido a los datos si se conoce la clave. Son
ideales para buscar datos por clave.
Matrices (Matrices): Son estructuras bidimensionales que contienen elementos organizados
en filas y columnas. Son útiles para representar datos tabulares y realizar operaciones
matriciales.
La elección de la estructura de datos adecuada depende de los requisitos específicos de la
aplicación y de las operaciones que se realizarán con los datos. Un conocimiento sólido de las
estructuras de datos es fundamental para la programación eficiente y la resolución de
problemas complejos en informática. En resumen, las estructuras de datos son la base sobre
la cual se construye la mayoría del software moderno, y su comprensión es esencial para
cualquier programador
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
cuya representación es: not, y respectivamente. En cambio el tipo array, of boolean cuenta con
ocho valores, estando determinado por el conjunto ((false, false, false), (false,false,true) (false,
true, false) (false,true,true) (true, false, false) (true, false, true) (true,true, false), (true,true,
true)), donde cada una de las ternas representa uno de los valores que puede tomar una
variable declarada del mencionado tipo. [3]
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
[3]
[3]
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
EJEMPLOS DE TDA’S
TDA LISTA
Una lista se define como una serie de N elementos E1, E2, ..., EN, ordenados de manera
consecutiva, es decir, el elemento Ek (que se denomina elemento k-ésimo) es previo al
elemento Ek+1. Si la lista contiene 0 elementos se denomina como lista vacía.
Las operaciones que se pueden realizar en la lista son: insertar un elemento en la posición k,
borrar el k-ésimo elemento, buscar un elemento dentro de la lista y preguntar si la lista está
vacía.
Una manera simple de implementar una lista es utilizando un arreglo. Sin embargo, las
operaciones de inserción y borrado de elementos en arreglos son ineficientes, puesto que para
insertar un elemento en la parte media del arreglo es necesario mover todos los elementos
que se encuentren delante de él, para hacer espacio, y al borrar un elemento es necesario
mover todos los elementos para ocupar el espacio desocupado. Una implementación más
eficiente del TDA se logra utilizando listas enlazadas.
A continuación, se presenta una implementación en Java del TDA utilizando listas enlazadas
y sus operaciones asociadas:
• estaVacia(): devuelve verdadero si la lista está vacía, falso en caso contrario.
• insertar (x, k): inserta el elemento x en la k-ésima posición de la lista.
• Buscar K(x): devuelve la posición en la lista del elemento x.
• buscar (k): devuelve el k-ésimo elemento de la lista.
• eliminar(x): elimina de la lista el elemento x.
En la implementación con listas enlazadas es necesario tener en cuenta algunos detalles
importantes: si solamente se dispone de la referencia al primer elemento, el añadir o remover
en la primera posición es un caso especial, puesto que la referencia a la lista enlazada debe
modificarse según la operación realizada. Además, para eliminar un elemento en particular es
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
necesario conocer el elemento que lo antecede, y en este caso, ¿qué pasa con el primer
elemento, que no tiene un predecesor?
Para solucionar estos inconvenientes se utiliza la implementación de lista enlazada con nodo
cabecera. Con esto, todos los elementos de la lista tendrán un elemento previo, puesto que el
previo del primer elemento es la cabecera. Una lista vacía corresponde, en este caso, a una
cabecera cuya referencia siguiente es null.[3]
TDA PILA
Una pila (stack o pushdown en inglés) es una lista de elementos de la cual sólo se puede
extraer el último elemento insertado. La posición en donde se encuentra dicho elemento se
denomina tope de la pila. También se conoce a las pilas como listas LIFO (LAST IN - FIRST
OUT: el último que entra es el primero que sale).
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
[3]
Nota: algunos autores definen desapilar como sacar el elemento del tope de la pila sin
retornarlo.[3]
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
Para implementar una pila utilizando un arreglo, basta con definir el arreglo del tipo de dato
que se almacenará en la pila. Una variable de instancia indicará la posición del tope de la pila,
lo cual permitirá realizar las operaciones de inserción y borrado, y también permitirá saber si
la pila esta vacía, definiendo que dicha variable vale -1 cuando no hay elementos en el arreglo.
Suponga que una función F realiza un llamado recursivo dentro de su código, lo que se ilustra
en la siguiente figura:
[3]
Si la llamada recursiva es lo último que hace la función F, entonces dicha llamada se puede
substituir por un ciclo while. Este caso es conocido como tail recursion y en lo posible hay que
evitarlo en la programación, ya que cada llamada recursiva ocupa espacio en la memoria del
computador, y en el caso del tail recursion es muy simple eliminarla. [3]
TDA cola
Una cola (queue en inglés) es una lista de elementos en donde siempre se insertan nuevos
elementos al final de la lista y se extraen elementos desde el inicio de la lista. También se
conoce a las colas como listas FIFO (FIRST IN - FIRST OUT: el primero que entra es el primero
que sale).[3]
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
xisten varios tipos de colas en el TDA (Tipo de dato abstracto), cada una con características y
funcionalidades específicas. Algunos de los tipos de colas más comunes son:
1. Cola estática: Se trata de una cola implementada utilizando un arreglo de tamaño fijo. La
cola sigue una estructura FIFO (First In, First Out) y tiene un tamaño máximo predefinido.
[3]
2. Cola dinámica: En este caso, la cola se implementa utilizando una estructura de datos
enlazada (usualmente una lista enlazada). A diferencia de la cola estática, el tamaño no está
limitado y se puede aumentar o disminuir según sea necesario.
[3]
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
3. Cola de prioridad: Esta cola se utiliza cuando los elementos tienen asignado un valor
numérico o una prioridad. Los elementos se insertan en la cola y se ordenan automáticamente
según su prioridad, de modo que el elemento con la mayor prioridad esté al frente de la cola.
[3]
4. Cola circular: En este tipo de cola, los elementos se almacenan en un arreglo de tamaño fijo
pero, a diferencia de la cola estática, al llegar al final del arreglo los elementos se enlazan con
el inicio formando una especie de círculo. Esto permite tener una cola con tamaño fijo pero que
puede seguir recibiendo elementos si se liberan espacios al frente.
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
[3]
Bicolas
La bicola o doble cola es un tipo de cola especial que permiten la inserción y eliminación de
elementos de ambos extremos de la cola. Puede representarse a partir de un vector y dos
índices, siendo su representación más frecuente una lista circular doblemente enlazada. [11]
[3]
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
[3]
Estas son solo algunas de las variantes más comunes de las colas en el TDA. Sin embargo,
existen otras implementaciones y estructuras relacionadas a las colas que pueden ser
utilizadas según las necesidades específicas de cada caso.
Al igual que con el TDA pila, una cola se puede implementar tanto con arreglos como con listas
enlazadas. A continuación se verá la implementación usando un arreglo.
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
[3]
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
TDA ÁRBOL
un árbol es un tipo abstracto de datos (TAD) ampliamente usado que imita la estructura
jerárquica de un árbol, con un valor en la raíz y subárboles con un nodo padre, representado
como un conjunto de nodos enlazados.
Una estructura de datos de árbol se puede definir de forma recursiva (localmente) como una
colección de nodos (a partir de un nodo raíz), donde cada nodo es una estructura de datos con
un valor, junto con una lista de referencias a los nodos (los hijos), con la condición de que
ninguna referencia esté duplicada ni que ningún nodo apunte a la raíz.
• Es un TAD que representa una colección de elementos llamados nodos.
• Uno de estos nodos es especial, nos referimos a él como la raíz del árbol.
• Entre los nodos hay una relación de paternidad la cual impone una estructura
jerárquica sobre ellos. [4]
[4]
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
MANEJO DE MEMORIA
Todas las variables, arreglos y objetos en general tienen una duración determinada en el
transcurso de un programa. Son creados y destruidos para su uso y después para que la
memoria sea liberada para que la utilicen otros objetos.
a) Memoria estática: Es la utilizada por variables globales y las declaradas de tipo estática.
Estos objetos tienen asignada la misma dirección de memoria desde el comienzo hasta el final
del programa. (variables globales, tipo estático)
b) Memoria automática: Es la utilizada por argumentos en una función y por las variables
locales. Cada entrada en la función crea estos objetos y son destruidos al salir de ella.
(variables locales, argumentos en una función).
c) Memoria Dinámica: Es también llamado almacenamiento libre por que en este caso el
programador es el que solicita memoria para crear los objetos y es el responsable de liberar la
memoria cuando ya no la necesita para ser reutilizada. (objetos de una clase)
La reserva y liberación para variables globales, estáticas, locales y argumentos son realizadas
de forma implícita por el programa, la única que requiere intervención del programador es la
reserva y liberación de memoria dinámica. [5]
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
[5]
[5]
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
fragmentación interna, que ocurre cuando se asigna más memoria de la necesaria para un
programa en particular.
[5]
[5]
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
[5]
El manejo de memoria es una parte esencial del sistema operativo y tiene un impacto
significativo en el rendimiento y la capacidad de un sistema informático.
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
MEMORIA ESTATICA.
La memoria estática es la que se reserva en el momento de la compilación antes de comenzar
a ejecutarse el programa. Los objetos son creados en ese momento y destruidos al finalizar el
programa. Mantenga la misma localización en memoria durante todo el transcurso del
programa.
Los objetos administrados de ese modo son:
- Variables estáticas
- Variables globales
- Miembros estáticos de clases
- Literales de cualquier tipo.
Ejemplos:
Class CSimple1
{
static void Main(string[]args)
{
int[] Numeros=new int[]{1, 2,3,4,5};
for(int i=0;iconsole.write(“{0},”,Numeros[i]);
}}
Clase CSimple2
{
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
MEMORIA DINÁMICA
– ¿Qué es?
• Mecanismo para gestionar de forma dinámica el espacio
ocupado/libre de memoria.
– ¿Para qué sirve?
• Permite reservar/liberar memoria bajo demanda
– Libera al programador de saber dónde colocar sus estructuras en memoria
• Evita limites por culpa de variables estáticas
• Facilita implementar estructuras de datos dinámicas como listas,
Árboles en el que no se conoce a priori su tamaño final
• Mejor aprovechamiento de la memoria
Memoria dinámica para el sistema operativo
– Primera aproximación: “Cutre-system”
– Buddy System
– Slab allocator
• Memoria dinámica para el usuarioSO no usa paginación para su espacio lógico
– Mecanismos para reducir la fragmentación y acelerar la reserva de memoria
– Soporte a dispositivos que interactúan directamente con la memoria física
• Reserva un segmento de memoria física para sus datos.
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
[5]
MEMORIA AUTOMÁTICA
es uno de los servicios que proporciona Common Language Runtime durante la ejecución
administrada. El recolector de elementos no utilizados de Common Language Runtime
administra la asignación y liberación de la memoria de una aplicación. Esto significa que los
programadores no tienen que escribir código para realizar tareas de administración de
memoria al programar aplicaciones administradas. La administración automática de la
memoria puede eliminar problemas frecuentes, como olvidar liberar un objeto y causar una
pérdida de memoria, o intentar tener acceso a la memoria de un objeto que ya se ha liberado.
En esta sección se describe cómo asigna y libera memoria el recolector de elementos no
utilizados.
[6]
ANÁLISIS DE ALGORITMOS
Los algoritmos vamos a empezar por establecer una definición de lo que es un
algoritmo: Secuencia finita de instrucciones donde cada una de las cuales tiene un significado
preciso y puede ejecutarse con una cantidad finita de recursos computacionales en un tiempo
finito.
El análisis de algoritmos es una herramienta para hacer la evaluación del diseño de un
algoritmo, permite establecer la calidad de un programa y compararlo con otros que puedan
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
en espacio). Así, el objetivo del análisis de complejidad es cuantificar las medidas físicas:
tiempo de ejecución y espacio de memoria y comparar distintos algoritmos que resuelven un
mismo problema.
El tiempo de ejecución de un programa depende de factores como:
los datos de entrada del programa
la calidad del código objeto generado por el compilador
la naturaleza y rapidez de las instrucciones de máquina utilizadas
la complejidad en tiempo del algoritmo base del programa
El tiempo de ejecución debe definirse como una función que depende de la entrada; en
particular, de su tamaño. El tiempo requerido por un algoritmo expresado como una función
del tamaño de la entrada del problema se denomina complejidad en tiempo del algoritmo y se
denota T(n). El comportamiento límite de la complejidad a medida que crece el tamaño del
problema se denomina complejidad en tiempo asintótica. De manera análoga se pueden
establecer definiciones para la complejidad en espacio y la complejidad en espacio asintótica.
El tiempo de ejecución depende de diversos factores. Se tomará como más relevante el
relacionado con la entrada de datos del programa, asociando a un problema un entero llamado
tamaño del problema, el cual es una medida de la cantidad de datos de entrada.[7]
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
COMPLEJIDAD EN EL TIEMPO
En muchos casos, la complejidad de tiempo de un algoritmo es igual para todas las instancias
de tamaño n del problema. En otros casos, la complejidad de un algoritmo de tamaño n es
distinta dependiendo de las instancias de tamaño n del problema que resuelve. Esto nos lleva
a estudiar la complejidad del peor caso, mejor caso, y caso promedio.
Para un tamaño dado (n), la complejidad del algoritmo en el peor caso resulta de tomar el
máximo tiempo (complejidad máxima) en que se ejecuta el algoritmo, entre todas las instancias
del problema (que resuelve el algoritmo) de tamaño n; la complejidad en el caso promedio es
la esperanza matemática del tiempo de ejecución del algoritmo para entradas de tamaño n, y
la complejidad mejor caso es el menor tiempo en que se ejecuta el algoritmo para entradas de
tamaño n. Por defecto se toma la complejidad del peor caso como medida de complejidad T(n)
del algoritmo.
Aun cuando son los programas que los llegan realmente a consumir recursos computacionales
(memoria, tiempo, etc.) sobre una máquina concreta, se realiza el análisis sobre el algoritmo
de base, considerando que se ejecuta en una máquina hipotética.
La complejidad de un programa depende de:
• La máquina y el compilador utilizados
• El tamaño de los datos de entrada que depende del tipo de datos y del algoritmo
• El valor de los datos de entrada.
La complejidad en el caso peor proporciona una medida pesimista, pero fiable.
Dado que se realiza un estudio teórico de la complejidad, ignorando aspectos como las
características de la máquina y el compilador, se tiene en cuenta que las diferencias en
eficiencia se hacen más significativos para tamaños grandes de los datos de entrada se analiza
la complejidad en términos de su comportamiento asintótico, dejando de lado la forma exacta
de la función de complejidad.[8]
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
COMPLEJIDAD ESPACIO
Memoria que utiliza un programa para su ejecución, indica la cantidad de espacio requerido
para ejecutar el algoritmo; es decir, el espacio en memoria que ocupan todas las variables
propias al algoritmo. Para calcular la memoria estática de un algoritmo se suma la memoria
que ocupan las variables declaradas en el algoritmo. Para el caso de la memoria dinámica, el
cálculo no es tan simple ya que, este depende de cada ejecución del algoritmo.
Nosotros estudiaremos las complejidades temporales, con este fin, para cada problema
determinaremos una medida N, que llamaremos tamaño de la entrada o número de datos a
procesar por el programa, intentaremos hallar respuestas en función de dicha N.
Esto dependerá de la naturaleza del problema, por ejemplo, si hablamos de un arreglo se
puede ver a N como el rango del arreglo, para una matriz, el número de elementos que la
componen; para un grafo, podría ser el número de nodos o arcos, no se puede establecer una
regla para N, pues cada problema tiene su propia complejidad.
[10]
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
Resolución de recurrencias:
• Método de la ecuación característica
• Recurrencias homogéneas
• Recurrencias no homogéneas
• Cambios de variable
• Transformaciones del rango
• Apéndice: Fórmulas útiles [9]
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
CONCLUSION
En conclusión, el estudio de las estructuras de datos es esencial en el campo de la informática
y la programación, ya que proporciona las bases para organizar y manipular datos de manera
eficiente en aplicaciones y algoritmos. Las estructuras de datos son herramientas
fundamentales para resolver una amplia variedad de problemas y optimizar el rendimiento de
programas.
La clasificación de las estructuras de datos en tipos fundamentales como arrays, listas, pilas,
colas, árboles y grafos permite a los desarrolladores elegir la estructura adecuada según los
requisitos específicos de su proyecto. Cada tipo de estructura tiene sus propias ventajas y
desventajas, lo que les permite adaptarse a diferentes situaciones.
Los Tipos de Datos Abstractos (TDA) son una abstracción que separa la interfaz de una
estructura de datos de su implementación subyacente, lo que proporciona una forma clara y
coherente de interactuar con datos complejos. Ejemplos de TDA incluyen listas enlazadas,
pilas, colas, conjuntos y mapas, que permiten a los programadores utilizar estas estructuras
sin necesidad de conocer los detalles internos de su implementación.
El manejo de memoria es un aspecto crítico en la programación, ya que garantiza la eficiencia
y la ausencia de fugas de memoria en las aplicaciones. Los programadores deben ser
conscientes de la asignación y liberación de memoria, especialmente en lenguajes de
programación de bajo nivel, como C y C++. La gestión de memoria adecuada es esencial para
evitar errores y mejorar la estabilidad de las aplicaciones.
En resumen, comprender las estructuras de datos, su clasificación, los Tipos de Datos
Abstractos, ejemplos de estos, y el manejo de memoria son pilares fundamentales en el
desarrollo de software de calidad. Los programadores deben elegir sabiamente las estructuras
de datos y técnicas de gestión de memoria adecuadas para cada proyecto, lo que contribuirá
a la eficiencia, la fiabilidad y el éxito de sus aplicaciones.
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
FUENTES BIBLOGRAFICAS:
[1]Colaboradores de los proyectos Wikimedia. (2003, 9 de agosto). Estructura de datos -
Wikipedia, la enciclopedia libre. Wikipedia, la enciclopedia
libre. https://es.wikipedia.org/wiki/Estructura_de_datos
[2]http://wwwtemarioestructuradedatos.blogspot.com/p/clasificacion-estructuras-de-datos.html
[3] (s.f.). http://www.cs.uns.edu.ar/~ldm/data/eda/apuntes/01_td-ed-tda.pdf
[4] CC30A Algoritmos y Estructuras de Datos: Tipos de datos abstractos. (s.f.). DCC |
Universidad de Chile. https://users.dcc.uchile.cl/~bebustos/apuntes/cc30a/TDA/
[5] (s.f.). http://www.cs.uns.edu.ar/~ldm/data/eda/apuntes/01_td-ed-tda.pdf
[6]Automatic Memory Management - .NET. (s.f.). Microsoft Learn: Build skills that open doors
in your career. https://learn.microsoft.com/es-es/dotnet/standard/automatic-memory-
management
[6]Docència — Departament d'Arquitectura de Computadors — UPC. Universitat Politècnica
de Catalunya. Accedido el 9 de septiembre de 2023. [En línea]. Disponible:
https://docencia.ac.upc.edu/FIB/grau/SO2/documents/tema6.pdf
[7] (s.f.). Estructura de Datos. https://estructuradedatosbalv.zyrosite.com/about-me-copy-
copy-0G2khO0Aqk
[8] Barra de navegación. (s.f.). http://artemisa.unicauca.edu.co/~nediaz/EDDI/cap01.htm
[9] LUDA UAM-Azc. (s.f.). http://aniei.org.mx/paginas/uam/CursoAA/curso_aa_02.html
[10] (s.f.). Fernando Berzal. https://elvex.ugr.es/decsai/algorithms/slides/2%20Eficiencia.pdf