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