Esercizio laboratorio (Java 0) Presentato oggi: lista semplice (senza er) Raccolto stampato nel turno successivo di laboratorio Dovrà essere indicato: cognome e nome matricola turno laboratorio tempo impiegato per lo svolgimento tempo aspettato <= 3 ore obiettivo (per esame finale): 1 ora 1 Lista semplice GT 3.2 (Singly Linked Lists) 2 1
Lista semplice next collezione di nodi ciascun nodo memorizza elemento riferimento al successivo (next) elem Node ordine nodi: determinato dai riferimenti al next non ha un numero prefissato di elementi (dinamica) Lista A B C D 3 Nodo Node element next rappr. grafica MSP semplificata public class Node { // Instance variables: private String element; // we assume elements are character strings private Node next; /** Creates a node with null references to its element and next node. */ public Node() { this(null, null); /** Creates a node with the given element and next node. */ public Node(String s, Node n) { element = s; next = n; // Accessor methods: public String getelement() { return element; public Node getnext() { return next; // Modifier methods: public void setelement(string newelem) { element = newelem; public void setnext(node newnext) { next = newnext; 4 2
class SLinkedList public class SLinkedList { // instance variables protected Node ; // the of the list protected Node ; // the of the list protected long nnodes; // the number of nodes in the list SLinkedList /** Default constructor */ public SLinkedList() { = null; = null; nnodes = 0; nnodes //... update and search methods would go here... // end class 5 Inserzione in testa (addfirst) il metodo deve funzionare anche se la lista è vuota == null 6 3
Inserzione in coda (addlast) a) prima di inserzione b) nuovo nodo c) dopo inserzione NB: il next di viene aggiornato prima di cambiare il valore di 7 Rimozione del primo nodo (removefirst) a) prima di rimozione b) rimozione c) dopo rimozione eccezione: se la lista è vuota 8 4
Altri metodi Rimozione nodo in coda (ultimo nodo) Dobbiamo avere riferimento al penultimo nodo accessibile solo scorrendo tutta la lista O(n) boolean find(string s) void sort() void append (SlinkedList list1) // argomento implicito this Es. a.append(b); SlinkedList concat (SlinkedList list1) //non distruttiva Es.: SlinkedList c = a.concat(b); Costruttore : SLinkedList (String [] vet_str) 9 Proposta di esercizio matricole pari (1) Implementare una lista semplice con elementi di tipo int. Per l implementazione utilizzare le classi Node e SLinkedList opportunamente modificate. (2) Aggiungere alla classe SLinkedList il metodo split() che crea e ritorna una nuova lista formata dai soli valori dispari estratti dalla lista argomento implicito del metodo. Cio avviene senza la creazione di nuovi nodi ma con la sola modifica dei riferimenti. Vedi anche figura di seguito riportata. La lista originaria, dopo l applicazione del metodo split(), conterrà solo i valori pari. (3) Scrivere un main (da subito) per la verifica del corretto funzionamento dei metodi della classe. 10 5
Proposta di esercizio matricole pari V PRIMA 22 30 37 11 18 12 23 V DOPO 22 30 37 11 18 12 23 D Dalla lista originaria V viene estratta la lista dei dispari D. Ciò avviene senza la creazione di nuovi nodi e con la sola modifica dei riferimenti. La lista V, dopo l estrazione della lista D, conterrà solo valori pari. 11 Proposta di esercizio matricole dispari La classe MyString realizza il tipo di dato MyString (stringa di caratteri). La struttura dati interna utilizzata per rappresentare un oggetto di tipo MyString è una lista concatenata semplice. Come esercizio fornire il codice: (1) del costruttore della classe che, a partire da un oggetto di tipo String, costruisce un oggetto di tipo MyString; Ricordare: char c = st1.charat(i) st1 list oggetto MyString corrispondente all oggetto String ABCDEFG di tipo String A B C D E F G 12 6
Proposta di esercizio matricole dispari (2) del metodo int compareto(mystring str) per il confronto (nell ordinamento alfabetico) di due oggetti MyString; il metodo ritorna 1 se il this oggetto è minore dell oggetto str passato come argomento, 0 se gli oggetti sono uguali, 1 se il primo è maggiore del secondo. (3) Scrivere (da subito) un main per la verifica del corretto funzionamento dei metodi della classe. st1 list st1.compareto(str) str list A B C D E F G A B C Z E F 13 Proposta di esercizio matricole dispari class MyString { class Node { //classe interna private char ch; //carattere private Node nxt; //successivo private Node( char cha, Node nx ) { ch = cha; nxt = nx; //fine classe interna protected Node list; public MyString(String st) { // FORNIRE IL CODICE DEL COSTRUTTORE public int compareto( MyString str ) { // FORNIRE IL CODICE DEL METODO 14 7
Proposta di esercizio matricole dispari // inserire metodi: addfirst e addlast // remove facoltativo public void print() { System.out.println(); System.out.print("Stringa: " + '"'); Node p = list; while ( p!= null ) { System.out.print(p.ch); p = p.nxt; System.out.println(); return; //end class MyString 15 8