Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Algoritmos
Estructuras de Datos
Campamento de Programación
Contenido
Estructuras de Datos
Estructuras de Datos Elementales
Estructuras de Datos Avanzadas
Contenido
Estructuras de Datos
Estructuras de Datos Elementales
Estructuras de Datos Avanzadas
Estructuras de Datos
▶ Una estructura de datos es una forma de organizar data para
facilitar su posterior uso
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
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)
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
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.
Contenido
Estructuras de Datos
Estructuras de Datos Elementales
Estructuras de Datos Avanzadas
Vectores
Vectores
Vectores
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 ;
}
}
Pilas
Pilas
Pilas
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 ( ) ;
}
}
Colas
Colas
Colas
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 ( ) ;
}
}
Colas de prioridad
Colas de prioridad
Colas de prioridad
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 ( ) ;
}
}
Sets
Sets
Sets
Sets
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 ;
}
}
Listas enlazadas
Listas enlazadas
Listas enlazadas
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 ;
}
}
Hash tables
Hash tables
Hash tables
Hash tables
Hash tables
Hash tables
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 ;
}
}
Hash tables
Hash tables
Hash tables
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
Contenido
Estructuras de Datos
Estructuras de Datos Elementales
Estructuras de Datos Avanzadas
Árboles
▶ Es una estructura de datos jerárquica, conformado por varios
nodos
Árboles
▶ Es una estructura de datos jerárquica, conformado por varios
nodos
▶ Cada nodo tiene un nodo padre y guarda un valor
Á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.
Á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
Á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
Á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
Árboles
2 7
1 6 5 8 3
Á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 ;
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
Á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 ;
}
Árboles binarios
▶ Son árboles en los que cada nodo tiene a lo mucho dos hijos
Á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
Á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 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
Árboles binarios
2 7
1 6 5 8
Árboles binarios
#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 > T ;
Árboles binarios
#i n c l u d e <map>
u s i n g namespace s t d ;
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;
}
2 7
1 4 6 8
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 {