Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Legans, 17 de Septiembre de 2008 e Duracin de la prueba: 2 h. 15 min. o No se permite el uso de libros ni apuntes. Puntuacin: 6 puntos sobre 10 del examen. o Contesta cada problema en hojas separadas.
Problema 1 (3 puntos)
La clase Pila, ya programada, proporciona una implementacin bsica de una pila, con los o a mtodos push, pop y estaVacia: e public class Pila { (...) void push(Object o) {...} Object pop() {...} boolean estaVacia() {...} /* true si est vaca, false si no */ a } Se desea programar una clase llamada PilaAvanzada que herede de la clase Pila anterior e implemente los mtodos adicionales descritos en los apartados 1 y 2. e
Problema 2 (3 puntos)
La clase Lista representa una coleccin lineal de datos organizados en forma de lista enlazada. o Esta lista presenta la peculiaridad de que almacena una referencia a un nodo concreto de la lista, al que apunta la referencia posicion, sobre el cual se realizan las operaciones de insercin o y extraccin de datos. o La referencia posicion debe poder avanzar y retroceder por la lista posicin a posicin. Por o o ello, resulta adecuado que la lista est doblemente enlazada, esto es, que cada nodo guarde una e referencia no slo al nodo que lo sigue en la lista, sino tambin al nodo que lo precede. La o e siguiente gura ilustra la estructura de la lista con un ejemplo:
Las operaciones bsicas que debe permitir realizar esta lista son las siguientes: a Avanzar la referencia posicion: la referencia se mueve hacia delante tantas posiciones como se indique. Si la lista est vac o el nmero de posiciones a avanzar no es mayor que a a, u cero, no se hace nada. Si se pide avanzar ms posiciones de las que quedan en la lista, a posicion avanzar slo hasta el ultimo nodo. Si posicion apunta a null antes de avanzar, a o se coloca en el primer nodo de la lista, y a continuacin se avanza el nmero de posiciones o u indicado, descontando una (por ejemplo, si se pide avanzar 5 posiciones y posicion apunta a null inicialmente, primero se coloca apuntando al primer nodo, y despus se avanzan 4 e posiciones desde este). Retroceder la referencia posicion: no se explica porque no se pide implementar esta operacin. o Insertar un nuevo dato en la lista: se inserta un nuevo nodo para guardar este dato, inmediatamente a continuacin de posicion, esto es, el nodo nuevo seguir al actualmente o a referenciado por posicion. Cuando posicion es null, el nuevo nodo se inserta en la primera posicin de la lista. Al nalizar la insercin, la referencia posicion debe apuntar al nuevo o o nodo introducido. Extraer un dato de la lista: devuelve el dato del nodo apuntado por posicion, borra dicho nodo, y avanza posicion al siguiente nodo (queda apuntando a null si no hay siguiente nodo). Si posicion es null, no se extrae nada y se devuelve null. A continuacin se muestra un extracto del cdigo de la clase Lista: o o public class Lista { private Nodo primero; private Nodo posicion; /** * Avanza "posicion" un nmero de posiciones u 3
*/ public void avanzar(int posiciones) { // apartado 1 } /** * Retrocede "posicion" un nmero de posiciones u */ public void retroceder(int posiciones) { // no se pide implementarlo } /** * Inserta un dato en a continuacin de "posicion" o */ public void insertar(Object dato) { // apartado 2 } /** * Borra el Nodo que apunta "posicion". Si no hay nodos o el ultimo est a * al final no borra nada. */ public Object extraer() { // apartado 3 } } La clase Nodo se declara a continuacin. Se puede suponer que ya est programada. Ntese o a o que, para simplicar el cdigo a programar en este examen, sus atributos se declaran como o pblicos, por lo que no se proporcionan mtodos get ni set para ellos: u e public class Nodo { public Nodo siguiente; public Nodo anterior; public Object dato; public Nodo(Nodo siguiente, Object dato) {...} public Nodo(Object dato) {...} }
Apartado 1 (1 punto)
Programa el mtodo avanzar. e
Apartado 2 (1 punto)
Programa el mtodo insertar. e
Apartado 3 (1 punto)
Programa el mtodo extraer. e