Introduzione alle strutture dati

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
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
staff.add("Juliet")
staff.add("Nina");
staff.remove("Dick");
// R
// R
Dick
D
H
H
J
Harry
J
N
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
21
Horstmann-Concetti di informatica e fondamenti di Java 2
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