Esercizi – parte 2 IMPLEMENTAZIONE DI STRUTTURE DATI ELEMENTARI 1. Si implementi in Java il tipo di dato astratto Lista, dotato delle consuete operazioni cons(el), cdr() e car(). Si usi la classe Java LinkedList. 2. Si implementi in Java l’ADT Pila, con le operazioni push(el), pop(), top() e isEmpty(). Si usi la classe LinkedList. 3. Il tipo astratto DoppioStack e’ consente le seguenti operazioni: - headPush(): inserimento in testa. - tailPush(): inserimento in coda. - headPop(): rimozione e restituzione dell’elemento in testa. - tailPop(): rimozione e restituzione dell’ elemento in testa. - headTop(): restituzione (senza rimozione) dell’elemento in testa. - tailTop():restituzione (senza rimozione) dell’elemento in coda. Si implementi in Java tale tipo usando LinkedList. 4. Nella stesura di un programma per la gestione di finestre grafiche, Giovanni ha bisogno di implementare uno stack di oggetti. A tale scopo, Giovanni usa una variabile myStack di classe LinkedList, adottando la convenzione che l’elemento in posizione 0 sia quello in cima allo stack. Tra le altre, Giovanni scrive le seguenti linee di codice: ………… nextWindow = myStack.removeLast(); // finestra in cima allo stack ………… i) Che errore ha commesso Giovanni? ii) L’errore sara’ segnalato in fase di compilazione? iii) In caso negativo, come bisognerebbe procedere per evitare tale tipo di errori? COMPLESSITA’ DI ALGORITMI CHE USANO ADT ELEMENTARI 5. Si supponga di avere a disposizione l’ ADT Pila. Si supponga che Pila metta a disposizione le operazioni • push(el): inserisce l'elemento specificato da el in cima alla pila • pop(): elimina l'elemento in cima alla pila • • top(): restituisce l'elemento in cima alla pila senza cancellarlo dalla lista isEmpty(): verifica se la pila è vuota Si proponga un algoritmo con complessita’ lineare che, data una pila A, crea una seconda pila B che e’ la copia di A. L’algoritmo puo’ fare uso di 1 pila di appoggio. A deve rimanere inalterata. 6. Si supponga di avere a disposizione l’ ADT Coda. Si supponga che Coda metta a disposizione le operazioni • enqueue(el): inserisce l'elemento specificato da el in coda • dequeue(): elimina l'elemento in testa • firstEl(): restituisce l'elemento in testa senza rimuoverlo isEmpty(): verifica se la coda è vuota Si proponga un algoritmo con complessita’ lineare che, data una coda A, crea una seconda coda B che e’ la copia di A. L’algoritmo non puo’ fare uso di code di appoggio. A deve rimanere inalterata.