Sei sulla pagina 1di 4

Representacin de Datos o Ingenier Tcnica de Telecomunicacin Telemtica a e o a

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

Apartado 1 (0,5 puntos)


Programa el mtodo void eliminar(int num) de la clase PilaAvanzada. Este mtodo debe e e eliminar de la pila los primeros num objetos en la cima de la pila.

Apartado 2 (1,25 puntos)


Programa el mtodo void pushPila(Pila pila) de la clase PilaAvanzada. Este mtodo e e debe aadir a la cima de la pila todos los objetos de la pila que se recibe como parmetro, n a manteniendo el orden de los mismos. La pila que se recibe como parmetro debe estar vac al a a acabar el mtodo. La siguiente gura muestra un ejemplo del funcionamiento de este mtodo: e e

Apartado 3 (1,25 puntos)


Se dispone de la siguiente implementacin de un rbol binario, en la cual se supone que todos o a los mtodos mostrados estn ya programados: e a public class Arbol { private Object dato; private Arbol izda; private Arbol dcha; public public public public public public public } Programa el mtodo recursivo PilaAvanzada convertirAPila() de la clase Arbol, que dee vuelve una pila que contiene los datos de todos los nodos del arbol, ordenados en postorden (si se recorre la pila desde el fondo hacia la cima). La siguiente gura muestra un ejemplo de cmo o debe funcionar este mtodo: e Arbol(Object dato) {...} Object getDato() {...} Arbol getDcha() {...} void setDcha(Arbol dcha) {...} Arbol getIzda() {...} void setIzda(Arbol izda) {...} int tama~o() {...} n

Pista: puede resultar util que utilices el mtodo programado en el apartado 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

Potrebbero piacerti anche