Tratti da ©2002 Apogeo srlHorstmann-Concetti di informatica e fondamenti di Java 2 1
Capitolo 17 Introduzione alle strutture dati
Liste
Introduzione alle strutture dati
Tratti da ©2002 Apogeo srlHorstmann-Concetti di informatica e fondamenti di Java 2 2
Capitolo 17 Introduzione alle strutture dati
Una lista concatenata di stringhe
Tratti da ©2002 Apogeo srlHorstmann-Concetti di informatica e fondamenti di Java 2 3
Capitolo 17 Introduzione alle strutture dati
public class LList{
/** Metodi per manipolare le liste */
/** Una lista e’ un riferimento ad un oggetto dellaclasse Link */
private Link first;
/** La classe Link definisce gli elementi della lista */private class Link{
Object data;Link next;
}
Tratti da ©2002 Apogeo srlHorstmann-Concetti di informatica e fondamenti di Java 2 4
Capitolo 17 Introduzione alle strutture dati
/** Costruisce una lista concatenata vuota.
*/public LList(){
first = null;}
LinkedList
nullfirst
Tratti da ©2002 Apogeo srlHorstmann-Concetti di informatica e fondamenti di Java 2 5
Capitolo 17 Introduzione alle strutture dati
Aggiunta di un elemento in testa a una lista concatenata
Tratti da ©2002 Apogeo srlHorstmann-Concetti di informatica e fondamenti di Java 2 6
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 srlHorstmann-Concetti di informatica e fondamenti di Java 2 7
Capitolo 17 Introduzione alle strutture dati
Eliminazione del primo elemento di una lista concatenata
Tratti da ©2002 Apogeo srlHorstmann-Concetti di informatica e fondamenti di Java 2 8
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 srlHorstmann-Concetti di informatica e fondamenti di Java 2 9
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 srlHorstmann-Concetti di informatica e fondamenti di Java 2 10
Capitolo 17 Introduzione alle strutture dati
����������������
Bob
null
temp
Aggiungere un elemento in fondo a una lista concatenata
Tratti da ©2002 Apogeo srlHorstmann-Concetti di informatica e fondamenti di Java 2 11
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 srlHorstmann-Concetti di informatica e fondamenti di Java 2 12
Capitolo 17 Introduzione alle strutture dati
Togliere un elemento da una lista concatenata
positionprevious
Tratti da ©2002 Apogeo srlHorstmann-Concetti di informatica e fondamenti di Java 2 13
Capitolo 17 Introduzione alle strutture dati
/**Toglie la prima occorrenza di un elemento dallalista concatenata@param l’oggetto da eliminare @return true se almeno un elemento è stato eliminatodalla lista concatenata.
*/
public boolean remove (Object obj)
{
boolean found = false;
Link position = first;
Link previous = null;
Tratti da ©2002 Apogeo srlHorstmann-Concetti di informatica e fondamenti di Java 2 14
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 srlHorstmann-Concetti di informatica e fondamenti di Java 2 15
Capitolo 17 Introduzione alle strutture dati
/**Controlla la presenza di un oggetto nellalista 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;
elsel = l.next;
return found;}
}
Tratti da ©2002 Apogeo srlHorstmann-Concetti di informatica e fondamenti di Java 2 16
Capitolo 17 Introduzione alle strutture dati
Aggiungere un elemento nella parte centraledi una lista concatenata
Tratti da ©2002 Apogeo srlHorstmann-Concetti di informatica e fondamenti di Java 2 17
Capitolo 17 Introduzione alle strutture dati
Visione concreta di una lista concatenata
Tratti da ©2002 Apogeo srlHorstmann-Concetti di informatica e fondamenti di Java 2 18
Capitolo 17 Introduzione alle strutture datiFile 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"); // R � D � H � J � Nstaff.remove("Dick"); // R � H � J � N
staff.toPrint();
Tratti da ©2002 Apogeo srlHorstmann-Concetti di informatica e fondamenti di Java 2 19
Capitolo 17 Introduzione alle strutture dati
if (staff.contains("Romeo"))System.out.println("Qua Romeo c'e'");
elseSystem.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'");
elseSystem.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 srlHorstmann-Concetti di informatica e fondamenti di Java 2 20
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 srlHorstmann-Concetti di informatica e fondamenti di Java 2 21
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 srlHorstmann-Concetti di informatica e fondamenti di Java 2 22
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 srlHorstmann-Concetti di informatica e fondamenti di Java 2 23
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 srlHorstmann-Concetti di informatica e fondamenti di Java 2 24
Capitolo 17 Introduzione alle strutture dati
/**Controlla la presenza di un oggetto nellalista 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;
elsel = l.next;
return found;}
}
25
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
Tratti da ©2002 Apogeo srlHorstmann-Concetti di informatica e fondamenti di Java 2 26
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;}
}