Está en la página 1de 75

Estructuras de Datos

Algoritmos
Estructuras de Datos

MSc Edson Ticona Zegarra

Campamento de Programación

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Contenido

Estructuras de Datos
Estructuras de Datos Elementales
Estructuras de Datos Avanzadas

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Contenido

Estructuras de Datos
Estructuras de Datos Elementales
Estructuras de Datos Avanzadas

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos
▶ Una estructura de datos es una forma de organizar data para
facilitar su posterior uso

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos
▶ Una estructura de datos es una forma de organizar data para
facilitar su posterior uso
▶ Toda estructura de datos define operaciones como inserción,
remoción, búsqueda, etc

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos
▶ Una estructura de datos es una forma de organizar data para
facilitar su posterior uso
▶ Toda estructura de datos define operaciones como inserción,
remoción, búsqueda, etc
▶ Las estructuras de datos más básicas son los arreglos y las
matrices (arreglos bidimensionales)

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos
▶ Una estructura de datos es una forma de organizar data para
facilitar su posterior uso
▶ Toda estructura de datos define operaciones como inserción,
remoción, búsqueda, etc
▶ Las estructuras de datos más básicas son los arreglos y las
matrices (arreglos bidimensionales)
▶ El objetivo es que sean un soporte para el diseño de
algoritmos eficientes

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos
▶ Una estructura de datos es una forma de organizar data para
facilitar su posterior uso
▶ Toda estructura de datos define operaciones como inserción,
remoción, búsqueda, etc
▶ Las estructuras de datos más básicas son los arreglos y las
matrices (arreglos bidimensionales)
▶ El objetivo es que sean un soporte para el diseño de
algoritmos eficientes
▶ C++ provee los llamados contenedores que implementan
varias estructuras de datos, hay una buena cantidad de
estructuras de datos implementadas, las más especializadas
pueden ser construidas tomando estas de base.

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Contenido

Estructuras de Datos
Estructuras de Datos Elementales
Estructuras de Datos Avanzadas

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Vectores

▶ Consideramos como vectores a arreglos con memoria


dinámica

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Vectores

▶ Consideramos como vectores a arreglos con memoria


dinámica
▶ Memoria estática: se conoce el tamaño del arreglo en tiempo
de compilación (al momento de compilar el programa)

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Vectores

▶ Consideramos como vectores a arreglos con memoria


dinámica
▶ Memoria estática: se conoce el tamaño del arreglo en tiempo
de compilación (al momento de compilar el programa)
▶ Memoria dinámica: no se conoce el tamaño del arreglo en
tiempo de compilación, sino solo en tiempo de ejecución (al
momento de correr el programa)

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Vectores

#i n c l u d e <i o s t r e a m >
#i n c l u d e <v e c t o r >

u s i n g namespace s t d ;

i n t main ( ) {
v e c t o r <i n t > V ; // no hay n e c e s i d a d de i n d i c a r e l tamano i n i c i a l
V. push back ( 2 ) ;
V. push back ( 1 ) ;
V. push back ( 4 ) ;
f o r ( i n t i =0; i <V . s i z e ( ) ; i++ ) {
c o u t << V [ i ] << e n d l ;
}
}

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Pilas

▶ Es un contenedor que almacena un conjunto de elementos,


siendo una memoria tipo LIFO (Last-In First-Out)

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Pilas

▶ Es un contenedor que almacena un conjunto de elementos,


siendo una memoria tipo LIFO (Last-In First-Out)
▶ Solo permite acceso al último elemento agregado

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Pilas

▶ Es un contenedor que almacena un conjunto de elementos,


siendo una memoria tipo LIFO (Last-In First-Out)
▶ Solo permite acceso al último elemento agregado
▶ Se puede pensar como una forma de apilar platos, uno encima
de otro, de esta manera solo se puede retirar el último que fue
agregado

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Pilas

#i n c l u d e <s t a c k >
#i n c l u d e <i o s t r e a m >

u s i n g namespace s t d ;

i n t main ( ) {
s t a c k <i n t > S ;
S . p us h ( 3 ) ;
S . p us h ( 5 ) ;
S . p us h ( 2 0 ) ;
w h i l e ( ! S . empty ( ) ) {
c o u t << S . t o p ( ) << e n d l ;
S . pop ( ) ;
}
}

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Colas

▶ Es un contenedor que almacena un conjunto de elementos,


siendo una memoria tipo FIFO (First-In First-Out)

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Colas

▶ Es un contenedor que almacena un conjunto de elementos,


siendo una memoria tipo FIFO (First-In First-Out)
▶ Solo permite acceso al primer elemento agregado

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Colas

▶ Es un contenedor que almacena un conjunto de elementos,


siendo una memoria tipo FIFO (First-In First-Out)
▶ Solo permite acceso al primer elemento agregado
▶ Se puede pensar como una cola del banco, donde cada usuario
que llega tiene que esperar que los que llegaron antes son
atentidos primero salir de la cola

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Colas

#i n c l u d e <queue>
#i n c l u d e <i o s t r e a m >

u s i n g namespace s t d ;

i n t main ( ) {
queue<i n t > Q;
Q. p ush ( 5 ) ;
Q. p ush ( 2 ) ;
Q. p ush ( 9 ) ;
w h i l e ( ! Q. empty ( ) ) {
c o u t << Q. f r o n t ( ) << e n d l ;
Q. pop ( ) ;
}
}

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Colas de prioridad

▶ Es un contenedor que almacena un conjunto de elementos


cada uno con cierta prioridad, siendo una memoria tipo FIFO
(First-In First-Out)

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Colas de prioridad

▶ Es un contenedor que almacena un conjunto de elementos


cada uno con cierta prioridad, siendo una memoria tipo FIFO
(First-In First-Out)
▶ Solo permite acceso al elemento con mayor prioridad

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Colas de prioridad

▶ Es un contenedor que almacena un conjunto de elementos


cada uno con cierta prioridad, siendo una memoria tipo FIFO
(First-In First-Out)
▶ Solo permite acceso al elemento con mayor prioridad
▶ Se puede pensar como una cola del banco con diferentes tipos
de usuarios (clientes regulares, clientes vip, no clientes, ec),
donde cada usuario es atendido según su prioridad

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Colas de prioridad

#i n c l u d e <queue>
#i n c l u d e <i o s t r e a m >

u s i n g namespace s t d ;

i n t main ( ) {
p r i o r i t y q u e u e <i n t > Q; // l a p r i o r i d a d e s t a d e f i n i d a p o r e l mism
Q. p ush ( 6 ) ;
Q. p ush ( 2 ) ;
Q. p ush ( 9 ) ;
w h i l e ( ! Q. empty ( ) ) {
c o u t << Q. t o p ( ) << e n d l ;
Q. pop ( ) ;
}
}

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Sets

▶ Sets o conjuntos representan un conjunto de elementos sin


repetición

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Sets

▶ Sets o conjuntos representan un conjunto de elementos sin


repetición
▶ Adicionalmente, los sets preservan el orden de los elementos

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Sets

▶ Sets o conjuntos representan un conjunto de elementos sin


repetición
▶ Adicionalmente, los sets preservan el orden de los elementos
▶ Mantener el orden implica más esfuerzo computacional, por
tanto se pierde un poco de eficiencia

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Sets

▶ Sets o conjuntos representan un conjunto de elementos sin


repetición
▶ Adicionalmente, los sets preservan el orden de los elementos
▶ Mantener el orden implica más esfuerzo computacional, por
tanto se pierde un poco de eficiencia
▶ Si no se desea mantener el orden y solo se requiere unicidad
de los elementos se puede usar unordered set

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Sets

#i n c l u d e <s e t >
#i n c l u d e <i o s t r e a m >

u s i n g namespace s t d ;

i n t main ( ) {
s e t <i n t > S ;
S. insert (7);
S. insert (3);
S. insert (7);
f o r ( auto i t : S ){
c o u t << i t << e n d l ;
}
}

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Listas enlazadas

▶ Las listas proveen acceso solo al primer elemento y al último,


se debe iterar para acceder al resto

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Listas enlazadas

▶ Las listas proveen acceso solo al primer elemento y al último,


se debe iterar para acceder al resto
▶ Es decir, a diferencia de los vectores, no provee acceso
aleatorio (Random Access)

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Listas enlazadas

▶ Las listas proveen acceso solo al primer elemento y al último,


se debe iterar para acceder al resto
▶ Es decir, a diferencia de los vectores, no provee acceso
aleatorio (Random Access)
▶ Para acceder a los elementos hay que iterar la lista

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Listas enlazadas

#i n c l u d e < l i s t >
#i n c l u d e <i o s t r e a m >

u s i n g namespace s t d ;

i n t main ( ) {
l i s t <i n t > L ;
auto i t = L . b e g i n ( ) ;
L. insert ( it , 4);
L. insert ( it , 2);
L. insert ( it , 9);
f o r ( auto i t r : L ){
c o u t << i t r << e n d l ;
}
}

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Listas enlazadas vs vectores

▶ Los vectores son almacenados en espacios de memoria


contigua, las listas no

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Listas enlazadas vs vectores

▶ Los vectores son almacenados en espacios de memoria


contigua, las listas no
▶ Por ello, la inserción en una posición cualquiera es lenta para
un vector, pero rápida para una lista

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Listas enlazadas vs vectores

▶ Los vectores son almacenados en espacios de memoria


contigua, las listas no
▶ Por ello, la inserción en una posición cualquiera es lenta para
un vector, pero rápida para una lista
▶ Análogamente, la remoción en una posición cualquiera es
lenta para un vector, pero rápida para una lista

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Listas enlazadas vs vectores

▶ Los vectores son almacenados en espacios de memoria


contigua, las listas no
▶ Por ello, la inserción en una posición cualquiera es lenta para
un vector, pero rápida para una lista
▶ Análogamente, la remoción en una posición cualquiera es
lenta para un vector, pero rápida para una lista
▶ El uso de uno u otro depende de lo que se necesite

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Hash tables

▶ También llamados diccionarios o maps, son contenedores que


asocian dos valores

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Hash tables

▶ También llamados diccionarios o maps, son contenedores que


asocian dos valores
▶ Se pueden pensar como una generalización de los arreglos

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Hash tables

▶ También llamados diccionarios o maps, son contenedores que


asocian dos valores
▶ Se pueden pensar como una generalización de los arreglos
▶ En un arreglo, cada elemento tiene un ı́ndice que es un
número entero

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Hash tables

▶ También llamados diccionarios o maps, son contenedores que


asocian dos valores
▶ Se pueden pensar como una generalización de los arreglos
▶ En un arreglo, cada elemento tiene un ı́ndice que es un
número entero
▶ En un map, cada elemento tiene un ı́ndice que puede ser
cualquier tipo de dato

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Hash tables

▶ También llamados diccionarios o maps, son contenedores que


asocian dos valores
▶ Se pueden pensar como una generalización de los arreglos
▶ En un arreglo, cada elemento tiene un ı́ndice que es un
número entero
▶ En un map, cada elemento tiene un ı́ndice que puede ser
cualquier tipo de dato
▶ Se puede pensar como una agenda telefónica, en la que se
indexa (o busca) por nombres y apellidos y no por ı́ndices
enteros

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Hash tables

▶ También llamados diccionarios o maps, son contenedores que


asocian dos valores
▶ Se pueden pensar como una generalización de los arreglos
▶ En un arreglo, cada elemento tiene un ı́ndice que es un
número entero
▶ En un map, cada elemento tiene un ı́ndice que puede ser
cualquier tipo de dato
▶ Se puede pensar como una agenda telefónica, en la que se
indexa (o busca) por nombres y apellidos y no por ı́ndices
enteros

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Hash tables

#i n c l u d e <map>
#i n c l u d e <s t r i n g >
#i n c l u d e <i o s t r e a m >

u s i n g namespace s t d ;

i n t main ( ) {
map<s t r i n g , i n t > M;
M[ ” uno ” ] = 1 ;
M[ ” d o s ” ] = 2 ;
M[ ” d i e z ” ] = 1 0 ;
f o r ( auto i t : M ){
c o u t << i t . f i r s t << ” ” << i t . s e c o n d << e n d l ;
}
}

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Hash tables

▶ De manera análoga a los sets, los maps preservan el orden de


los elementos en base al ı́ndice

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Hash tables

▶ De manera análoga a los sets, los maps preservan el orden de


los elementos en base al ı́ndice
▶ Mantener el orden implica más esfuerzo computacional, por
tanto se pierde un poco de eficiencia

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Hash tables

▶ De manera análoga a los sets, los maps preservan el orden de


los elementos en base al ı́ndice
▶ Mantener el orden implica más esfuerzo computacional, por
tanto se pierde un poco de eficiencia
▶ Si no se desea mantener el orden se puede usar
unordered map

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Elementales

Documentación adicional

▶ Documentación oficial:
https://en.cppreference.com/w/cpp/container
▶ Geek for geeks:
https://www.geeksforgeeks.org/containers-cpp-stl/
▶ Curso de geek for geeks:
https://www.geeksforgeeks.org/courses/cpp-programming-
basic-to-advanced

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Avanzadas

Contenido

Estructuras de Datos
Estructuras de Datos Elementales
Estructuras de Datos Avanzadas

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Avanzadas

Estructuras de Datos Avanzadas

▶ Para efectos de este curso, entendemos como estructuras de


datos avanzadas a aquellas que no son implemendatas por la
librerı́a estandar de C++ (STL), sino que deben ser
implementadas

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Avanzadas

Estructuras de Datos Avanzadas

▶ Para efectos de este curso, entendemos como estructuras de


datos avanzadas a aquellas que no son implemendatas por la
librerı́a estandar de C++ (STL), sino que deben ser
implementadas
▶ Al implementar una estructura de datos debemos pensar en
sus diversas operaciones: inicialización, inserción, remoción,
búsqueda, etc. Las operaciones que soporte cada estructura
de datos depende de su diseño

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Avanzadas

Estructuras de Datos Avanzadas

▶ Para efectos de este curso, entendemos como estructuras de


datos avanzadas a aquellas que no son implemendatas por la
librerı́a estandar de C++ (STL), sino que deben ser
implementadas
▶ Al implementar una estructura de datos debemos pensar en
sus diversas operaciones: inicialización, inserción, remoción,
búsqueda, etc. Las operaciones que soporte cada estructura
de datos depende de su diseño
▶ Para tener una estructura de datos eficiente, sus operaciones
deben ser eficientes

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Avanzadas

Estructuras de Datos Avanzadas

▶ Una situación usual es tener alguna operación


computacionalmente costosa (lenta), pero el resto de
operaciones eficientes.

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Avanzadas

Estructuras de Datos Avanzadas

▶ Una situación usual es tener alguna operación


computacionalmente costosa (lenta), pero el resto de
operaciones eficientes.
▶ Si la operación costosa es utilizada pocas veces y las
operaciones eficientes muchas veces, en general se tendrá una
buena base para un algoritmo

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Avanzadas

Árboles
▶ Es una estructura de datos jerárquica, conformado por varios
nodos

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Avanzadas

Árboles
▶ Es una estructura de datos jerárquica, conformado por varios
nodos
▶ Cada nodo tiene un nodo padre y guarda un valor

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Avanzadas

Árboles
▶ Es una estructura de datos jerárquica, conformado por varios
nodos
▶ Cada nodo tiene un nodo padre y guarda un valor
▶ El nodo raı́z es aquel que no tiene ningún padre.

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Avanzadas

Árboles
▶ Es una estructura de datos jerárquica, conformado por varios
nodos
▶ Cada nodo tiene un nodo padre y guarda un valor
▶ El nodo raı́z es aquel que no tiene ningún padre.
▶ Usualmente se tiene solo una referencia al nodo padre y se
puede explorar el árbol a partir de este

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Avanzadas

Árboles
▶ Es una estructura de datos jerárquica, conformado por varios
nodos
▶ Cada nodo tiene un nodo padre y guarda un valor
▶ El nodo raı́z es aquel que no tiene ningún padre.
▶ Usualmente se tiene solo una referencia al nodo padre y se
puede explorar el árbol a partir de este
▶ Existen varias formas de implementar un árbol, cada una con
sus ventajas y desventajas, tanto en términos de memoria
como de tiempo

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Avanzadas

Árboles
▶ Es una estructura de datos jerárquica, conformado por varios
nodos
▶ Cada nodo tiene un nodo padre y guarda un valor
▶ El nodo raı́z es aquel que no tiene ningún padre.
▶ Usualmente se tiene solo una referencia al nodo padre y se
puede explorar el árbol a partir de este
▶ Existen varias formas de implementar un árbol, cada una con
sus ventajas y desventajas, tanto en términos de memoria
como de tiempo
▶ Se conoce como altura del árbol al número de niveles que
tiene el árbol

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Avanzadas

Árboles

2 7

1 6 5 8 3

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Avanzadas

Árboles
#i n c l u d e <c s t d l i b >

typedef s t r u c t tnode {
s t r u c t tnode * parent ;
i n t data ;
} node ;

node * NewNode ( i n t d , node * p a r e n t ) {


node t ;
t . data = d ;
t . parent = parent ;
r e t u r n &t ;
}

i n t main ( ) {
node * r o o t = NewNode ( 1 , NULL ) ;
node * l e f t = NewNode ( 2 , r o o t ) ;
NewNode ( 1 , left );
NewNode ( 6 , left );

node * r i g h t = NewNode ( 7 , r o o t ) ;
MSc Edson NewNode (5
Ticona Zegarra, right ); Campamento de Programación
Algoritmos
NewNode ( 8 , r i g h t ) ;
Estructuras de Datos

Estructuras de Datos Avanzadas

Árboles
#i n c l u d e <c s t d l i b >
#i n c l u d e <c s t d i o >

u s i n g namespace s t d ;

typedef s t r u c t tnode {
s t r u c t tnode * l e a f s [ 5 0 ] ;
i n t n l e a f s ; // c a n t i d a d de h i j o s
i n t data ;
} node ;

node * NewNode ( i n t d ) {
node * l e a f = ( node * ) m a l l o c ( s i z e o f ( node ) ) ;
l e a f =>d a t a = d ;
l e a f => n l e a f s = 0 ;

return l e a f ;
}

v o i d AppendNode ( node * t r e e , node * l e a f ) {


t r e e => l e a f s [ t r e e => n l e a f s ] = l e a f ;
r e e =Zegarra
MSc Edson tTicona > n l e a f s ++; Campamento de Programación
}
Algoritmos
Estructuras de Datos

Estructuras de Datos Avanzadas

Árboles binarios

▶ Son árboles en los que cada nodo tiene a lo mucho dos hijos

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Avanzadas

Árboles binarios

▶ Son árboles en los que cada nodo tiene a lo mucho dos hijos
▶ Se dice que un árbol está completo cuando todos los niveles
están llenos, excepto el último

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Avanzadas

Árboles binarios

▶ Son árboles en los que cada nodo tiene a lo mucho dos hijos
▶ Se dice que un árbol está completo cuando todos los niveles
están llenos, excepto el último
▶ Cuando el árbol está completo se cumple la siguiente relación
entre la altura y el número de nodos del árbol h = ⌈log n⌉

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Avanzadas

Árboles binarios

▶ Son árboles en los que cada nodo tiene a lo mucho dos hijos
▶ Se dice que un árbol está completo cuando todos los niveles
están llenos, excepto el último
▶ Cuando el árbol está completo se cumple la siguiente relación
entre la altura y el número de nodos del árbol h = ⌈log n⌉
▶ Árboles completos pueden ser fácilmente representados con un
arreglo; si el árbol no está completo es mejor usar un map

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Avanzadas

Árboles binarios

2 7

1 6 5 8

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Avanzadas

Árboles binarios
#i n c l u d e <v e c t o r >

u s i n g namespace s t d ;

int ParentIndex ( int n) {


r e t u r n ( n = 1) /2 ;
}

i n t main ( ) {
v e c t o r <i n t > T ;

T. push back (1);


T. push back (2);
T. push back (7);
T. push back (1);
T. push back (6);
T. push back (5);
T. push back (8);
}

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Avanzadas

Árboles binarios
#i n c l u d e <map>

u s i n g namespace s t d ;

int ParentIndex ( int n) {


r e t u r n ( n = 1) /2 ;
}

i n t main ( ) {
map<i n t , i n t > T ;

T[0] = 1;
T[1] = 1;
T[2] = 7;
T[3] = 1;
T[4] = 6;
T[5] = 5;
T[6] = 8;
}

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Avanzadas

Árboles de búsqueda binarios

▶ Son árboles binarios tal que para cualquier nodo, el hijo de la


izquierda es menor que el nodo padre, y el hijo de la derecha
es mayor que el nodo padre

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Avanzadas

Árboles de búsqueda binarios

▶ Son árboles binarios tal que para cualquier nodo, el hijo de la


izquierda es menor que el nodo padre, y el hijo de la derecha
es mayor que el nodo padre
▶ Se puede generalizar la noción al integrar una relación de
orden entre el nodo padre y los nodos hijos

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Avanzadas

Árboles de búsqueda binarios

2 7

1 4 6 8

MSc Edson Ticona Zegarra Campamento de Programación


Algoritmos
Estructuras de Datos

Estructuras de Datos Avanzadas

Árboles de búsqueda binarios


#i n c l u d e <c s t d l i b >
#i n c l u d e <c s t d i o >

typedef struct tbst {


struct tbst * l e f t ;
struct tbst * right ;
i n t data ;
} bst ;

b s t * NewNode ( i n t n ) {
bs t * t = ( bst *) malloc ( s i z e o f ( b st ) ) ;
t =>d a t a = n ;
t => l e f t = NULL ;
t =>r i g h t = NULL ;
return t ;
}

// a g r e g a r e c u r s i v a m e n t e e l nodo c h i l d a l nodo r o o t
v o i d AppendNode ( b s t * r o o t , b s t * c h i l d ) {
i f ( c h i l d =>d a t a < r o o t =>d a t a ) {
i f ( r o o t => l e f t != NULL ) {
e t u r n AppendNode ( r o o t =>l e f t , c h i l d ) ;
MSc Edson Ticona rZegarra Campamento de Programación
Algoritmos
} else {

También podría gustarte