Lucidi PDF - Dipartimento di Informatica

3 downloads 164 Views 302KB Size Report
Tratti da ©2002 Apogeo srl. Horstmann-Concetti di informatica e fondamenti di Java 2. 1. Capitolo 17 Introduzione alle strutture dati. Liste. Introduzione alle ...
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