Capitolo 17 Introduzione alle strutture dati public class LList { /** Metodi per manipolare le liste */ /** Una lista e’ un riferimento ad un oggetto della classe Link */ private Link first; /** La classe Link definisce gli elementi della lista */ private class Link { Object data; Link next; }
/** Aggiunge un elemento in testa alla lista concatenata. @param obj l’oggetto da aggiungere */ public void addFirst(Object obj) { Link newLink = new Link(); newLink.data = obj; newLink.next = first; first = newLink; }
/** Toglie il primo elemento dalla lista concatenata. @return l’elemento eliminato */ public Object removeFirst() { if (first == null) return null; else { Object obj = first.data; first = first.next; return obj; } }
Capitolo 17 Introduzione alle strutture dati /** Restituisce il primo elemento della lista concatenata. @return il primo elemento della lista concatenata */ public Object getFirst() { if (first == null) return null; else return first.data; }
Capitolo 17 Introduzione alle strutture dati /** Toglie la prima occorrenza di un elemento dalla lista concatenata @param l’oggetto da eliminare @return true se almeno un elemento è stato eliminato dalla lista concatenata. */ public boolean remove (Object obj) { boolean found = false; Link position = first; Link previous = null;
Capitolo 17 Introduzione alle strutture dati File LListTest.java /** Programma che illustra il funzionamento della classe LList */ public class LListTest { public static void main(String[] args) { LList staff = new LList(); staff.add("Dick"); staff.add("Harry"); staff.addFirst("Romeo"); // Romeo staff.add("Juliet") staff.add("Nina"); staff.remove("Dick");
Capitolo 17 Introduzione alle strutture dati if (staff.contains("Romeo")) System.out.println("Qua Romeo c'e'"); else System.out.println("Qua Romeo non c'e'"); staff.removeFirst();
// H
J
N
staff.toPrint(); if (staff.contains("Romeo")) System.out.println("Qua Romeo c'e'"); else System.out.println("Qua Romeo non c'e'"); System.out.println("Il primo e' " + staff.getFirst()); staff.clear(); staff.toPrint();
}
}
System.out.println("...mentre ora e' tutto vuoto");
Capitolo 17 Introduzione alle strutture dati Riepilogo File LList.java /** Una lista concatenata è una sequenza di elementi dotata di meccanismi di inserimento ed eliminazione. Questa classe ha un sottoinsieme dei metodi della classe standard java.util.LList */ public class LList { /** Costruisce una lista concatenata vuota. */ public LList() { first = null; }
Capitolo 17 Introduzione alle strutture dati /** Aggiunge un elemento in fondo alla lista concatenata. @param obj l’oggetto da aggiungere */ public void add(Object obj) { Link newLink = new Link(); newLink.data = obj; newLink.next = null; if (first == null) first = newLink; else { Link l = first; while(l.next != null) l = l.next; l.next = newLink; } }
Capitolo 17 Introduzione alle strutture dati private Link first; private class Link { Object data; Link next; } /** Svuota la lista concatenata. */ public void clear ( ) { first = null; }
Capitolo 17 Introduzione alle strutture dati /** Toglie la prima occorrenza di un oggetto dalla lista concatenata @param l’oggetto da eliminare @return true se almeno un elemento è stato eliminato dalla lista concatenata. */ public boolean remove(Object obj) { boolean found = false; Link position = first; Link previous = null;
Capitolo 17 Introduzione alle strutture dati while ((!found) && (position != null)) { if ((position.data).equals(obj)) found = true; else { previous = position; position = position.next; } } if (found) if (position == first) first = first.next; else previous.next = position.next;