Tutoría 3: Estructuras de Datos Lineales (Pilas y Colas) y Estrategia de Examen
1. Resumen Ejecutivo
Esta sesión se centró en la corrección técnica de la Actividad 1, detallando la implementación manual de Pilas (Stacks) y Colas (Queues) mediante Nodos, sin el uso de librerías auxiliares. Se revisaron los algoritmos paso a paso para los métodos fundamentales (push/insert, pop/remove, search). Finalmente, se ofreció una estrategia crítica para el examen final: gestión del tiempo, configuración del entorno de desarrollo (IDE) y tipología de ejercicios.
2. Conceptos Clave Nodo (Node):* Unidad básica de almacenamiento que contiene el dato (data) y un puntero/referencia al siguiente elemento (next).
- Pila (Stack): Estructura LIFO (Last In, First Out). El último en entrar es el primero en salir. Se gestiona principalmente con un puntero
TOP. - Cola (Queue): Estructura FIFO (First In, First Out). El primero en entrar es el primero en salir. Requiere punteros a
HEAD(inicio) yTAIL(fin). - Linked List (Librería): Su uso está prohibido en esta asignatura para implementar las estructuras; debe hacerse manualmente con nodos.
- Skeleton Code: Estructura de código parcial que se proporcionará en el examen para ser rellenada.
3. Desarrollo del Temario###3.1. Feedback General y Errores ComunesEl profesor destacó puntos críticos que afectan la calificación y serán vitales en el examen:
- Prohibición de Librerías: Usar
LinkedListen lugar de crear la estructura de nodos manualmente penaliza gravemente (en la actividad se aprobó con un 5.0 por "pena", pero en el examen es suspenso). - Uso de IA: Se detecta fácilmente. Usarla en prácticas impide desarrollar la lógica necesaria para el examen, donde no habrá ayuda.
- Documentación (Memorias): Una buena memoria no es solo texto; debe incluir capturas del código y explicaciones de por qué se elaboró el método de esa forma.
- Comentarios: El código debe estar comentado para facilitar su reutilización y lectura.
3.2. Implementación de PILA (Stack)Se debe estructurar una clase PILA (o dentro de ella la clase NODO).
Atributos* TOP: Tipo Nodo. Referencia a la cima.
SIZE(Opcional): Entero para contar elementos.
Métodos PrincipalesConstructor (Pila Vacía):
Método PUSH (Insertar):
Añadir un elemento a la cima.
- Crear Nodo: Se instancia el nuevo nodo (queda "flotando en el aire").
- Enlazar: El puntero
.nextdel nuevo nodo debe apuntar al antiguoTOP. - Actualizar TOP: El puntero
TOPpasa a ser el nuevo nodo. - Actualizar Size: Si usas el atributo, incrementa +1.
Método POP (Eliminar/Sacar):
Condición vital: Si TOP == NULL, retornar NULL.
- Guardar Dato: Almacenar el valor de
TOPen una variable auxiliar para retornarlo al final. -
Mover Puntero:
TOPse actualiza aTOP.next(el segundo elemento pasa a ser el primero)."Al mover el TOP al segundo elemento, el primero se elimina lógicamente (se pierde la referencia)."
-
Retornar: Devolver el valor guardado.
Método SEARCH (Buscar):
Recorrido lineal desde el TOP hacia abajo.
- ¡OJO AL DATO!: Para comparar valores, **usar
.equals()**y no==.Explicación: El operador
==en Java cachea valores entre -128 y 127. Fuera de ese rango, puede fallar al comparar objetos enteros..equals()es seguro.
Método TOSTRING:
Formato libre, pero se recomienda imprimir "HEAD" y luego los elementos salto de línea por salto de línea para visualización vertical. Si está vacía, debe imprimir "EMPTY STACK".
3.3. Implementación de COLA (Queue)Requiere dos punteros para eficiencia: HEAD (Cabeza) y TAIL (Cola).
Método INSERT (Enqueue)Añadir elemento al final.
- Caso 1: Cola Vacía.
-
Tanto
HEADcomoTAILapuntan al nuevo nodo. -
Caso 2: Cola con elementos.
TAIL.nextapunta al nuevo nodo (enlazamos el último actual con el nuevo).- Actualizamos el puntero
TAILpara que sea el nuevo nodo. - Incrementar
SIZE.
Método REMOVE (Dequeue)Sacar elemento del principio (HEAD).
- Si está vacía, retornar
NULL. - Guardar el valor de
HEAD. HEADpasa a serHEAD.next.- ¡OJO AL DATO!: Si tras eliminar, la lista queda vacía (solo había 1 elemento), hay que asegurar que
TAILtambién se actualice (posiblemente a null, dependiendo de la implementación lógica).
3.4. Estrategia "Elite" para el Examen FinalEl profesor reveló detalles técnicos cruciales sobre la prueba final.
Estructura del Examen
- Duración: 2 Horas.
- Formato: 2 Ejercicios de programación (Java).
- Ejercicio A: Valor 4 puntos (Más corto/sencillo).
-
Ejercicio B: Valor 6 puntos (Más largo/complejo).
-
Entorno: IDE (Eclipse, IntelliJ, etc.) totalmente vacío/limpio.
- Recomendación: El día anterior, vacía tu IDE. Guarda proyectos antiguos en un USB si quieres, pero llega al examen con el workspace limpio para evitar acusaciones de copia.
Táctica de Resolución>
"Yo si fuera vosotros, empezaría por el de 4 puntos. Os lo quitáis en media hora, os sube la moral y vais más ligeros al de 6 puntos. Si empezáis por el de 6 y os atascáis, podéis perder el tiempo y no hacer ninguno."
Contenido Esperado
- No se repiten ejercicios idénticos a los de clase, pero sí la estructura.
- Se proporcionará un esqueleto de código (Clases vacías, nombres de métodos definidos). Tú rellenas la lógica.
- Temas probables: Métodos sobre Árboles (Actividad 2) o Grafos, siguiendo la lógica de manipular nodos y referencias.
4. Preguntas de Autoevaluación
- Sobre comparación de objetos: En el método
search, ¿por qué debemos usarnodo.data.equals(valor)en lugar denodo.data == valor? - Sobre punteros en Pilas: Al realizar un
pushen una pila, ¿cuál es el orden correcto de asignación de punteros para no perder la referencia a la lista existente? - Sobre Colas: Si tienes una Cola con un solo elemento y ejecutas
remove(), ¿qué punteros deben actualizarse? - Estrategia: ¿Qué penalización tiene usar
java.util.LinkedListen el examen final? - Entorno: ¿Qué debes hacer con tu IDE antes de comenzar el examen oficial?