Facultad de Ingeniería Eléctrica.
Universidad Michoacana de San
Nicolás de Hidalgo
Software Didáctico de
Estructuras de Datos
Dr. Félix Calderón Solorio
Contenido
General
1 Descripción General....................................................................................................... 3
2 Listas Ligadas................................................................................................................ 3
2.1.1 Conjuntos.................................................................................................................. 4
2.1.2 Expresiones en Postfijo.............................................................................................. 5
2.1.3 Operaciones.............................................................................................................. 6
3 Árboles.......................................................................................................................... 8
3.1.1 Árboles Binarios......................................................................................................... 9
3.1.2 Árbol AVL.................................................................................................................. 9
3.1.3 Árbol de expresión.................................................................................................... 10
4 Tablas Hash................................................................................................................. 11
5 Relaciones................................................................................................................... 12
6 Menús......................................................................................................................... 12
7 Gráfica......................................................................................................................... 12
8 Bibliografía................................................................................................................... 14
Software Didáctico de
Estructuras de Datos
Este programa muestra las operaciones que se
pueden realizar con listas, conjuntos, árboles y Grafos, en general Estructuras
de datos, las cuales son analizadas en la materia correspondiente (ver programa). El programa principal que debe
ejecutarse es principal.jar
dando la siguiente línea de comando
java –jar principal.jar
Al realizar la ejecución aparece una pantalla
como se muestra en la Figura 1. En dicha figura se muestra, sobre la barra de menú,
las estructuras de datos que el programa maneja. Para llevar a cabo la
ejecución del programa se requiere una computadora pentium 4 o similar con
sistema operativo Windows, Linux, MacOS, etc. La versatilidad de los programas
en Java permite que puedan ser corridos en cualquier plataforma y el código
fuente se encuentra disponible en la página http://lc.fie.umich.mx/~calderon/ .
El proyecto completo con todos los códigos fuentes puede ser descargado aquí y la documentación necesaria explicando
cada una de las clases con sus métodos esta disponible en doc.
Figura 1. Pantalla del
programa principal
Las opciones que de el menú de la Figura 1, son Archivo, Listas Ligadas, Árboles, Tablas Hash,
Relaciones, Menús y Graficas. Cada uno a su vez despliega submenús de
operaciones implementadas para cada caso y estas son descritas con más detalle
a continuación.
Al entrar a la opción de Listas ligadas se muestran las opciones que se
tienen implementadas, estas son las opciones de Conjuntos, Manejo de
Expresiones en Postfijo y Operaciones básicas con listas, este submenú se
muestra en Figura 2 . En la siguiente sección se detallan cada una de
las operaciones implementadas con listas.
Figura 2. Submenú de
Listas Ligadas
El código fuente para la implementación de conjuntos se encuentra disponible en Conjunto.java,
esta clase tiene implementadas las
operaciones básicas con conjuntos y este marco (Figura 3), solamente muestra la ejecución de estas de
una manera didáctica. Al ejecutar del la Figura
2, la opción de conjuntos se despliega el marco que se
muestra en la Figura
3 donde se muestra un ejemplo de la evaluación
de una expresión dada con de tres conjuntos. Esta opción cuenta con un menú de
archivo y Ejemplos dados con conjuntos.
Figura 3. Opción de
Conjuntos
La opción de archivo despliega un
submenú como se muestra en la Figura
4. Estas opciones permiten crear un conjunto nuevo, dar
datos para los tres conjuntos desde un archivo, guardar la información de los
conjuntos en archivo y salir.
Figura 4. Submenú
archivo de la opción de conjuntos
Esta opción permite manejar expresiones en postfijo o notación polaca. La
opción evalua la expresión dada en la casilla de texto o corre dos ejemplos que
se muestran en la opción de ejemplos. La Figura
5, muestra el marco para la opción de expresiones en
postfijo.
Figura 5. Opción de
Expresiones en Postfijo
En esta opción se manejan las
operaciones que se pueden realizar con Listas ligadas. Se implemento una lista,
una pila y una cola. Al ejecutar la opción Operaciones del menú de la Figura 2, se despliega el menú presentado en la Figura 6. En la opción de archivo se despliegan tres tipos de
estructuras implementadas a partir del modelo de listas ligas, estas
operaciones son la Lista, la Pila y la Cola. Cada una de estas tiene la opción
de crear una lista nueva vacía o leer la información de un archivo. En las Figura 7, Figura
8 y Figura
9 se muestran las opciones implementadas.
En el caso de una lista (Figura 7) se tienen implementadas las operaciones de Insertar,
Borrar, Buscar, Imprimir y Ordenar, y los métodos de ordenamiento implementados
son Burbuja y MergeSort. Para una pila se implemento las opciones de sacar
información de la pila Pop, meter información a la pila Push e Imprimir el
contenido de la pila con Imprime tal como lo muestra la Figura 8. Finalmente en la Figura
9, se muestra la operaciones de Encolar, Desencolar e
Imprimir el contenido de una Cola.
Los códigos fuentes con esta
operaciones se encuentran en Cola.java Lista.java y Stack.java
Figura 6. Opción de
Operaciones con Listas Ligadas.
Figura 7. Lista
Figura 8. Pila
Figura 9. Cola
Dentro de las estructuras de datos existen
los árboles. Estas estructuras a diferencia de las listas ligadas, permite
tener mas de una referencia a otro nodo, por lo tanto si utilizamos solamente
la referencia a dos de ellos estaremos creando un árbol binario. Los árboles
binarios pueden ser utilizados para almacenar información y a su vez derivar
otras aplicaciones como son los árboles de expresiones que pueden ser
utilizados para evaluar expresiones matemáticas o crearlas. Los árboles AVL son
una mejora de los Binarios en el cual el árbol siempre esta balanceado. En las
siguientes subsecciones siguientes, se detallan mas la funciones implementadas
en esta opción. Los códigos fuentes se encuentran disponibles en las clases Arbol_Binario.java,
Arbol_AVL.java
y Arbol_Expresion.java
Para los árboles binarios, se tienen
implementadas las operaciones de Insertar, Buscar, Borrar e Imprimir. El nombre
de cada una de ellas describe la operación que realizar. La opción de imprimir
puede hacerla en preorden, orden y postorden. Una opción mas implementada, es
la del cálculo de la Altura Máxima como se ve en la Figura 10.
Figura 10. Árbol Binario
Los árboles AVL son árboles Binarios que
tienen una restricción de balaceo. Esto quiere decir que en el árbol AVL
siempre satisface el criterio 2k-1, donde k es la profundidad del
árbol. Así por ejemplo si el número de elementos en el árbol es de 15 la
profundidad máxima k = 3 y para un árbol binario en el peor de los casos k =
15. Esto significa que en el primero con 3 comparaciones encontramos un
elemento mientras que en segundo se requieren de 15 en el peor de los
casos. En la Figura 11, se muestran las opciones implementadas, estas son,
Buscar en un árbol, Ejemplos implementados, Insertar, Imprimir, Nuevo y Salir.
Figura 11. Árbol AVL
Los árboles de expresión son árboles Binarios
donde siempre, para un subárbol dado, su nodo raíz es una operación aritmética
y los subárboles hijos son dos números reales o el resultado de una operación.
Estos árboles son utilizados para cambiar una expresión dada en notación polaca
a su notación en infijo que es como estamos acostumbrados a manejar las
expresiones aritméticas. El menú implementado para esta opción se presenta en
la Figura
12, donde podemos ver que las opciones implementadas son
ejemplos, Imprimir (en forma de árbol o expresión) y salir. La expresión dada
en el área de texto es evaluada al momento de finalizar su captura y el
resultado es presentado en el área de texto de abajo.
Figura 12. Árbol de Expresión
Al presionar la opción Tabla Hash de la
Figura
1, se despliega el menú de la Figura 13, este es el menú de inicio donde se dan las opciones
de crea una nueva Tabla Hash o mostrar los ejemplos implementados. Al ejecutar
alguna de estas opciones se muestra el menú de la Figura 14, las operaciones implementadas son Insertar, Borrar,
Imprimir, Calcular la función Hash y Buscar.
Figura 13. Menú principal de la tabla
Hash.
Figura 14. Operaciones con Tablas Hash.
Esta opción esta bajo construcción y al presionar el botón izquierdo del Mouse
no realiza acción alguna.
Despliega dos ejemplos de menús implementados. Estas no pueden ser
consideradas estructuras de datos sin embargo estos menús se dan como ejemplo
para que los alumnos tenga referencia de opciones para proyectos relacionados
con la materia. En la figura
Figura
15. Ejemplo de
Menú 1
Al presionar la opción de Gráfocas de
la Figura
1, se despliega el menú de la Figura 16, este es el menú de inicio donde se dan las opciones
de crea una nueva Grafica la cual puede ser dirigida o no o simplemente, se lee
desde un archivo de datos. Al ejecutar alguna de estas opciones se muestra el
menú de la Figura
17. En esta figura podemos calcular el Árbol de
expansión mínima, Buscar, Borrar, Insertar, Búsqueda en profundidad y Distancia
a todos los nodos.
Figura 16. Menú principal para la ejecutar
una gráfica.
Figura 17. Operaciones implementadas con
Gráficas.