Capitolo 17 Introduzione alle strutture dati Liste Introduzione alle strutture dati Tratti da ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2 1 Capitolo 17 Introduzione alle strutture dati Una lista concatenata di stringhe Tratti da ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2 2 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; } Tratti da ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2 3 Capitolo 17 Introduzione alle strutture dati /** Costruisce una lista concatenata vuota. */ public LList() { first = null; } LinkedList first null Tratti da ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2 4 Capitolo 17 Introduzione alle strutture dati Aggiunta di un elemento in testa a una lista concatenata Tratti da ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2 5 Capitolo 17 Introduzione alle strutture dati /** 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; } Tratti da ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2 6 Capitolo 17 Introduzione alle strutture dati Eliminazione del primo elemento di una lista concatenata Tratti da ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2 7 Capitolo 17 Introduzione alle strutture dati /** 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; } } Tratti da ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2 8 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; } Tratti da ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2 9 Capitolo 17 Introduzione alle strutture dati temp Link Bob null Aggiungere un elemento in fondo a una lista concatenata Tratti da ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2 10 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 temp = first; while(temp.next != null) temp = temp.next; temp.next = newLink; } } Tratti da ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2 11 Capitolo 17 Introduzione alle strutture dati previous position Togliere un elemento da una lista concatenata Tratti da ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2 12 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; Tratti da ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2 13 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; return found; } Tratti da ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2 14 Capitolo 17 Introduzione alle strutture dati /** Controlla la presenza di un oggetto nella lista concatenata @param l’oggetto da controllare @return true se almeno un’occorrenza dell’elemento è trovata */ public boolean contains(Object obj) { boolean found = false; Link l = first; while ((!found) && (l != null) if ((l.data).equals(obj)) found = true; else l = l.next; return found; } } Tratti da ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2 15 Capitolo 17 Introduzione alle strutture dati Aggiungere un elemento nella parte centrale di una lista concatenata Tratti da ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2 16 Capitolo 17 Introduzione alle strutture dati Visione concreta di una lista concatenata Tratti da ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2 17 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 Dick Harry staff.add("Juliet") staff.add("Nina"); staff.remove("Dick"); // R D H J N // R H J N staff.toPrint(); Tratti da ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2 18 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"); Tratti da ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2 19 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; } Tratti da ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2 20 Capitolo 17 Introduzione alle strutture dati public Object removeFirst() { if (first == null) return null; else { Object obj = first.data; first = first.next; return obj; } } /** 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; } Tratti da ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2 21 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; } } Tratti da ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2 22 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; } Tratti da ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2 23 Capitolo 17 Introduzione alle strutture dati /** Controlla la presenza di un oggetto nella lista concatenata @param l’oggetto da controllare @return true se almeno un’occorrenza dell’elemento è trovata */ public boolean contains(Object obj) { boolean found; Link l = list; while ((!found) && (l != null) if ((l.data).equals(obj)) found = true; else l = l.next; return found; } } Tratti da ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2 24 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; ©2002 Apogeo 25 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; } return found; } Tratti da ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2 26