doc

annuncio pubblicitario
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.
Scarica