[AddSums] Si scriva una classe
AddSumsStack contentente il metodo statico
addSums:
import lab2.*; import lab2.Exceptions.*; class AddSumsStack {
|
Si assume che la pila s contenga solo istanze
di Integer. Il metodo addSums inserisce prima di
ogni elemento x della pila s ricevuta in input
la somma di tutti gli elementi di s che sono stati inseriti dopo
di x. Se la pila è vuota, il metodo aggiunge alla pila un solo
elemento contenente 0. Il metodo restituisce la somma degli
elementi della pila originale.
Per testare la classe
AddSumsStack, si compili ed esegua la classe UseAddSumsStack.
L'output deve essere ESATTAMENTE il seguente:
Stato della pila prima di
'addSums': 7 6 5 4 3 2 1 Totale elementi pila: 28 Stato della pila dopo di 'addSums': 7 7 6 13 5 18 4 22 3 25 2 27 1 28 Chiamo 'addSums' sulla pila
vuota... |
[Complementari]
Due sequenze di interi K = (k[0], k[1], k[2], ..., k[n]) e J = (j[0], j[1], j[2], ..., j[n]) sono complementari se hanno la stessa lunghezza e per ogni i in {0, 1, 2, ..., n}, k[i] è pari se e solo se j[n-i] è dispari. Ad esempio,
K = (1, 2, 3, 4, 5) e J = ( 6, 5, 4, 3,
2) sono complementari
K =
(0, 24, 32) e J = ( 1, 3,
45) sono
complementari
K = (1, 23, 4, 52) e J = ( 65,
4, 32, 2) non sono complementari
K = (1, 2, 3) e J = (5,
4) non sono
complementari (perché di lunghezza diversa)
Utilizzando le pile e le code, si scriva una classe Complementari contente il metodo:
static boolean complementari (Queue K, Queue J);che restituisce true se le sequenze di elementi passate come argomenti sono complementari, false altrimenti.
import
lab2.*;
public class OrdinaList extends LinkedList {
public void ordina( int n ) {
|
Si completi la classe precedente in maniera che il metodo ordina ordini gli elementi della lista (che si assume siano istanze dell'interfaccia Comparable) in modo crescente. Si scriva un semplice progamma per testare il metodo.
[RichLinkedList] Definire l'interfaccia RichList che estende List con i metodi seguenti.
[MixedIntersection] Si scriva la classe
MixedIntersection, contenente il metodo statico
intersect:
import lab2.*;
public class MixedIntersection {
|
Il metodo intersect, senza modificare né la
pila s né la lista l passate per argomento, deve
restituire una coda che contenga tutti gli oggetti comuni (cioè gli elementi
equals) alla pila s e alla lista
l. Il metodo deve lanciare una
IllegalArgumentException se uno dei due parametri è
null.
Per testare il metodo, si
scarichi e si esegua la classe (già compilata) TestMixedIntersection.class.
Soluzione: CreaStampa.java
Si scriva la classe Bilanciato che estende TreeSet e fornisce i seguenti metodi:
|
Per testare i metodi, si compili e si esegua la classe TestBilanciato.java. Se i metodi sono corretti, l'output sarà ESATTAMENTE il seguente:
|
|
Si consiglia di scrivere con precisione una definizione ricorsiva della
funzione mezzeFoglie (ad esempio in un
commento) prima di scrivere il codice. Indicare esplicitamente che tipo di
visita dell'albero si usa.
Per testare il metodo, si compili e si esegua
la classe TestMezzeFoglie.java.
Se il metodo è corretto, l'output sarà ESATTAMENTE il seguente:
Le mezze foglie del primo albero sono 5 |
public Object mediano ( ) |
che restituisce il nodo contenente il valore mediano dell'insieme se
l'insieme non è vuoto, restituisce null
altrimenti.
Testare il metodo con un semplice programma di verifica.
Soluzione: TreeSet3.java
[Potenti] Dato un albero
binario (non necessariamente di ricerca) i cui nodi contengono interi, un nodo
viene definito potente se l'intero in esso contenuto e' strettamente
maggiore della somma dei valori contenuti nei nodi del sottoalbero destro
e sinistro.
Sia dato il seguente frammento di programma
import lab2.*;
public class ContaPotente { public static int contaPotenti ( BinNode r )
{ |
Si completi la classe precedente, in maniera che il metodo
contaPotenti restituisca il numero di nodi potenti che sono
contenuti nell'albero di radice r.
Per testare la classe
ContaPotente, si compili ed esegua la classe TestContaPotente.java.
L'output deve essere ESATTAMENTE il seguente:
Provo il metodo ContaPotente.contaPotenti()...
Albero vuoto: [valore atteso] 0 [valore ottenuto] 0 Albero con un nodo: [valore atteso] 1 [valore ottenuto] 1 Albero con un nodo: [valore atteso] 5 [valore ottenuto] 5 |
Si scriva la classe LevelsToList che contiente il metodo
public static List levelsToList (BinNode r)
; // da completare } |
Il metodo levelsToList deve restituire una lista contente
tutti gli oggetti dell'albero binario avente come radice
r, ordinati secondo il seguente criterio
Ad esempio, se applicato al seguente
albero,
il metodo
restituisce la lista [50, 20, 70, 10, 40, 90, 30, 80, 100, 35].
Scrivere un metodo main che costruisce un albero binario, ci applica il
metodo levelsToList e stampa il risultato.
Soluzione:
LevelsToList
[Le classi
ListUtils
e TreeUtils
forniscono alcuni utili metodi per manipolare liste e alberi binari].