Estructura de Datos - Guía
Estructura de Datos - Guía
Estructura de Datos - Guía
Estructura de Datos
Guía didáctica
5 créditos
Ciclo Carrera
3 ▪ Informática
Área Técnica
MODALIDAD ABIERTA Y A DISTANCIA
Estructura de Datos
Guía didáctica
5 créditos
Carrera Ciclo
Informática III
Autor:
Franco Olivio Guamán Bastidas
4.0, CC BY-NY-SA
Primera edición
ISBN digital - 978-9942-25-453-5
La versión digital ha sido acreditada bajo la licencia Creative Commons 4.0, CC BY-NY-SA:
Reconocimiento-No comercial-Compartir igual; la cual permite: copiar, distribuir y comunicar
públicamente la obra, mientras se reconozca la autoría original, no se utilice con fines comerciales
y se permiten obras derivadas, siempre que mantenga la misma licencia al ser divulgada. https://
creativecommons.org/licenses/by-nc-sa/4.0/deed.es
25 de febrero, 2019
2. Índice
2. Índice 4
3. Introducción 6
4. Bibliografía 8
4.1. Básica 8
4.2. Complementaria 8
PRIMER BIMESTRE
1.5. Registros 33
Autoevaluación 1 37
2.2. Conjuntos 43
Autoevaluación 2 48
3.1. Apuntadores 50
Autoevaluación 3 60
SEGUNDO BIMESTRE
4.1. Árboles 62
Autoevaluación 4 77
UNIDAD 5. GRAFOS 80
5.2. Representación 83
Autoevaluación 5 91
7. Solucionario 93
8. Referencias bibliográficas 99
Guía didáctica: Estructura de Datos PRELIMINARES
3. Introducción
“Estructura de Datos” es una asignatura con 5 créditos, forma parte del grupo de
materias troncales de la carrera de Ingeniería en Informática de la Escuela de
Ciencias de la Computación, modalidad Abierta y a Distancia de la UTPL.
algunos de los más importantes tipos de datos abstractos como las pilas, colas,
conjuntos y colas de prioridad; la tercera unidad nos introduce en el estudio
de las estructuras de datos dinámicas, para lo cual empieza con la revisión de
los tipos de datos punteros y su utilización en las listas enlazadas, así como la
implementación de algunos TDA con este tipo de estructura de datos.
Para el segundo bimestre la unidad cuatro nos lleva al estudio de las estructuras
jerárquicas como los árboles y sus diferentes variaciones, así como al estudio
de las tablas hash y la resolución de colisiones, finalmente la quinta unidad está
completamente dedicada al estudio de los grafos.
4. Bibliografía
4.1. Básica
4.2. Complementaria
Este libro presenta de forma clara los algoritmos utilizados para manipular
la información de las estructuras compuestas, particularmente de arreglos
y matrices, adicionalmente al final de cada capítulo se presentan ejercicios
para desarrollar, además de problemas resueltos.
línea telefónica, así que aproveche esta alternativa que la UTPL pone a su
disposición.
▪▪ Recuerde que usted podrá recibir valiosa ayuda por parte de su profesor
tutor para la comprensión de los diferentes temas, por lo cual la correcta
comunicación con el mismo será fundamental, es por esto que debe
familiarizarse con las diferentes formas de comunicación implementadas
para su uso, ya sea por teléfono (consultar horario de tutoría en el EVA),
email, chat, y otras herramientas tecnológicas. Recuerde además que
existe una variada información en internet, bibliotecas digitales y también la
documentación que su profesor le proporciona a través del EVA.
ICONO DESCRIPCIÓN
Se utilizará para aspectos importantes en los que se deba prestar
especial atención.
PRIMER BIMESTRE
Louise L. Hay
Como puede observar, entre estas estructuras tenemos los tipos de datos
estáticos, que son aquellos en los que el tamaño en memoria es definido antes de
la ejecución del programa y no puede ser modificado durante su ejecución.
Una variable de tipo string puede almacenar una palabra, o una frase; un
nombre o una dirección con espacios y números incluidos; su longitud puede ser
determinada indicando el máximo número de caracteres alfanuméricos que podría
contener.
Entre las operaciones que se pueden realizar sobre datos de tipo cadena
tenemos:
Actividades recomendadas
Una vez revisados los conocimientos previos, es hora de empezar con el estudio
de los arreglos unidimensionales, mismos que podrán ser utilizados en ejercicios
comunes de tratamiento de información a nivel de listas.
Actividades recomendadas
¿Cómo resultaron los ejercicios?, espero que muy bien. En el siguiente apartado
continuamos con el estudio de los arreglos.
Entre las operaciones que pueden aplicarse a arreglos tenemos: lectura, escritura,
asignación, búsqueda, inserción, eliminación, actualización y ordenación; además
de las estudiadas en el apartado anterior como: declaración entre otras.
Dado que el texto básico no cuenta con una sección dedicada a las
operaciones con arreglos, iré desarrollando resumidamente cada una
de ellas en la guía didáctica.
1.3.1. Lectura
1.3.2. Impresión
1.3.3. Asignación
Ejemplo 3. Asignación de un arreglo a otra variable de tipo arreglo; para que este
procedimiento pueda ser ejecutado, ambos arreglos deberán ser del mismo tipo,
así como la variable destino no requiere ser instanciada, solo creada.
1.3.4. Búsqueda
1.3.5. Inserción
Para ingresar un nuevo elemento sin importar si se repite o no, se debe seguir la
siguiente secuencia de pasos: verificar si existe espacio disponible, encontrar la
posición a insertar, se recorre todos los elementos una posición a la derecha para
hacer espacio e insertar el nuevo elemento.
Qué le han parecido los temas revisados hasta ahora, si les ponemos
la suficiente atención a ellos, no son difíciles de entender. Vamos a
revisar otras operaciones que podemos realizar con arreglos.
1.3.6. Eliminación
1.3.7. Ordenación
Actividades recomendadas
¿Cómo resultaron los ejercicios?, espero que muy bien. Ahora avanzaremos con
el estudio de los arreglos.
Actividades recomendadas
1.5. Registros
Debemos tener presente que el lenguaje JAVA también tiene sus propios métodos
para el ingreso y acceso a la información, por lo cual en la clase mencionada en
el extracto de código 22, se debe crear el o los respectivos constructores y los
correspondientes métodos GET y SET, como se muestra en los ejemplos.
Así mismo, debemos tener presente que al ser los registros un tipo de datos,
podemos con ellos realizar la creación de arreglos de registros como se puede
apreciar en la figura 7, cuyo comportamiento sería similar a los arreglos antes
estudiados.
Actividades recomendadas
Autoevaluación 1
3. Al decir que los arreglos deben ser homogéneos, nos referimos a que:
4. Los arreglos:
a. Filas, columnas.
b. Columnas, filas.
c. El orden es indiferente.
a. columnas = A.length;
b. columnas = A.length.length;
c. columnas = A[0].length
Charles Bukowski
En esta unidad revisaremos algunos TDA básicos como pilas y colas, conjuntos,
mapas y colas de prioridad.
2.1.1. Pilas
Una pila es una lista que permite almacenar y recuperar datos, el modo de acceso
a los elementos que la componen es conocido como estructura de tipo LIFO (Last
In First Out, o “último en entrar, primero en salir”).
Entre algunas de las aplicaciones que se suele implementar con pilas tenemos:
evaluación de expresiones en notación postfija, reconocedores sintácticos de
lenguajes independientes del contexto, implementación de recursividad.
2.1.2. Colas
Como puede usted ver, la implementación de una cola mediante arreglos resulta
un poco cara computacionalmente hablando, ya que debido a que el elemento
que sale de la cola con el procedimiento Pop, siempre deberá ser el primero que
ingresó a ella, lo cual implica que todo el resto de elementos presentes en la cola,
sin importar su número, deberán recorrer un puesto hacia la izquierda por cada
Pop realizado.
Actividades recomendadas
2.2. Conjuntos
Entre las principales operaciones que pueden ser implementadas con conjuntos
tenemos: unión, intersección, diferencia, complemento, entre otras. Así, a
continuación podrá observar breves ejemplos de cómo podría implementarse
cada una de ellas.
Como ya lo habíamos visto con anterioridad, una Cola es una estructura FIFO
en la cual los primeros elementos que fueron ingresados en la cola, serán los
primeros en ser removidos o atendidos; así como los nuevos elementos a ingresar
a la cola serán colocados al final de la misma.
Autoevaluación 2
6. ( ) Las operaciones FIFO (First In First Out), son características del
TAD Cola.
Las estructuras dinámicas son de gran utilidad para almacenar datos del mundo
real que estén en constante cambio. A diferencia de las estructuras de datos
estáticas, para las estructuras de datos dinámicas no existen limitaciones en
cuanto a asignación de memoria, ya que esta se define durante la ejecución del
programa y puede crecer o disminuir durante este proceso, están formadas por
una colección de elementos llamados nodos, que se crearán o eliminarán de
acuerdo a los requerimientos.
3.1. Apuntadores
A partir de la página 4 del REA estudiado se habla acerca de los problemas más
comunes que podemos encontrar al trabajar con punteros.
En primer lugar, usted debe considerar que todo puntero necesita ser inicializado,
pero como se muestra el documento indicado, si este proceso no se realiza de la
manera correcta, puede ocasionar que se arroje resultados incorrectos.
En segundo lugar, como puede ver en la página 5 de nuestro REA, el hacer que
un puntero declarado de un tipo específico, apunte hacia una información de otro
tipo de dato, ocasiona se arroje información que no es verdadera.
Por último, les invito a revisar el siguiente REA, el mismo que nos permitirá
establecer diferencias en el tratamiento de punteros en Java y en C++.
Actividades recomendadas
int a = 27;
*P Es igual a _______________________________
Son una colección o secuencia de elementos dispuestos uno tras otro, en las que
cada elemento se conecta con el siguiente por medio de un enlace o puntero.
Para iniciar el tema, revise por favor el apartado “La clase LinkedList”
del texto básico.
De acuerdo a lo revisado, las listas enlazadas están formadas por nodos, los
cuales se irán creando o desechándose según la conveniencia de la aplicación.
Estos nodos en sí, podríamos considerarlos como un tipo de datos compuestos,
ya que como habrá podido usted apreciar en la sección antes mencionada,
la clase ListNode, está formada por dos campos: data que es en donde se
almacenará la información y next que sería el puntero de enlace hacia el siguiente
nodo.
Cuando trabajamos con listas enlazadas debemos tener presente que debe haber
un puntero que guarde la dirección del primer elemento de la lista, ya que esta es
la puerta de entrada para localizar cualquier elemento en ella.
Los enlaces se realizan en una sola dirección, lo que quiere decir que el puntero
del nodo anterior siempre guardará la dirección del siguiente, pero no en la
dirección contraria, por lo cual el recorrido (en este caso) se realizará en una sola
dirección, “no tenemos acceso a un nodo desde su nodo sucesor”.
Como habrá podido ver, los procesos realizados mediante listas enlazadas
pueden ser mucho más óptimos que con arreglos, ya que por ejemplo si usted
realiza la inserción o eliminación de un elemento, solamente debe localizar el
lugar correspondiente y actualizar los enlaces, mas no tener que realizar ningún
otro tipo de recorridos hacia derecha o izquierda como se vio en la unidad
anterior.
Es el momento adecuado para llevar el control de sus avances, para ello les invito
a desarrollar los siguientes ejercicios.
Actividades recomendadas
a. Vagones de un tren
b. ________________________________________________
c. ________________________________________________
d. ________________________________________________
e. ________________________________________________
a. Nombre
b. Dirección
c. Edad
d. Identificación
e. Género
3.3.1. Pilas
3.3.2. Colas
¿Cómo le han parecido las estructuras dinámicas lineales? Espero no haya tenido
ningún inconveniente para su entendimiento. Y en caso de requerirlo recuerde
que siempre puede respaldarse con las indicaciones que puede solicitar al
docente tutor. Ahora vamos a finalizar este tema con unos sencillos ejercicios.
Actividades recomendadas
Autoevaluación 3
3. ( ) Durante la definición de los nodos que forman parte de las listas
enlazadas, debemos incluir por lo menos un campo de tipo
puntero que nos permita el acceso hacia un siguiente nodo.
SEGUNDO BIMESTRE
Aristóteles
Estas estructuras también conocidas como árboles (por sus ramificaciones) están
formadas por nodos al igual que las listas enlazadas, pero cada nodo debe contar
con dos o más campos que puedan apuntar hacia otros nodos.
4.1. Árboles
Como se podrá dar cuenta, el estudio de los árboles es muy simple puesto que
esta estructura está muy relacionada con objetos de nuestro entorno físico.
Con base a la figura 13, en la siguiente tabla 1 se determina que los componentes
de un árbol pueden tomar algunas denominaciones, así:
4.1.2. Aplicaciones
Actividades recomendadas
f. Camino: _________________________________________
g. Altura: ___________________________________________
h. Sub árbol: ________________________________________
i. Árbol equilibrado: __________________________________
Este tipo de árbol tiene la particularidad de que ningún nodo puede tener más
de dos sub árboles, es decir cada nodo puede tener cero, uno o dos hijos (sub
árboles), los cuales serán conocidos como hijo izquierdo e hijo derecho, como se
puede apreciar en la figura14.
Como puede ver, un árbol binario tiene ciertas restricciones (máximo dos sub
árboles), lo cual lo hace más práctico a la hora de programar esta estructura.
Como habrá podido ver, estos recorridos difieren entre sí por el orden en el cual
se procesan los datos, los cuales resumimos a continuación en la tabla 2:
1. Preorden : L, D, B, H, G, J, Q, X, T, S, W, Y
2. En orden : B, D, G, H, J, L, Q, S, T, W, X, Y
3. Postorden : B, G, J, H, D, S, W, T, Y, X, Q, L
Actividades recomendadas
Así, un árbol binario de búsqueda se construye con base en una lista de números
dados (claves), en el cual el primer número de dicha lista será la raíz del árbol, y
los siguientes valores se ubicarán de acuerdo al criterio antes indicado.
Las principales operaciones que se realizan con este tipo de estructura son las de
inserción y eliminación de elementos.
Los ABB son la base para nuevas estructuras como los Árboles
binarios equilibrados (AVL), su principal característica es la facilidad
en cuanto a los algoritmos para trabajar con la información.
Actividades recomendadas
De los ejercicios realizados con árboles de búsqueda binaria nos pudimos dar
cuenta, que de acuerdo al orden de ingreso de los elementos, dependerá el
incremento o no de cualquiera de las ramas del árbol, ver figura 15.
Estos casos de desequilibrio y según el caso pueden ser resueltos por uno de los
procedimientos de rotación llamados: rotación simple a la izquierda o a la derecha
y rotación doble izquierda – derecha y rotación doble derecha – izquierda. Estas
rotaciones podríamos representarlas como se muestra en la figura 16.
Algo muy importante a tener en cuenta es que al realizar cualquier tipo de rotación
para corregir un desequilibrio en un sub árbol, se podría causar otro desequilibrio
al actualizar valores del factor de equilibrio en un nodo superior, por lo cual estos
procedimientos deben ser recursivos y se ejecutarían desde los sub árboles de
mayor altura hasta llegar al nodo raíz, verificando este factor en cada uno a su
paso.
Actividades recomendadas
Esta estructura de datos asocia llaves o claves con valores, soporta de manera
eficiente la operación de búsqueda, permitiendo el acceso a datos almacenados
a partir de una clave generada. Transforma la clave con una función hash, a un
número que identifica la posición donde la tabla hash localiza el valor deseado.
Cuando la función hash genera una misma dirección para dos diferentes claves
enfrenta una colisión. La correcta resolución de estas colisiones implica la
elección de un método adecuado, lo cual es tan importante como la elección
de una buena función hash. Entre los métodos más utilizados tenemos los de
reasignación, arreglos anidados y métodos mediante áreas de desborde.
Sondeo lineal
Sondeo cuadrático
La principal desventaja de este método es que pueden quedar casillas del arreglo
sin visitar.
Encadenamiento separado
Como usted ha podido ver y como se ilustra en la figura 19, este sistema consiste
en que cada elemento del arreglo tenga un apuntador a una lista ligada, la cual
se irá generando e irá almacenando los valores colisionados a medida que sean
requeridos por la aplicación.
Autoevaluación 4
a. Puede tener varios nodos raíz, siempre y cuando no exista un nodo hijo
común.
b. Podrá generar tantos nodos raíz como sean necesarios en la
aplicación.
c. Debe tener un solo nodo raíz, del cual se desprenderán todos los sub
árboles.
a. Nodo raíz.
b. Nodo hermano.
c. Nodo hoja.
a. Anchura y profundidad
b. Preorden y posorden,
c. Ascendente y descendente.
a. Anchura,
b. profundidad o
c. posorden.
UNIDAD 5. GRAFOS
Actividades recomendadas
a. ________________________________________________
b. ________________________________________________
c. ________________________________________________
d. ________________________________________________
Actividades recomendadas
Una vez que hemos estudiado la parte relacionada con los conceptos, veamos
cómo se almacena la información de esta estructura; veremos que se usan
estructuras de datos ya conocidas como: arreglos y listas enlazadas.
5.2. Representación
Las listas de adyacencia guardan por cada nodo, además de la información propia
del nodo, una lista dinámica con los nodos a los que se puede acceder desde él,
ver figura 22. La información de los nodos se puede guardar en un vector, al igual
que antes, o en otra lista dinámica.
Las tareas relacionadas con el recorrido del grafo supondrán solamente trabajar
con los vértices existentes en el grafo, que pueden ser mucho menor que n2. Pero
comprobar las relaciones entre nodos no es tan directo como lo era en la matriz,
sino que supone recorrer la lista de elementos adyacentes perteneciente al nodo
analizado.
Para evitar uno de los problemas existentes en las listas de adyacencia, que
es la dificultad de obtener las relaciones inversas, podemos utilizar las matrices
dispersas, que contienen tanta información como las matrices de adyacencia,
pero, en principio, no ocupan tanta memoria como estas, ya que al igual que en
las listas de adyacencia, sólo representaremos aquellos enlaces que existen en el
grafo.
Arreglo I. Punteros a inicios de fila, en este caso I[k] indicará en qué posición del
arreglo empieza la fila k.
Recorrer un grafo supone intentar alcanzar todos los nodos que estén
relacionados con uno dado que tomaremos como nodo de salida.
Autoevaluación 5
7. Solucionario
Primer bimestre
Autoevaluación 1
Número Respuesta Retroalimentación
correcta
1 c La característica principal de los tipos de datos estáticos,
es que el usuario previamente define su tamaño y este no
podrá ser cambiado en la ejecución del programa.
2 c Los tipos de datos String, me sirven para manipular
cadenas de texto, y entre ese tipo de manipulación está la
de extracción de partes de esa cadena.
3 c Homogeneidad es un sinónimo de igualdad, por lo cual
todos sus elementos deben ser del mismo tipo.
4 c Aunque con fines didácticos se utilicen datos de tipo entero
en los ejemplos para el estudio, los datos a almacenarse
pueden ser registros que brinden información más
completa.
5 c Entre las formas de ingreso de datos a un arreglo están:
durante la definición, por medio del teclado, desde una
fuente externa, etc.
6 b Aunque existen muchas operaciones que se pueden
aplicar sobre arreglos, las principales son: lectura,
modificación, búsqueda, ordenación y eliminación.
7 c Un requerimiento de este tipo de búsqueda es que sus
datos estén previamente ordenados; la ordenación
también puede darse alfabéticamente.
8 b Para declarar un arreglo, los corchetes deben ir ya sea en
el tipo de datos o en el nombre del arreglo, previamente al
signo “=”.
9 a En todos los lenguajes de programación se utiliza la
nomenclatura en ese orden: filas y columnas.
Autoevaluación 1
Número Respuesta Retroalimentación
correcta
10 a La expresión <nombre del arreglo>.lenght permite conocer
el número de elementos de un arreglo.
Autoevaluación 2
Número Respuesta Retroalimentación
correcta
1 V Un TAD tiene un conjunto de valores y operaciones.
Cumple con los principios de abstracción, ocultación de la
información.
2 F La Pila es una estructura LIFO “Last In First Out”.
3 V Se conoce con el nombre de Push a la operación de
inserción de elementos, tanto en pilas como en colas.
4 F Los procesos de inserción y extracción de elementos de
pilas y colas son de forma ordenada.
5 V Se conoce con el nombre de Pop a la operación de
extracción de elementos, tanto en pilas como en colas;
en este caso es correcto ya que en las colas se extrae
siempre el primer objeto que ha ingresado.
6 V Las Colas son estructuras FIFO “First In First Out”.
7 V El concepto se apega a la definición de “conjunto”.
8 F Esa es la definición de Intersección de conjuntos.
9 F Esa es la definición de Diferencia simétrica
10 V Es imprescindible la utilización de un nuevo parámetro que
permita obtener un nuevo criterio de evaluación.
Autoevaluación 3
Número Respuesta Retroalimentación
correcta
1 V Las estructuras dinámicas por su naturaleza requieren que
sus elementos sean creados o eliminados de acuerdo a sus
necesidades.
2 F Este tipo de variables son utilizadas para estructuras dinámicas.
3 V Las variables de tipo puntero son imprescindibles en la
estructura de los nodos, ya que permiten referir al siguiente
elemento.
4 F Las listas enlazadas son estructuras dinámicas por cuanto no
es necesario especificar previamente su tamaño.
5 F Lo doblemente enlazada se refiere a que posee dos variables
de tipo puntero para direccionar hacia otros nodos.
6 V El nodo raíz o cabeza es la única forma de poder llegar hacia
cualquiera de los nodos.
7 V Las listas enlazadas no cuentan con elementos que no posean
información.
8 F Si cambiamos el orden de entrada de elementos a la ya
establecida en los TAD cola, ya se pierde el concepto y
simplemente no sería una cola.
9 V La pérdida de la dirección de un nodo significa que no hay
forma de acceso a él.
10 V Las variables de tipo puntero siempre deben apuntar hacia
algún lugar, en el caso último nodo al no existir más datos debe
ser apuntado hacia null.
Segundo bimestre
Autoevaluación 4
Número Respuesta Retroalimentación
correcta
1 c El concepto de árbol está basado en un único nodo raíz.
2 c Es el nombre proporcionado en la nomenclatura de elementos
de los árboles.
3 a Es el máximo número de descendientes directos que puede
tener un nodo.
4 b La raíz siempre tiene nivel 0. Sus hijos nivel 1 y así
sucesivamente.
5 a Es el nivel del nodo hoja más alejado de la raíz.
6 b Los tres tipos de recorridos son: preorden, inorden y postorden.
7 c Esa es su definición.
8 b La definición de “Binario” quiere decir que tiene dos variables
de enlace.
9 a Esta puede tender a desequilibrase de acuerdo al orden de
ingreso de elementos.
10 b Los árboles AVL adaptan su forma para mantener el equilibrio
de sus ramas.
Autoevaluación 5
Número Respuesta Retroalimentación
correcta
1 V Es parte de la definición de Grafos.
2 F La definición es G(V, E), donde V representa los vértices del
grafo y E el conjunto de aristas.
3 F Los grafos dirigidos contienen un direccionamiento o flechas que
indican la relación entre sus nodos.
4 V Es el número de arcos que tienen un direccionamiento hacia un
determinado nodo.
5 F Orden del grafo es el número de nodos vértices del grafo.
6 V Hay que representar la relación de cada nodo con los demás
nodos del grafo, por lo cual se requiere de n2 espacios de
memoria.
7 F En las listas de adyacencia se intenta evitar justamente el
reservar espacio para aquellos arcos que no contienen ningún
tipo de información
8 V Por cuanto no existen espacios no utilizados, se trabaja
únicamente sobre vértices existentes.
9 V Ocupan menos espacio de memoria debido a que se optimiza la
organización de la información.
10 V Utilizan arreglos para almacenar: valores numéricos de la
relación, índices de las columnas y punteros a inicios de fila.
8. Referencias bibliográficas