Manual de Practicas de Estructura de Datos PDF
Manual de Practicas de Estructura de Datos PDF
MANUAL DE PRÁCTICAS
PRESENTA
M.C. LILIANA ELENA OLGUÍN GIL
AGOSTO 2008.
MANUAL DE PRACTICAS DE ESTRUCTURA DE DATOS.
ÍNDICE
I. PRESENTACIÓN 2
II. INTRODUCCIÓN 3
III. OBJETIVO GENERAL 4
IV. CONTENIDO DE LA PRÁCTICA 5
V. REPORTE DE RESULTADOS 6
VI. PRÁCTICAS:
VI.1.Manejo de Memoria 7
VI.2. Operaciones básicas en las listas simplemente ligadas 10
VI.3 Suma de elementos de dos listas simplemente ligadas 12
VI.4. Mezcla de listas simplemente ligadas 13
VI.5.Suma de polinomios 14
VI.6.Operaciones básicas en una lista doblemente ligada
VI.7.Suma de números arbitrariamente grandes
VI.8.Separar en dos una lista doblemente ligada
VI.9.Implementacion de una lista ligada genérica
VI.10.Operaciones básicas con pilas estáticas y dinámicas
VI.11. Algoritmo para conversión de una expresión de Infijo a Posfijo
VI.12.Algoritmo para la evaluación de expresiones posfijas
VI.13.Operaciones Fundamentales sobre Colas de Espera Simple
VI.14.Applet Evaluador
VI.15.Operaciones Fundamentales sobre Colas de Espera Circulares
VI.16.Simulación de un cajero automatizado
VI.17.Algoritmos Recursivos
VI.18.Operaciones básicas sobre Arboles Binarios de Búsqueda
VI.19.Diccionario Español-Ingles
VI.20.Applet didáctico que muestre como funcionan los algoritmos de
ordenamiento Interno
VII. BIBLIOGRAFÍA
PRESENTACIÓN
INTRODUCCIÓN
OBJETIVO GENERAL
CONTENIDO DE LA PRÁCTICA
REPORTE DE RESULTADOS
Para cada una de las practicas se deberá entregar un reporte, el cual debe incluir:
• Título de la práctica
• Análisis de la práctica (media cuartilla mínimo)
• Diagramas de clases de la aplicación
• Diagramas de flujo de cada método de las clases definidas
• Listado de código fuente documentado
• Conclusiones de la práctica(como desarrollo la práctica, a que resultados
llegó, que problemas se presentaron, y que dudas no pudo resolver).
• Bibliografia
• CD grabado con la aplicación funcionando.
PRÁCTICA Nº 1
Nombre:
“Manejo de Memoria”
Objetivo:
Establecer la diferencia entre las variables estáticas y dinámicas en una
aplicación.
Introducción:
La memoria es el “almacén” donde se colocan desde el sistema operativo, el
compilador, el código fuente y todas las variables y estructuras que se incluyen en
un programa. De la buena selección de una estructura dependerá el desempeño
de una aplicación, de acuerdo al problema que se va a resolver, se deberá elegir
una estructura que manipule Memoria Estática o Memoria Dinámica.
Material y Equipo:
• Computadora
• Software para desarrollar mapas conceptuales
• Internet
• Bibliografía propuesta
Metodología:
1. Formar equipos de trabajo de 3 personas como máximo.
2. Investigar en Internet y en la bibliografía propuesta y adicional sobre el
manejo de memoria estática y dinámica.
3. Investigar en internet el modelo de memoria y como se distribuyen cada
uno de los elementos involucrados en una programa en este modelo.
4. Analizar e intercambiar conceptos y discutir lo que cada miembro el equipo
entendió.
5. Con las aportaciones y conclusiones de cada miembro del equipo deberán
elaborar un mapa conceptual que incluya los aspectos más importantes del
manejo de memoria.
Sugerencias didácticas:
PRÁCTICA Nº 2
Nombre:
“Operaciones básicas con Pilas Estáticas y Dinámicas”
Objetivo:
Implementar una clase que defina las operaciones básicas con la estructura de
datos Pila.
Introducción:
Para cada una de las aplicaciones que se pueden desarrollar, existe una
estructura que proporciona al programador cierta funcionalidad. Las estructuras de
tipo LIFO(Ultimo en entrar primero en salir) se utilizan en aplicaciones donde
necesitamos recuperar los datos en el orden inverso al cual fueron introducidos.
Es necesario conocer las operaciones básicas sobre pilas para poder manipular la
estructura.
Material y Equipo:
• Computadora
• JDK 1.6.
• JCreator Pro. Ó JCreator Le ó NetBeans (u otro IDE para Java)
Metodología:
• Crear una clase Pila, la cual defina un arreglo de tamaño N el cual se
utilizará como estructura para implementar una Pila Estatica y definir las
operaciones de Insercion (push), Eliminacion (pop) , pilaLlena y pilaVacia.
• Crear una clase NodoP , la cual defina un nodo que será utilizado para
definir una Pila Dinámica, definir una clase llamada PilaD en la cual se
implementen las operaciones de Insercion (pushD), Eliminacion(popD) y
pilaVacia utilizando una lista simplemente ligada.
• Implementar 2 aplicaciones, una para probar la pila estatica y otra para
probar la pila dinámica mediante un menú con las siguientes opciones:
Insertar
Eliminar
Salir
Sugerencias didácticas:
• Leer los fundamentos teóricos expuestos en clase
• Consultar otras fuentes para establecer los parámetros de la
implementación de las operaciones básicas sobre Pilas
• Analizar los diagramas de flujo que se expusieron en clase.
PRÁCTICA Nº 3
Nombre:
“Algoritmo para conversión de una expresión de Infijo a Posfijo”
Objetivo:
Aplicar el concepto de pila en la conversión de expresiones
Introducción:
Una de las aplicaciones de las pilas está en la implementación de compiladores,
para evaluar una expresión el compilador traduce la expresión a la notación polaca
para permitir que sea más fácil y rápido evaluarla y obtener el resultado. Aquí se
utiliza una pila de operadores para hacer dicha conversión.
Material y Equipo:
• Computadora
• JDK 1.6.
• JCreator Pro. Ó JCreator Le ó NetBeans (u otro IDE para Java)
Metodología:
Implementar el algoritmo para conversión de expresiones analizado en clase,
utilizando las operaciones básicas definidas en cualquiera de las clases definidas
en la práctica No.10
Implementar una aplicación para convertir diferentes expresiones
Sugerencias didácticas:
• Analizar el algoritmo expuesto en clase
• Consultar otras fuentes
PRÁCTICA Nº 4
Nombre:
“Algoritmo para la evaluación de expresiones posfijas”
Objetivo:
Aplicar el concepto de pila en la evaluación de expresiones posfijas.
Introducción:
Una vez que la expresión es convertida por el compilador en notación polaca o
polaca inversa se debe evaluar cada operando y cada operador para obtener el
resultado final de la operación, aquí se utiliza una pila de operandos para ir
almacenando cada operando y el resultado de cada operación.
Material y Equipo:
• Computadora
• JDK 1.6.
• JCreator Pro. Ó JCreator Le ó NetBeans (u otro IDE para Java)
Metodología:
Implementar el algoritmo para evaluar expresiones posfijas proporcionando el
resultado, utilizando el algoritmo discutido en clase, utilizando las operaciones
básicas definidas en cualquiera de las clases definidas en la práctica No.10
Implementar una aplicación para evaluar diferentes expresiones posfijas.
Sugerencias didácticas:
• Analizar el algoritmo expuesto en clase
• Consultar otras fuentes de información como ligas electrónicas y la
bibliografía propuesta en el aula.
PRÁCTICA Nº 5
Nombre:
“Applet Evaluador”
Objetivo:
Aplicar el concepto de pila en la conversión y evaluación de expresiones posfijas.
Introducción:
Una manera de vincular la teoría con la práctica es generar una aplicación visual
en la cual se conjunte ambos conceptos, la conversión y la evaluación, simulando
lo que hace un compilador.
Material y Equipo:
• Computadora
• JDK 1.6.
• JCreator Pro. Ó JCreator Le ó NetBeans (u otro IDE para Java)
• Algoritmos implementados en las practicas 2,3 y 4.
Metodología:
Implementar un Applet de Java, el cual permita capturar una expresión infija y al
presionar el botón <convertir> la convierta a posfijas, así mismo deberá tener un
botón <evaluar> el cual inicie inhabilitado, hasta que la expresión infija haya sido
convertida a Posfija, al presionar el botón <evaluar> se solicitaran al usuario los
valores para cada variable y se mostrara el resultado de la evaluación de la
expresión. La expresión de entrada se proporcionara con variables y puede llevar
cualquiera de los operadores aritméticos y/o paréntesis. Deberá proteger su applet
para casos en los cuales las aéreas de texto de captura estén vacías. La clase
Pila utilizada en esta aplicación debe ser genérica, es decir su información debe
ser de tipo Object.
Sugerencias didácticas:
• Consultar documentación sobre el manejo de Applets en Java y sus
diferentes controles.
• Analizar los diferentes algoritmos expuestos en clase.
• Consultar otras fuentes de información.
PRÁCTICA Nº 6
Nombre:
“Operaciones Fundamentales sobre Colas de Espera Simple”
Objetivo:
Implementar una clase que defina las operaciones básicas con la estructura de
datos Cola
Introducción:
Las estructuras de tipo FIFO (Primero en entrar, Primero en salir), tienen
aplicación en el desarrollo de aplicaciones donde sea necesario recuperar los
datos en el mismo orden en que fueron insertados, es necesario conocer la
implementación en operaciones fundamentales sobre estas estructuras.
Material y Equipo:
• Computadora
• JDK 1.6.
• JCreator Pro. Ó JCreator Le ó NetBeans (u otro IDE para Java)
Metodología:
• Crear una clase Cola, la cual defina un arreglo de tamaño N el cual se
utilizará como estructura para implementar una Cola Estática y definir las
operaciones de meter, sacar , colaLlena y colaVacia.
• Crear una clase NodoC , la cual defina un nodo que será utilizado para
definir una Cola Dinámica, definir una clase llamada ColaD en la cual se
implementen las operaciones de meter, sacar y colaVacia utilizando una
lista simplemente ligada.
• Implementar 2 aplicaciones, una para probar la cola estática y otra para
probar la cola dinámica mediante un menú con las siguientes opciones:
Insertar
Eliminar
Salir
Sugerencias didácticas:
• Leer los fundamentos teóricos expuestos en clase
• Utilizar los diagramas de flujo analizados en clase
• Consultar otras fuentes para establecer los parámetros de la
implementación de las operaciones básicas sobre Colas Simples
• Analizar los diagramas de flujo que se expusieron en clase.
PRÁCTICA Nº 7
Nombre:
“Operaciones Fundamentales sobre Colas de Espera Circulares”
Objetivo:
Implementar una clase que defina las operaciones básicas con la estructura de
datos Cola Circular estática y dinámica.
Introducción:
Dentro de las estructuras FIFO existe una variante la cual permite que las
operaciones fundamentales se lleven a cabo en menos tiempo, evitando
corrimientos, intercambios y accesos innecesarios a memoria.
Material y Equipo:
• Computadora
• JDK 1.6.
• JCreator Pro. Ó JCreator Le ó NetBeans (u otro IDE para Java)
Metodología:
• Crear una clase ColaCircular, la cual defina un arreglo de tamaño N el cual
se utilizará como estructura para implementar una Cola Estática Circular y
definir las operaciones de meter, sacar , colaLlena y colaVacia.
• Crear una clase NodoC , la cual defina un nodo que será utilizado para
definir una Cola Dinámica Circular, definir una clase llamada ColaCircularD
en la cual se implementen las operaciones de meter, sacar y colaVacia
utilizando una lista simplemente ligada.
• Implementar 2 aplicaciones, una para probar la cola estática circular y otra
para probar la cola dinámica circular mediante un menú con las siguientes
opciones:
Insertar
Eliminar
Salir
Sugerencias didácticas:
• Leer los fundamentos teóricos expuestos en clase
• Utilizar los diagramas de flujo analizados en clase
• Consultar otras fuentes para establecer los parámetros de la
implementación de las operaciones básicas sobre Colas Simples
• Analizar los diagramas de flujo que se expusieron en clase.
PRÁCTICA Nº 8
Nombre:
“Simulacion de un cajero automatizado”
Objetivo:
Implementar una aplicación controlada por tiempo utilizando como herramienta
auxiliar de desarrollo una cola en cualquiera de sus variantes.
Introducción:
Una de las aplicaciones de las colas de espera es la simulación de eventos para
reducir tiempos de espera en líneas de producción o servicios, una forma de
entender la funcionalidad que puede tener una cola de espera es simular procesos
de la vida real utilizando como herramienta una cola de espera.
Material y Equipo:
• Computadora
• JDK 1.6.
• JCreator Pro. Ó JCreator Le ó NetBeans (u otro IDE para Java)
• Clases definidas en las practicas 6 ó 7
Metodología:
Una simulación conducida por tiempo es aquella en la que el programa tiene una
contador que representa a un reloj. Cada vez que se incrementa el contador pasa
1 minuto. Las cosas que pueden suceder cada minuto y que deben almacenarse
son: Puede llegar un cliente, puede salir un cliente, la gente puede estar aún
esperando en la fila.
Hagamos una lista de estas acciones y lo que habría que hacer cuando ocurran:
• Si llega un cliente, ponerlo en la fila
• Si el cajero esta libre, avanza un coche a la ventanilla. El tiempo de servicio
se pone a 5 mintos.
• Si hay un cliente en la ventanilla, el tiempo que le queda a ese cliente para
estar servido debe decrementarse.
• Si hay clientes en la fila, debe registrarse que tienen que permanecer en la
cola 1 minutos mas.
Podemos simular los eventos con un generador de números aleatorios.
Si el numero aleatorio esta entre 0.0 y 0.2, ha llegado un cliente
Si el número aleatorio es mayor que 0.2 y menor que 1.0, no ha llegado ningún
cliente.
Podemos simular que el cajero esta libre considerando que el tiempo que le queda
al cliente en la caja es 0, cuando un cliente entra para ser antendido el tiempo del
cajero se pone a 5 y se decrementa por cada minuto que pase en servicio, cuando
el tiempo llega a cero el cajero esta libre. Si llega un cliente hay que checar si la
caja esa libre, sino el cliente debe esperar un minuto más en la cola. El objetivo es
saber cuánto espera un cliente en la fila. Para esto deberá contar el número de
clientes que llegaron y el tiempo de espera en la fila de todos los clientes, calcular
este tiempo para una caja y para dos cajas y determinar si al aumentar una caja
se mejora el tiempo de espera
Sugerencias didácticas:
• Analizar el problema para determinar el tipo de estructura que es útil como
auxiliar para la solución del problema propuesto.
PRÁCTICA Nº 9
Nombre:
“Operaciones básicas en las listas simplemente ligadas”
Objetivo:
El alumno implementará, utilizando un lenguaje de programación, una clase y
después una aplicación donde se utilicen las operaciones básicas sobre las listas
enlazadas simples.
Introducción:
Las Listas ligadas son las estructuras dinámicas por excelencia, permiten que el
tamaño de la estructura pueda crecer o decrecer según la necesidad de la
aplicación, es importante conocer la implementación y el funcionamiento de esta
estructura para poder posteriormente utilizar las clases definidas en el lenguaje
que permiten implementar las operaciones básicas sobre la misma.
Material y equipo:
• Computadora
• JDK 1.6.
• JCreator Pro. Ó JCreator Le ó NetBeans (u otro IDE para Java)
Metodología:
1. Implementar una clase llamada Nodo que represente el nodo de la lista
simplemente ligada, donde la información que almacenara será de tipo
entero.
2. Implementar una clase llamada Lista que represente la lista simplemente
ligada y en donde se definirán las operaciones de inserción al frente,
inserción al final, inserción ordenada, búsqueda, eliminación y recorrido.
• Deberá utilizar los diagramas de flujo vistos en clase para
implementar cada una de las operaciones descritas anteriormente.
3. Implementar una aplicación donde se defina un menú para cada una de las
operaciones descritas en el apartado número 2.
Sugerencias didácticas:
• Leer los fundamentos teóricos expuestos en clase
• Consultar otras fuentes para establecer los parámetros de la
implementación de las operaciones básicas sobre listas ligadas.
PRÁCTICA Nº 10
Nombre:
“Suma de elementos de dos listas simplemente ligadas”
Introducción:
Es importante aprender a aplicar las Listas simplemente ligadas a la solución de
un problema, utilizando como operaciones de entrada y salida las operaciones
básicas sobre listas ligadas simples, esto marcara un fundamento para poder
utilizar las Clases definidas en el lenguaje para el manejo de esta estructura de
datos.
Material y Equipo:
• Computadora
• JDK 1.6.
• JCreator Pro. Ó JCreator Le ó NetBeans (u otro IDE para Java)
• Clase Nodo (Resultado de la práctica No. 2)
• Clase Lista (Resultado de la práctica No. 2)
Metodología:
1. Implementar una aplicación en la cual se defina un método llamado
sumaListas el cual reciba como parámetro un objeto Lista, y devuelva un
objeto Lista, que será el resultado de sumar 2 listas simplemente ligadas
que no necesariamente tendrán que ser del mismo tamaño. El método no
deberá ser estático para que sea invocado por un objeto de la clase lista.
3. Para crear las dos listas originales deberá utilizar cualquiera de las
inserciones implementadas en la clase Lista.
5 8 3 9 2
7 7 2
12 15 5 9 2
PRÁCTICA Nº 11
Nombre:
“Mezcla de listas simplemente ligadas”
Introducción:
Una forma de poder entender el funcionamiento de las Listas Ligadas simples es
crear aplicaciones donde permitan manipular las referencias a nodos sin perder
los demás nodos, esta aplicación permite entender el manejo de las referencias en
las listas simplemente ligadas.
Material y Equipo:
• Computadora
• JDK 1.6.
• JCreator Pro. Ó JCreator Le ó NetBeans (u otro IDE para Java)
• Clase Nodo (Resultado de la práctica No. 2)
• Clase Lista (Resultado de la práctica No. 2)
Metodología:
1. Crear dos listas simplemente ligadas de nombres de personas utilizando
cualquiera de los algoritmos de inserción implementados en la clase Lista
de la practica No.2
4. Deberá prever que las listas no necesariamente serán del mismo tamaño.
Ejemplo:
PRÁCTICA Nº 12
Nombre:
“Suma de Polinomios”
Introducción:
Es importante aprender a aplicar las Listas simplemente ligadas a la solución de
un problema, utilizando como operaciones de entrada y salida las operaciones
básicas sobre listas ligadas simples, esto marcara un fundamento para poder
utilizar las Clases definidas en el lenguaje para el manejo de esta estructura de
datos.
Material y Equipo:
• Computadora
• JDK 1.6.
• JCreator Pro. Ó JCreator Le ó NetBeans (u otro IDE para Java)
• Clase Nodo (Resultado de la práctica No. 2)
• Clase Lista (Resultado de la práctica No. 2)
Metodología:
Si: polinomio1=
polinomio2=
3 5 -2 3 3 1 -10 0
2 4 3 3 5 2 2 0
3 5 2 4 1 3 5 2 -8 0
PRÁCTICA Nº 13
Nombre:
“Operaciones básicas en una lista doblemente ligada”
Introducción:
Las Listas ligadas son las estructuras dinámicas por excelencia, permiten que el
tamaño de la estructura pueda crecer o decrecer según la necesidad de la
aplicación, es importante conocer la implementación y el funcionamiento de esta
estructura para poder posteriormente utilizar las clases definidas en el lenguaje
que permiten implementar las operaciones básicas sobre la misma.
Material y Equipo:
• Computadora
• JDK 1.6.
• JCreator Pro. Ó JCreator Le ó NetBeans (u otro IDE para Java)
Metodología:
1. Implementar una clase llamada NodoD que represente el nodo de la lista
doblemente ligada, donde la información que almacenara será de tipo
entero.
2. Implementar una clase llamada ListaD que represente la lista doblemente
ligada y en donde se definirán las operaciones de inserción al frente,
inserción al final, inserción ordenada, búsqueda, eliminación, recorrido y
recorrido inverso.
• Deberá utilizar los diagramas de flujo vistos en clase para
implementar cada una de las operaciones descritas anteriormente.
3. Implementar una aplicación donde se defina un menú para cada una de las
operaciones descritas en el apartado número 2.
Sugerencias didácticas:
• Leer los fundamentos teóricos expuestos en clase
• Consultar otras fuentes para establecer los parámetros de la
implementación de las operaciones básicas sobre listas ligadas.
• Analizar los diagramas de flujo que se expusieron en clase.
PRÁCTICA Nº 14
Nombre:
“Suma de números arbitrariamente grandes”
Introducción:
La utilidad que puede tener una bicola o lista doblemente ligadas se demuestra en
el desarrollo de la solución de la problemática planteada en esta práctica donde
podemos aprovechar la funcionalidad de poder recorrer el conjunto de elementos
en ambos sentidos.
Material y Equipo:
• Computadora
• JDK 1.6.
• JCreator Pro. Ó JCreator Le ó NetBeans (u otro IDE para Java)
• Clase ListaD
Metodología:
3. En el main de la aplicación debe crear tres objetos que la clase ListaD, dos
para almacenar los números originales y el tercer objeto para almacenar el
resultado. Ver ejemplo:
3 3 4 5 7 4
2 3 6 8 6 7
5 7 1 4 4 1
PRÁCTICA Nº 15
Nombre:
“Separar en dos una lista doblemente ligada”
Introducción:
Una forma de poder entender el funcionamiento de las Listas Ligadas dobles es
crear aplicaciones donde permitan manipular las referencias a nodos sin perder
los demás nodos, esta aplicación permite entender el manejo de las referencias en
las listas doblemente ligadas.
Material y Equipo:
• Computadora
• JDK 1.6.
• JCreator Pro. Ó JCreator Le ó NetBeans (u otro IDE para Java)
• Clase ListaD
Metodología:
1. Implementar una aplicación que contenga un método que reciba una lista
doblemente ligada como parámetro la cual contendrá números enteros y
muestre las dos listas resultantes de separar la lista original.
2. El criterio de separación de las dos listas será los números primos se
enviaran a una lista y los números no primos se enviaran a otra lista.
3. Recuerde que los números primos son aquellos que solo son divisibles
entre ellos mismos y la unidad.
4. La lista original desaparecerá después de hacer la separación.
5. En el main deberá crear tres objetos de la clase ListaD, uno que será la lista
original y los otros dos que serán las listas resultantes de la separación.
8 13 6 7 4
8 6 4
13 7
PRÁCTICA Nº 16
Nombre:
“Implementación de una Lista Ligada Genérica”
Objetivo:
Aprender a implementar listas genéricas(Object)
Introducción:
Las listas ligadas genéricas, tienen una gran funcionalidad, y en ellas se aplica el
concepto de reutilización, ya que al declarar de tipo Object la información de esta,
permitimos que la estructura este preparada para poder recibir datos de cualquier
tipo y con esto evitar el repetir la definición de código para cada tipo de dato.
Material y Equipo:
• Computadora
• JDK 1.6.
• JCreator Pro. Ó JCreator Le ó NetBeans (u otro IDE para Java)
Metodología:
Implementar una clase NodoG, el cual contenga como tipo Object al atributo
información.
Implementar una clase ListaG, la cual contenga la definición de las operaciones
básicas sobre listas ligadas utilizando el tipo Object como información a ser
almacenada, eliminada, según corresponda.
Crear una aplicación donde se utilice una lista genérica para realizar operaciones
básicas de Inserción, Eliminación y Búsqueda
Sugerencias didácticas:
• Investigar sobre comparación de objetos de tipo Object
• Revisar la teoría expuesta en clase
• Revisar las operaciones sobre listas ligadas
PRÁCTICA Nº 17
Nombre:
“Algoritmos Recursivos”
Introducción:
La recursividad es una herramienta muy poderosa en la programación que permite
que se reduzca considerablemente el código de un algoritmo para la solución de
un problema, existen versiones iterativas que al compararlas contra soluciones
recursivas mejoran considerablemente el diseño de la solución, contra las
desventajas que pudiera presentar la implementación recursiva de algoritmos
iterativos, son mas los beneficios que se obtienen.
Objetivo:
Aprender y aplicar los conceptos de recursividad, definir soluciones recursivas e
implementar métodos recursivos eficientes.
Material y Equipo:
• Computadora
• JDK 1.6.
• JCreator Pro. Ó JCreator Le ó NetBeans (u otro IDE para Java)
Metodología:
• Analizar e implementar las versiones iterativas y recursivas de los
siguientes problemas:
Sumatoria de los n números naturales
Factorial de un numero
Serie Fibonacci
Potencia de un numero
Algoritmo de Euclides
Conversión de un número decimal a binario, octal y
hexadecimal
Torres de Hanoii
Sugerencias didácticas:
• Definir el modelo recursivo de cada problema
• Implementar la versión iterativa
• Implementar la versión recursiva
PRÁCTICA Nº 18
Nombre:
“Operaciones básicas sobre Arboles Binarios de Búsqueda”
Objetivo:
Implementar las operaciones básicas en árboles binarios de búsqueda
Introducción:
La estructura de árbol es muy socorrida en soluciones donde se requiera que los
datos se relacionen con diferentes datos y en diferente forma, también son muy
útiles en la representación de expresiones binarias, arboles de búsqueda que
hacen la las búsquedas de datos sean mas rápidas que en una búsqueda
secuencial en una lista lineal
Material y Equipo:
• Computadora
• JDK 1.6.
• JCreator Pro. Ó JCreator Le ó NetBeans (u otro IDE para Java)
Metodología:
• Definir una clase NodoA para representar el nodo de un árbol binario
• Definir una clase Arbol para implementar las operaciones de inserción,
inserción recursiva, eliminación, búsqueda de un dato y los recorridos
enorden, preorden y posorden.
• Definir una aplicación para probar cada una de estas operaciones:
Inserción
Eliminación
Búsqueda
Recorridos
Salir
Sugerencias didácticas:
• Leer los fundamentos teóricos expuestos en clase
• Consultar otras fuentes para establecer los parámetros de la
implementación de las operaciones básicas sobre Arboles Binarios de
búsqueda.
• Analizar los diagramas de flujo que se expusieron en clase.
PRÁCTICA Nº 19
Nombre:
“Diccionario Español-Ingles”
Objetivo:
Utilizar las operaciones básicas sobre arboles para la solución de un problema
Introducción:
La estructura de árbol es muy socorrida en soluciones donde se requiera que los
datos se relacionen con diferentes datos y en diferente forma, también son muy
útiles en la representación de expresiones binarias, arboles de búsqueda que
hacen la las búsquedas de datos sean mas rápidas que en una búsqueda
secuencial en una lista lineal
Material y Equipo:
• Computadora
• JDK 1.6.
• JCreator Pro. Ó JCreator Le ó NetBeans (u otro IDE para Java)
Metodología:
• Generar un archivo de texto, el cual contenga palabras en español y su
correspondiente significado en ingles, organizado en dos columnas
• Subir el contenido del archivo en un árbol binario de búsqueda, organizado
por la palabra en español
• Definir un applet el cual al momento de ser cargado, permita realizar de
manera automática y transparente la operación anterior.
• El applet traductor deberá permitir traducir cualquier palabra del español al
ingles, deberá permitir dar de alta nuevas palabras verificando que la
palabra no este ya contenida en el diccionario
• Al finalizar el contenido del árbol será nuevamente almacenado en un
archivo de texto con el mismo formato que el original
• Deberá utilizar la clase árbol definida en la práctica No. 18 de este manual.
Sugerencias didácticas:
• Leer los fundamentos teóricos expuestos en clase
PRÁCTICA Nº 20
Nombre:
“Applet didáctico que muestre como funcionan los algoritmos de ordenamiento
Interno”
Introducción:
En computación y matemáticas un algoritmo de ordenamiento es un algoritmo
que pone elementos de una lista o un vector en una secuencia dada por una
relación de orden, es decir, el resultado de salida ha de ser una permutación —o
reordenamiento— de la entrada que satisfaga la relación de orden dada. Las
relaciones de orden más usadas son el orden numérico y el orden lexicográfico.
Ordenamientos eficientes son importantes para optimizar el uso de otros
algoritmos (como los de búsqueda y fusión) que requieren listas ordenadas para
una ejecución rápida. También es útil para poner datos en forma canónica y para
generar resultados legibles por humanos
Objetivo:
Demostrar como funcionan los algoritmos de ordenamiento interno en forma
gráfica.
Material y Equipo:
• Computadora
• JDK 1.6.
• JCreator Pro. Ó JCreator Le ó NetBeans (u otro IDE para Java)
Metodología:
• Definir un applet o un Frame que contenga botones con cada uno de los
métodos de ordenamiento interno y un botón de grafica comparativa.
• Al presionar el botón se deberá mostrar una animación que muestre de
manera gráfica el como va ordenando los elementos dicho método
• Al presionar el botón de <grafica comparativa> deberá mostrar una grafica o
histograma comparativo donde muestre el tiempo que tardo cada algoritmo
en ordenar la misma muestra de datos.
• Los datos se generan de manera aleatoria y el usuario definirá el tamaño de
la muestra mediante botones de radio o una lista desplegable.
Sugerencias didácticas:
• Analizar los fundamentos teóricos expuestos en clase
• Analizar cada uno de los algoritmos
• Investigar sobre el diseño de interfaz grafica en Java
• Discutir cual es el algoritmo mas efectivo y por qué.
PRÁCTICA Nº 21
Nombre:
“Frame didáctico que compare los métodos de ordenamiento externo”
Introducción:
Ordenamiento externo es un término genérico para los algoritmos de
ordenamiento que pueden manejar grandes cantidades de información. El
ordenamiento externo se requiere cuando la información que se tiene que ordenar
no cabe en la memoria principal de una computadora (típicamente la RAM) y un
tipo de memoria más lenta (típicamente un disco duro) tiene que utilizarse en el
proceso
Objetivo:
Mostar un comparativo de eficiencia de los algoritmos de ordenamiento externo en
forma gráfica.
Material y Equipo:
• Computadora
• JDK 1.6.
• JCreator Pro. Ó JCreator Le ó NetBeans (u otro IDE para Java)
Metodología:
• Definir un Frame que permita ordenar dos archivos, previamente generados
por los algortimos externos de mezcla directa y mezcla natural.
• Debera mostar una grafica comparativa donde imprima el tiempo que tardo
cada método en ordenar la misma muestra de datos
• El Frame deberá permitir al usuario generar el archivo a ordenar con
números aleatorios y con un tamaño que podrá definir con botones de
radio, chek boxes o listas deplegables.
Sugerencias didácticas:
• Analizar los fundamentos teóricos expuestos en clase
• Analizar cada uno de los algoritmos
• Investigar sobre el diseño de interfaz grafica en Java
• Discutir cual es el algoritmo mas efectivo y por qué.
PRÁCTICA Nº 22
Nombre:
“Frame didáctico que muestre el funcionamiento y compare los métodos de
búsqueda secuencial y binario ”
Objetivo:
Mostar un comparativo de eficiencia de los algoritmos de búsqueda secuencial y
binaria
Introducción:
Material y Equipo:
• Computadora
• JDK 1.6.
• JCreator Pro. Ó JCreator Le ó NetBeans (u otro IDE para Java)
Metodología:
• Definir un Frame que permita buscar un dato dado por el usuario en un
conjunto de datos mediante el algoritmo de búsqueda secuencial o
búsqueda binaria según la elección del usuario y reportar el tiempo que
tardo la búsqueda.
• Debera permitir generar un comparativo de ambas búsquedas.
• El Frame deberá permitir al usuario generar la muestra de datos con
números aleatorios y con un tamaño que podrá definir con botones de
radio, chek boxes o listas deplegables.
Sugerencias didácticas:
• Analizar los fundamentos teóricos expuestos en clase
• Analizar cada uno de los algoritmos
• Investigar sobre el diseño de interfaz grafica en Java
• Discutir cual es el algoritmo mas efectivo y por qué.
PRÁCTICA Nº 23
Nombre:
“Frame que permita realizar la búsqueda de un dato por medio de una tabla Hash”
Objetivo:
Realizar la búsqueda de datos mediante las Tablas Hash
Introducción:
Una tabla hash o mapa hash es una estructura de datos que asocia llaves o
claves con valores. La operación principal que soporta de manera eficiente es la
búsqueda: permite el acceso a los elementos (teléfono y dirección, por ejemplo)
almacenados a partir de una clave generada (usando el nombre o número de
cuenta, por ejemplo). Funciona transformando la clave con una función hash en un
hash, un número que la tabla hash utiliza para localizar el valor deseado.
Material y Equipo:
• Computadora
• JDK 1.6.
• JCreator Pro. Ó JCreator Le ó NetBeans (u otro IDE para Java)
Metodología:
• Definir un frame que permita realizar la búsqueda de un dato mediante
Tablas Hash
• El frame deberá permitir generar de manera aleatoria la lista de datos a
buscar de un tamaño definido por el usuario.
• Al finar reportara el tiempo que tardo en realizar dicha búsqueda.
Sugerencias didácticas:
• Analizar los fundamentos teóricos expuestos en clase
• Analizar cada uno de los algoritmos
• Investigar sobre el diseño de interfaz grafica en Java
• Discutir cual es el algoritmo mas efectivo y por qué.
BIBLIOGRAFÍA
1.-Estructura de Datos
Autor: Nell Dalle / Susan C. Lilly
Editorial: McGraw-Hill
3.-Programación en Java2.
Autor: Luis Joyanes Aguilar.
Editorial: McGraw-Hill
8.-Programacion en C++
Autor: Luis Joyanes Aguilar
Editorial:McGraw Hill