Tarea Investigacion (-Estructura de Datos-)
Tarea Investigacion (-Estructura de Datos-)
Tarea Investigacion (-Estructura de Datos-)
FACULTAD DE TECNOLOGIA
GRUPO: “PIXEL”
ANALISÍS Y APLICACIONES DE
ESTRUCTURAS DE DATOS
INTRODUCCIÓN:
Definición General
Listas
Pilas
Las pilas son estructuras LIFO (Last In, First Out) donde el último elemento
añadido es el primero en salir, útiles para evaluaciones de expresiones,
gestión de llamadas y algoritmos de retroceso.
Colas
Las colas son estructuras FIFO (First In, First Out) que mantienen una
secuencia predecible en la ejecución de operaciones, donde el primer
elemento en entrar es el primero en salir.
Árboles
Los grafos son estructuras de datos no lineales con nodos conectados por
enlaces, utilizados para representar relaciones complejas entre datos sin
las restricciones jerárquicas de un árbol.
1. Listas
ArrayList
Definición:
Una lista donde cada elemento está contenido en un nodo que apunta al
siguiente nodo en la secuencia.
Operaciones Básicas
• Inserción
ArrayList: Se realiza en tiempo constante O (1) si se inserta al final de
la lista. Si se inserta en una posición intermedia, puede ser O(n)
debido al desplazamiento de elementos.
LinkedList: Inserciones al inicio o al final son O (1). Inserciones en
una posición intermedia pueden ser O(n) si se necesita recorrer la
lista para encontrar la posición.
• Eliminación
ArrayList: Eliminaciones al final son O (1), pero eliminaciones en
posiciones intermedias son O(n) debido al desplazamiento de
elementos.
LinkedList: Eliminaciones al inicio o al final son O (1). Eliminaciones en
una posición intermedia pueden ser O (n).
• Búsqueda
ArrayList: Acceso mediante índice es O (1). Búsqueda secuencial de un
elemento específico es O(n).
LinkedList: Tanto el acceso mediante índice como la búsqueda
secuencial son O (n).
• Actualización
ArrayList: Actualización de un elemento por índice es O (1).
LinkedList: Actualización de un elemento por índice puede ser O (n).
ArrayList
Ventajas:
Desventajas:
LinkedList
Ventajas:
Desventajas:
ArrayList
LinkedList
ArrayList
LinkedList
2. Pilas.
Una pila o Stack es una colección de elementos donde el último elemento
agregado es el primero en ser eliminado, es una estructura de datos
basada en la idea de LIFO (Last In, First Out). Esto significa que el
elemento que fue agregado más recientemente es el primero en ser
retirado. Esta estructura de datos se usa comúnmente para almacenar y
manipular datos de forma ordenada y eficiente. Es una estructura de datos
lineal que se basa en el principio de último en entrar, primero en salir
(LIFO). Es una especie de anti-cola. Imagina una baraja de cartas o una
pila de libros en una caja. El libro que puso en la pila primero está en la
parte inferior, y el primero que sacaremos de la caja es el libro que estaba
en la parte superior, es decir, el último que entró en la caja. Uno de los
usos más importantes de la pila es organizar llamadas a subrutinas. El
punto de llamada en la pila almacena la dirección de retorno de la
subrutina después de que finaliza (y posiblemente los parámetros
pasados). Con cada llamada anidada (incluida la recursiva) de subrutinas,
se agregan nuevas direcciones de retorno a la pila. Con cada operación de
retorno de la subrutina (retorno), la dirección de retorno se elimina de la
pila y se le transfiere el control. Esta aplicación es tan importante para la
programación que en la mayoría de los procesadores, la pila de retorno se
implementa en hardware en el conjunto de instrucciones. Sin embargo, en
otros casos, la pila debe modelarse en estructuras de datos más generales.
Operaciones básicas.
Ventajas.
Desventajas.
La principal desventaja de usar pilas en Java radica en que una vez que un
objeto se ha agregado a la pila, solo se puede acceder a él como el último
elemento. El acceso a otras posiciones de la pila siempre requiere la
eliminación previa de los elementos superiores. Además, las pilas no
proporcionan operaciones de búsqueda, ya que los elementos se ubican
según su orden de inserción.
Ejemplo.
3.Colas:
Definición y principios de funcionamiento:
Tipos de colas:
1) Cola Simple:
3) Cola de prioridad:
• Una cola de prioridad es una estructura de datos especial que
permite almacenar elementos de manera ordenada según su
prioridad. A diferencia de una cola simple (FIFO), en una cola de
prioridad los elementos se extraen según su prioridad,
independientemente del orden en que fueron insertados
• Las principales características de una cola de prioridad son:
• Los elementos se insertan en cualquier orden, pero se extraen
según su prioridad.
• La prioridad de un elemento se determina por su valor o
según un criterio definido por un comparador.
• Generalmente, las colas de prioridad se implementan
internamente como montículos (heaps), lo que permite
realizar las operaciones de inserción y extracción del
elemento de mayor prioridad de manera eficiente
Operaciones básicas
Ventajas:
Ejemplos de implementación:
4.Árbol (Trees)
Nodo Raíz: Se refiere al primer nodo de un Árbol, Solo un nodo del Árbol
puede ser la Raíz.
Nodo Padre: Se utiliza este termino para llamar a todos aquellos nodos que
tiene al menos un hijo.
Nodo Hijo: Los hijos son todos aquellos nodos que tiene un padre.
Nodo Hermano: Los nodos hermanos son aquellos nodos que comparte a un
mismo padre en común dentro de la estructura.
Nodo Hoja: Son todos aquellos nodos que no tienen hijos, los cuales siempre
se encuentran en los extremos de la estructura.
Nodo Rama: Estos son todos aquellos nodos que no son la raíz y que
ademas tiene al menos un hijo.
Tipos de árboles
1. Árbol Binario
Esta estructura se caracteriza por que cada nodo solo puede tener
máximo 2 hijo, dicho de otra manera es un Árbol n-ario de Grado 2
3. Árbol AVL
Árbol AVL
Class Nodo {
Int llave;
String val;
Nodo izq;
Nodo der;
Nodo(int llave, String val, Nodo izq, Nodo der) {
This.llave= llave;
This.val= val;
This.izq= izq;
This.der= der;
}
}
En donde izq referencia la raíz del ABB izquierdo, o nulo si el ABB vacío, y
der referencia respectivamente el ABB derecho. Un nodo almacena una
asociación (llave, val), al igual que en una lista enlazada un eslabón
almacena un asociación del arreglo asociativo.
La siguiente figura muestra dos posibles representaciones de un arreglo
asociativo con asociaciones {3->”hola”, 5->”que”, 10->”tal”}:
Aplicaciones prácticas
Las aplicaciones más habituales para las estructuras de tipo árbol son:
Representación de modelos jerárquicos: todo modelo en el cual existan
objetos que puedan contener dentro otros objetos (por ejemplo, la
estructura de archivos y carpetas, o bien la representación de
organigramas de usuarios).
4.Grafos (Graphs):
Componentes de un grafo:
1. Vértices (Nodos):
• Representan los puntos fundamentales de un grafo.
• Cada vértice puede contener información o ser identificado por
una etiqueta única.
• En representaciones visuales, los vértices suelen dibujarse como
puntos o círculos.
2. Aristas (Arcos):
• Representan las conexiones entre los vértices.
• Una arista conecta dos vértices, indicando una relación entre ellos.
Pueden ser de dos tipos:
• No dirigidas: La relación es bidireccional. Se representan con
líneas simples.
• Dirigidas (Arcos): La relación es unidireccional y se representan
con flechas.
Tipos de Grafos:
1) Dirigidos
Un grafo dirigido que también se le conoce como dígrafo, cada arista
tiene una dirección específica. Esto significa que la relación entre dos
vértices es unidireccional.
Su aplicación: Modelado de sistemas donde la dirección de la relación
es importante, como en redes de tráfico, circuitos electrónicos, y
grafos de dependencia.
2) No dirigidos
Un grafo no dirigido, las aristas no tienen dirección, lo que significa
que la relación entre dos vértices es bidireccional.
Su aplicación: Modelado de sistemas donde la reciprocidad es
inherente, como en redes de colaboración, mapas de ciudades, y
grafos de conexiones físicas.
3) Ponderados
Un grafo ponderado, cada arista tiene un peso o costo asociado. Este
peso puede representar diferentes cosas, como distancias, tiempos,
costos, capacidades y más, etc.
Su aplicación: Problemas de optimización, como encontrar el camino
más corto (algoritmo de Dijkstra), el árbol de expansión mínima
(algoritmo de Prim o Kruskal), y el flujo máximo en una red.
Representación de Grafos
I. Listas de Adyacencia
Una lista de adyacencia es una colección de listas, donde cada lista
está asociada a un vértice del grafo. Cada entrada en la lista de un
vértice contiene los vértices adyacentes a él.
Ventajas:
-Eficiencia en espacio: Útil para grafos dispersos (con pocas aristas),
ya que solo se almacenan las aristas existentes.
-Fácil adición de vértices y aristas: Agregar un vértice o una arista es
sencillo y eficiente.
Desventajas:
-Acceso menos directo: Verificar si existe una arista entre dos
vértices puede ser más lento en comparación con una matriz de
adyacencia.
3. Algoritmo de Dijkstra
Aplicaciones prácticas y casos de uso
Casos de Uso:
Ejemplos de Uso:
Comparación y Contraste:
Colas
Eficiencia:
Complejidad temporal:
Pilas (Stack):
Eficiencia:
Complejidad temporal:
Complejidad espacial:
Árboles:
Eficiencia:
Complejidad espacial:
Grafos:
Eficiencia:
Listas:
Eficiencia:
➢ Complejidad espacial:
Conclusiones:
• https://amsoft.medium.com/dominando-las-estructuras-de-datos-en-
java-pilas-y-colas-09a4279264b1
• https://docs.oracle.com/javase/8/docs/api/java/util/Queue.html
• Estructuras de Datos Abstractas en Lenguaje Java- Carlo Casorzo G.
• Documentación Oficial de Java:
• ArrayList (Java Platform SE 8 ) (oracle.com)
• LinkedList (Java Platform SE 8 ) (oracle.com)
• (https://www.aprenderaprogramar.com/index.php?option=com_conte
nt&view=article&id=608:la-estructura-de-datos-pila-en-java-clase-
stack-del-api-java-ejemplo-simple-y-ejercicios-resueltos-
cu00923c&catid=58&Itemid=180 )
• (Pilas en Java - Go Coding)
• https://www.apinem.com/grafos-en-programacion/
• https://www.apinem.com/grafos-en-programacion/#8-grafos-
ponderados
• https://www.apinem.com/grafos-en-programacion/#13-usos-comunes-
de-grafos-en-el-desarrollo-web
• https://www.uv.mx/personal/ermeneses/files/2021/08/Clase8-
Arboles.pdf
• https://www.oscarblancarteblog.com/2014/08/22/estructura-de-datos-
arboles/
• https://ccia.ugr.es/~jfv/ed1/tedi/cdrom/docs/arb_BB.htm
• https://www.hci.uniovi.es/Products/DSTool/avl/avl-queSon.html
• https://audreyn.medium.com/red-black-tree-d2dae804a197
• https://www.apinem.com/arboles-programacion/
• https://ed.team/comunidad/ventajas-y-desventajas-de-la-busqueda-
binaria
• https://prezi.com/p/zvzthwaropip/arboles-avl/
• https://users.dcc.uchile.cl/~lmateu/CC10A/Apuntes/arboles/index.htm
l
• https://es.quora.com/Cu%C3%A1les-son-las-aplicaciones-m%C3%A1s-
habituales-para-las-estructuras-de-datos-de-tipo-%C3%A1rbol