Laboratorio di Algoritmi e Strutture Dati Anno Accademico 2006

Laboratorio di Algoritmi e Strutture Dati
Anno Accademico 2006/2007
I appello Febbraio
5/2/07 ore 9
1 [10 punti] Aggiungere alla classe ArrayIndexList che implementa IndexList il metodo
public static ArrayIndexList clone () che restituisce in output un’istanza di ArrayIndexList identica
all’istanza di ArrayIndexList su cui il metodo è invocato. Il metodo non deve modificare l’istanza di
ArrayIndexList su cui è invocato.
2 [20 punti] Scrivere la funzione
public static boolean checkP(Stack <Interger>S1 , Stack< Interger > S2, Stack < Interger >S3)
nella classe di test ExStack1 fornita dalla docente. La funzione deve prendere in input tre stack e restituire
true se e solo se il contenuto di S1 forma una sequenza palindroma. Ad esempio se S1=<1,2,3,3,2,1>
oppure S1=<1,2,3,4,3,2,1> allora la funzione restituisce true. La funzione deve
• lasciare inalterato lo stack S1
• lanciare l’eccezione NotEmptyStackException (già inserita nella classe di test) se inizialmente S2
ed S3 non sono entrambi vuoti
• lanciare l’eccezione EmptyStackException se S1 è vuoto
La funzione non deve usare alcuna struttura dati al di fuori di S1, S2 ed S3.
3 [30 punti] Scrivere la funzione public static void writeDepth(Tree<Integer> T) che rimpiazza
l’elemento di ciascun nodo di T con la profondita del nodo. Il metodo non deve usare i metodi iterator() e
positions() di Tree. La classe di test è ExTree1.
5/2/07 ore 15
1 [10 punti] Aggiungere alla classe ArraySequence che implementa Sequence mediante un array il metodo
public ArraySequence reverse() che restituisce in output la sequenza inversa dell’istanza di
ArraySequence su cui il metodo è invocato. Ad esempio se il metodo è invocato su <d,s,r,t,q> allora viene
restituita la sequenza <q,t,r,s,d>. Il metodo non deve modificare la sequenza su cui è invocato.
2 [20 punti] Scrivere la funzione
public static boolean check(String S)
nella classe di test ExStack2 fornita dalla docente. La funzione deve restituire true se e solo se la stringa S
inizia e finisce con il carattere ‘*’ ed è formata da caratteri ‘*’ separati da al più due caratteri diversi da ‘*’.
Ad esempio se S = <*1*23**33*5*> allora la funzione restituisce true. La funzione deve usare come
struttura ausiliaria uno stack.
3 [30 punti] Aggiungere alla classe LinkedBinaryTree che implementa il TDA BinaryTree mediante una
struttura a puntatori il metodo public void attachLeaves() che trasforma ogni foglia dell’albero in un nodo
interno avente due foglie come figli. Ciascuna delle nuove foglie deve avere l’elemento settato a null.
Il metodo non deve usare i metodi iterator() e positions() di LinkedTree. La classe di test è ExBinaryTree2.
Pag. 1
Laboratorio di Algoritmi e Strutture Dati
Anno Accademico 2006/2007
I appello Febbraio
8/2/07
1 [10 punti] Scrivere la funzione public static <E> Queue<E> copia(Queue<E> Q) che prende in input
una coda e restituisce in output una coda identica a Q. La funzione copia ideve lasciare inalterato il contenuto
di Q.
La funzione deve essere inserita nella classe Copia del package relativo al TDA Stack.
2 [20 punti] Scrivere la funzione
public static Stack<Integer> mergeStack(Stack<Integer> S1, Stack<Integer> S2 )
nella classe di test ExStack3 fornita dalla docente. La funzione
• riceve in input due stack di interi disposti in ordine non decrescente dal bottom verso il top (al top
c’è l’elemento più grande)
• restituisce in output uno stack contenente tutti gli interi contenuti in S1 ed S2 in ordine non
decrescente dal bottom verso il top
• al termine deve ripristinare il contenuto originario degli stack S1 ed S2
La classe ExStack3 deve essere inserita nel package relativo al TDA Stack.
3 [30 punti] Scrivere la funzione
public static <E>Iterable<Position<E>> atDepth(BinaryTree<E> T, int k)
nella classe di test ExBinaryTree3 fornita dalla docente. La funzione deve restituire una collezionie iterabile
di tutti i nodi dell’albero che hanno profondità uguale a k. Il metodo non deve usare i metodi iterator() e
positions() di LinkedBinaryTree.
La classe ExBinaryTree3 deve essere inserita nel package relativo al TDA Binary tree.
Pag. 2