UNIDAD CURRICULAR: ALGORITMICA Y PROGRAMACIÓN … · 2015-02-18 · Arbol binario de búsqueda: es...
Transcript of UNIDAD CURRICULAR: ALGORITMICA Y PROGRAMACIÓN … · 2015-02-18 · Arbol binario de búsqueda: es...
Programa Nacional de Formación de Informática Material Educativo Computarizado de Algorítmica y Programación
Elaborado por: Ing. Katiusca Briceño de Rojo. PNF Informática. Algorítmica y Programación.
UNIDAD CURRICULAR: ALGORITMICA Y PROGRAMACIÓN
UNIDAD XIV. INTRODUCCIÓN A LAS ESTRUCTURAS DE
DATOS DINÁMICAS AVANZADAS:
PILAS, COLAS Y ÁRBOLES
CONTENIDO:
Pilas
Colas
Árboles
Ejercicios Resueltos
Referencias Bibliográficas
Programa Nacional de Formación de Informática Material Educativo Computarizado de Algorítmica y Programación
Elaborado por: Ing. Katiusca Briceño de Rojo. PNF Informática. Algorítmica y Programación.
UNIDAD XIV
INTRODUCCIÓN A LAS ESTRUCTURAS DE DATOS DINÁMICAS
AVANZADAS: PILAS, COLAS Y ÁRBOLES
PILAS
Una pila (stack en inglés) es una estructura de datos en la que el modo
de acceso a sus elementos es de tipo LIFO (del inglés Last In First Out, último
en entrar, primero en salir) que permite almacenar y recuperar datos, es decir,
la inserción y extracción de elementos de la pila siguen el principio LIFO ya que
el último elemento que se agrega a la pila es el primero en salir de la misma.
Tanto la inserción como la eliminación de los elementos de una pila se realiza
solo por un extremo que se denomina tope, es decir, que el último elemento en
entrar, es el único accesible en cada momento.
Representación Gráfica de una Pila
.
En el gráfico se observa que el ultimo elemento que se insertó en la pila
(elemento n) está ubicado en el tope de la misma, si se desea sacar un
elemento, saldría este mismo.
elemento 1
elemento 2
: : .
elemento n
Programa Nacional de Formación de Informática Material Educativo Computarizado de Algorítmica y Programación
Elaborado por: Ing. Katiusca Briceño de Rojo. PNF Informática. Algorítmica y Programación.
Operaciones Básicas de una pila
Insertar en la pila (apilar o push): agrega un elemento a la pila, este
nuevo elemento de la pila estará en el tope de la misma.
Retirar de la pila (desapilar, pop): retira o elimina el último elemento
de la pila, es decir, elimina el elemento que está en el tope.
Ejemplo:
Por analogía con objetos cotidianos, una operación apilar equivaldría
a colocar un plato sobre una pila de platos, y una operación desapilar a
quitar el plato que está encima.
Aplicaciones de las Pilas
Las pilas se utilizan en muchas aplicaciones que utilizamos con frecuencia:
• Gestión de ventanas en Windows o Linux (cuando cerramos una
ventana siempre recuperamos la que teníamos detrás).
• Evaluación general de cualquier expresión matemática para evitar tener
que calcular el número de variables temporales que hacen falta.
Programa Nacional de Formación de Informática Material Educativo Computarizado de Algorítmica y Programación
Elaborado por: Ing. Katiusca Briceño de Rojo. PNF Informática. Algorítmica y Programación.
• Navegador Web
– Se almacenan los sitios previamente visitados
– Cuando el usuario quiere regresar (presiona el botón de retroceso
o regresar), simplemente se extrae la última dirección (pop) de la
pila de sitios visitados.
• Editores de texto u otras herramientas
– Los cambios efectuados se almacenan en una pila
– El Usuario puede deshacer los cambios mediante la operación
“undo” o deshacer, la cual extrae el estado del texto o cualquier
elemento, antes del último cambio realizado.
COLAS
Una cola es una estructura de datos en la que el modo de acceso a sus
elementos es de tipo FIFO (del inglés First Input First Output, primero en entrar,
primero en salir). Permite almacenar y recuperar datos, es decir, la inserción y
extracción de elementos de la cola siguiendo el principio FIFO. Cuando se
agrega un elemento a la cola, éste se agrega al final. Cuando se elimina un
elemento de la cola, se elimina el que está al frente de la cola, es decir, el
primero.
Representación Gráfica
Frente
↓
Final
↓
Elemento 1
Elemento 2
Elemento 3
……....................
Elemento n-1
Elemento n
Operaciones Básicas
Insertar en la cola (encolar): agrega un elemento a la cola, este nuevo
elemento de la cola estará en el extremo final de la misma.
Retirar de la cola (desencolar): retira o elimina el primer elemento de
la cola, es decir, elimina el elemento que está en el frente.
Programa Nacional de Formación de Informática Material Educativo Computarizado de Algorítmica y Programación
Elaborado por: Ing. Katiusca Briceño de Rojo. PNF Informática. Algorítmica y Programación.
Ejemplo de una cola:
Frente
↓
Final
↓
26
20
17
……....................
14
18
Si insertamos el elemento 15 a la cola, éste sería el elemento final y
quedaría de la siguiente manera:
26
20
17
……....................
14
18
15
Si eliminamos un elemento de la cola, se eliminaría el primer
elemento (frente) que corresponde al 26, por lo tanto ahora el frente
sería el elemento 20:
20
17
……....................
14
18
15
Aplicaciones de las Colas
Las colas se utilizan en muchas aplicaciones que utilizamos con frecuencia.
Impresión de documentos: Cuando imprimimos varios documentos,
éstos se imprimen en el orden en que lo mandamos a imprimir.
Los números de tickets para atender público.
La simulación de cualquier cola de elementos.
Programa Nacional de Formación de Informática Material Educativo Computarizado de Algorítmica y Programación
Elaborado por: Ing. Katiusca Briceño de Rojo. PNF Informática. Algorítmica y Programación.
Un ejemplo práctico de la vida cotidiana de colas, son las colas que realizamos
en los bancos o en cualquier lugar. La cola para subir al autobús está
compuesta de elementos (personas), que dispone de dos extremos comienzo y
fin. Por el comienzo se extraerá un elemento cuando haya comprado el billete
para su viaje, y si llega una nueva persona con intención de usar el autobús,
tendrá que colocarse al final y esperar que todos los elementos situados antes
que él abandonen la cola.
ARBOLES
Un árbol es una estructura de datos que consta de un conjunto finito de
elementos, denominados nodos y un conjunto finito de líneas dirigidas
denominadas ramas que conectan los nodos.
Representación gráfica
Programa Nacional de Formación de Informática Material Educativo Computarizado de Algorítmica y Programación
Elaborado por: Ing. Katiusca Briceño de Rojo. PNF Informática. Algorítmica y Programación.
Como se puede observar, los círculos representan los nodos y dentro de
ellos se encuentra la información o datos que guardan. Las líneas representan
las ramas que unen los nodos.
Estructura de un árbol
Si un árbol no está vacío, pueden distinguirse varias partes: la raíz, nodos
hijos, nodos padres, nodos hojas, ramas.
Raíz: es el primer nodo del árbol.
Nodos hijos: son los sucesores de otros nodos.
Nodos padre: son nodos que tienen nodos sucesores.
Nodos hojas: son los nodos terminales, es decir, los que no tienen nodos
hijos.
Ramas: corresponde a un conjunto de nodos conectados.
A continuación se presenta un ejemplo donde se distinguen estas partes:
Terminologías sobre árboles
Además de cada elemento que conforma un árbol, existen otros términos
utilizados en la descripción de sus atributos.
Programa Nacional de Formación de Informática Material Educativo Computarizado de Algorítmica y Programación
Elaborado por: Ing. Katiusca Briceño de Rojo. PNF Informática. Algorítmica y Programación.
Nivel: el nivel de un nodo es su distancia hasta la raíz . Por ejemplo, la raíz
tiene nivel 0, los hijos de la raíz están en el nivel 1, y los hijos de éstos están en
el nivel 2, y así sucesivamente. Tomando en cuenta el ejemplo anterior, se
puede decir que el nodo A tiene nivel 0, los nodos B,C,D están en el nivel 1 y
los nodos E,F,G,H,I están en el nivel 2.
Nodos hermanos: son nodos que están en el mismo nivel. En el ejemplo
anterior los nodos hermanos son: B,C,D y E,F,G,H,I.
Camino: Es una secuencia de nodos, en los que cada nodo es adyacente al
siguiente. Para llegar a cada nodo del árbol se sigue un único camino que
comienza en el raíz. Siguiendo el ejemplo anterior los caminos posibles son:
a) A
b) A,B
c) A,B,E
d) A,B,F
e) A,C
f) A,C,G
g) A,D
h) A,D,H
i) A,D,I
Altura o profundidad: es el nivel de la hoja del camino mas largo desde la raíz
mas uno. La altura de un árbol vacío es 0. En el ejemplo anterior el árbol
contiene tres niveles: 0,1 y 2; y su altura es 3.
Programa Nacional de Formación de Informática Material Educativo Computarizado de Algorítmica y Programación
Elaborado por: Ing. Katiusca Briceño de Rojo. PNF Informática. Algorítmica y Programación.
ARBOL BINARIO
Un árbol binario es un árbol en el que sus nodos tienen un máximo de dos
hijos.
Ejemplo:
Programa Nacional de Formación de Informática Material Educativo Computarizado de Algorítmica y Programación
Elaborado por: Ing. Katiusca Briceño de Rojo. PNF Informática. Algorítmica y Programación.
Los árboles binarios tiene varias utilidades tales como, evaluación de
expresiones, operaciones de búsqueda y ordenamiento. Para estas dos
últimas actividades se utiliza un árbol denominado árbol binario de búsqueda.
Arbol binario de búsqueda: es aquel que dado un nodo, todos los elementos
del lado izquierdo del nodo son menores que los datos de dicho nodo, y todos
los elementos del lado derecho del nodo son mayores que los datos de dicho
nodo.
Ejemplo:
Construcción de un árbol binario de búsqueda
El primer nodo representa el nodo raíz. Si el nodo siguiente es menor que la
raíz, debe ubicarse a la izquierda de ésta, de lo contrario se ubica a la derecha.
Para insertar el tercer nodo, se realiza la misma comparación, comenzando
desde el nodo raíz. Si el nodo es menor que el nodo raíz se sigue comparando
con los elementos que están a la izquierda de éste, de lo contrario se compara
Programa Nacional de Formación de Informática Material Educativo Computarizado de Algorítmica y Programación
Elaborado por: Ing. Katiusca Briceño de Rojo. PNF Informática. Algorítmica y Programación.
con los nodos de la derecha. Cabe recordar que cada nodo puede tener
máximo solo dos hijos ya que es un árbol binario.
Ejemplo:
Supongamos que se desea construir un árbol con los siguientes valores:
54,35,20,80,40,66,78,97,38,55,50.
Se comienza por el nodo raíz, que en este caso es 54.
El siguiente elemento es 35, como es menor que 54 se coloca del lado
izquierdo de la raíz.
A continuación, se ha de insertar el 20 que es menor que 54 y 35, por
consiguiente irá a la izquierda y debajo de 35
El siguiente elemento corresponde al 80. Ya que es mayor que 54, se debe
ubicar del lado derecho de la raíz.
Programa Nacional de Formación de Informática Material Educativo Computarizado de Algorítmica y Programación
Elaborado por: Ing. Katiusca Briceño de Rojo. PNF Informática. Algorítmica y Programación.
Sigue el número 40, menor que 54 pero mayor a 35, por lo tanto, debe ir a la
derecha de 35.
El siguiente número es 66, lo que implica que va del lado izquierdo de 66, ya
que es mayor a 54 y menor a 80.
El número 78 es mayor a 54, menor a 80 y mayor a 66, por consiguiente su
ubicación corresponde al lado derecho de 66.
Programa Nacional de Formación de Informática Material Educativo Computarizado de Algorítmica y Programación
Elaborado por: Ing. Katiusca Briceño de Rojo. PNF Informática. Algorítmica y Programación.
Con respecto al 97, dado que es mayor que 54 y 80, debe ir del lado derecho
del 80.
Siguiendo el mismo criterio se insertan los elementos restantes: 38,55 y 50,
quedando de la siguiente manera:
Programa Nacional de Formación de Informática Material Educativo Computarizado de Algorítmica y Programación
Elaborado por: Ing. Katiusca Briceño de Rojo. PNF Informática. Algorítmica y Programación.
Programa Nacional de Formación de Informática Material Educativo Computarizado de Algorítmica y Programación
Elaborado por: Ing. Katiusca Briceño de Rojo. PNF Informática. Algorítmica y Programación.
Recorridos de un árbol
Para acceder a un elemento almacenado en un árbol, se necesita
recorrer el árbol o visitar los nodos del mismo sólo una vez. Existen varios
métodos de recorrido de árbol:
Recorrido preorden
Recorrido en orden (inorden)
Recorrido postorden
Recorrido preorden: consiste en recorrer el árbol en el siguiente orden: raíz,
subárbol izquierdo, subárbol derecho.
Ejemplo: Dado el siguiente árbol, hagamos el recorrido preorden
Programa Nacional de Formación de Informática Material Educativo Computarizado de Algorítmica y Programación
Elaborado por: Ing. Katiusca Briceño de Rojo. PNF Informática. Algorítmica y Programación.
Siguiendo el orden preorden (raíz, subárbol izquierdo, subárbol derecho), se
visita primero el nodo 54, el nodo 35, luego 20 y por último 40. A continuación
se visita la parte derecha de la raíz, por lo tanto se visita primero 80, luego 66
y finalmente 97. En consecuencia, el recorrido preorden del árbol es:
54,35,20,40,80,66,97.
Recorrido en orden: consiste en visitar el árbol en el siguiente orden:
subárbol izquierdo, raíz, subárbol derecho.
Ejemplo: Tomando en cuenta el árbol anterior:
Programa Nacional de Formación de Informática Material Educativo Computarizado de Algorítmica y Programación
Elaborado por: Ing. Katiusca Briceño de Rojo. PNF Informática. Algorítmica y Programación.
Para realizar el recorrido en orden (izquierda, raíz, derecha), se comienza por
el nodo 20, a continuación el 35 y después el 40. Después corresponde visitar
el nodo raíz 54 ya que todo el subárbol izquierdo ya está recorrido. Del lado
derecho se comienza por el nodo 66, luego el 80 y finalmente el 97. De esta
manera, el recorrido en orden es: 20,35,40,54, 66,80,97.
Recorrido postorden: consiste en procesar el árbol en el siguiente orden:
subárbol izquierdo, subárbol derecho, raíz.
Ejemplo: Siguiendo con el mismo árbol:
Para el orden postorden (izquierda, derecha, raíz), corresponde visitar en
primer lugar el 20, luego el 40 y después el 35. A continuación se visita el
subárbol derecho, comenzando por el 66 luego el 97 y después el 80.
Finalmente se procesa el nodo raíz 54. Por consiguiente el recorrido postorden
es: 20,40,35,66,97,80,54.
Programa Nacional de Formación de Informática Material Educativo Computarizado de Algorítmica y Programación
Elaborado por: Ing. Katiusca Briceño de Rojo. PNF Informática. Algorítmica y Programación.
EJERCICIOS RESUELTOS
A continuación se presenta un miniproyecto desarrollado en C++ que
contiene las operaciones básicas de una pila utilizando un arreglo.
El programa tiene las siguientes opciones:
1.- Incluir un elemento a la pila 2.- Mostrar los elementos de la pila 3.- Eliminar un elemento de la pila #include <iostream> using namespace std; #define N 10 int pila[N],tope; int opcion,i; int menu() { cout <<"MENU DE PILAS" <<endl; cout << "1.- Incluir un elemento a la pila"<<endl; cout <<"2.- Mostrar los elementos de la pila"<<endl; cout <<"3.- Eliminar un elemento de la pila"<<endl; cout <<"4.- Salir"<<endl; cout <<"Ingrese la opcion (1/2/3/4): "<<endl; cin >>opcion; return opcion; } void incluir_elemento_en_la_pila() { if (tope==N-1) {cout<<"la pila está llena"<<endl; } else {tope++; cout <<"Ingrese el valor a incluir en la pila "<<endl; cin >> pila[tope]; } } void mostrar_pila() { for (i=0;i<=tope;i++) { cout <<" El valor de la posicion " <<i <<" es: " <<endl; cout <<pila[i]; } } void eliminar_elemento_de_la_pila() {if (tope==-1) {cout <<"la pila está vacía"<<endl;}
Programa Nacional de Formación de Informática Material Educativo Computarizado de Algorítmica y Programación
Elaborado por: Ing. Katiusca Briceño de Rojo. PNF Informática. Algorítmica y Programación.
else {cout <<"El elemento a eliminar de la pila es: "<<pila[tope]; tope--; } } main() { opcion=0; tope=-1; while (opcion!=4) { opcion= menu(); switch (opcion) { case 1: incluir_elemento_en_la_pila(); break; case 2: mostrar_pila(); break; case 3: eliminar_elemento_de_la_pila(); break; } } }
A continuación se presenta un miniproyecto desarrollado en C++ que
contiene las operaciones básicas de una cola utilizando un arreglo.
El programa tiene las siguientes opciones:
1.- Incluir un elemento a la cola 2.- Mostrar los elementos de la cola 3.- Eliminar un elemento de la cola #include <iostream> using namespace std; #define N 10 int cola[N],final; int opcion,i; int menu() { cout <<"MENU DE COLAS" <<endl; cout << "1.- Incluir un elemento a la cola"<<endl; cout <<"2.- Mostrar los elementos de la cola"<<endl; cout <<"3.- Eliminar un elemento de la cola"<<endl; cout <<"4.- Salir"<<endl; cout <<"Ingrese la opcion (1/2/3/4): "<<endl; cin >>opcion; return opcion; } void incluir_elemento_en_la_cola()
Programa Nacional de Formación de Informática Material Educativo Computarizado de Algorítmica y Programación
Elaborado por: Ing. Katiusca Briceño de Rojo. PNF Informática. Algorítmica y Programación.
{ if (final==N-1) {cout<<"la cola está llena"<<endl; } else {final++; cout <<"Ingrese el valor a incluir en la cola "<<endl; cin >> cola[final]; } } void mostrar_cola() { for (i=0;i<=final;i++) { cout <<" El valor de la cola en la posicion " <<i <<" es: " <<endl; cout <<cola[i]; } } void eliminar_elemento_de_la_cola() {if (final==-1) {cout <<"la cola está vacía"<<endl;} else {cout <<"El elemento a eliminar de la cola es: "<<cola[0]; for(i=0;i<final;i++) {cola[i]=cola[i+1]; } final--; } } main() { opcion=0; final=-1; while (opcion!=4) { opcion= menu(); switch (opcion) { case 1: incluir_elemento_en_la_cola(); break; case 2: mostrar_cola(); break; case 3: eliminar_elemento_de_la_cola(); break; } } }
Programa Nacional de Formación de Informática Material Educativo Computarizado de Algorítmica y Programación
Elaborado por: Ing. Katiusca Briceño de Rojo. PNF Informática. Algorítmica y Programación.
REFERENCIAS BIBLIOGRÁFICAS
Bassard, G y Bratley, P. (2010). Fundamentos de algoritmia. Prentice-Hall.
Joyanes, L. (2008). Fundamentos de programación. Algoritmos , Estructuras de datos y objetos. Mc Graw Hill. Tercera edición.
Joyanes, L. y Zahonero, I. (2005). Programación en C. Metodología, algoritmos y Estructura de datos. Mc Graw Hill. Segunda Edición
Martí, N. y Ortega, Y. (2004). Estructuras de datos y Métodos Algorítmicos. Ejercicios Resueltos. Pearson Education.