Cap. 17 - Dipartimento di Informatica

9 downloads 105 Views 729KB Size Report
Horstmann-Concetti di informatica e fondamenti di Java 2. 1. Capitolo 17 Introduzione alle strutture di dati. Capitolo 17. Introduzione alle strutture di dati ...
Capitolo 17 Introduzione alle strutture di dati

Capitolo 17 Introduzione alle strutture di dati

©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2

1

Capitolo 17 Introduzione alle strutture di dati

Figura 1 Inserire un elemento in una lista concatenata

©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2

2

Capitolo 17 Introduzione alle strutture di dati

Figura 2 Un iteratore di lista

©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2

3

Capitolo 17 Introduzione alle strutture di dati

Figura 3 Una visione astratta dell’iteratore di lista ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2

4

File ListTest.java

Capitolo 17 Introduzione alle strutture di dati

import java.util.LinkedList; import java.util.ListIterator; /** Programma che illustra il funzionamento della classe LinkedList */ public class ListTest { public static void main(String[] args) { LinkedList staff = new LinkedList(); staff.addLast("Dick"); staff.addLast("Harry"); staff.addLast("Romeo"); staff.addLast("Tom"); // il segno ¦ nei commenti indica la posizione dell’iteratore ListIterator iterator = staff.listIterator(); // ¦DHRT iterator.next(); // D¦HRT iterator.next(); // DH¦RT ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2

5

Capitolo 17 Introduzione alle strutture di dati // aggiunge altri elementi dopo il secondo iterator.add("Juliet"); // DHJ¦RT iterator.add("Nina"); // DHJN¦RT iterator.next(); // DHJNR¦T // toglie l’ultimo elemento traversato iterator.remove(); // DHJN¦T // stampa tutti gli elementi iterator = staff.listIterator(); while (iterator.hasNext()) System.out.println(iterator.next()); } } ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2

6

Capitolo 17 Introduzione alle strutture di dati

Figura 4 Aggiunta di un anello alla testa di una lista concatenata ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2

7

Capitolo 17 Introduzione alle strutture di dati

Figura 5 Togliere un anello dalla testa di una lista concatenata ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2

8

Capitolo 17 Introduzione alle strutture di dati

Figura 6 Togliere un anello dalla parte centrale di una lista concatenata ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2

9

Capitolo 17 Introduzione alle strutture di dati Figura 7 Aggiungere un anello nella parte centrale di una lista concatenata

©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2

10

Capitolo 17 Introduzione alle strutture di dati File LinkedList.java import java.util.NoSuchElementException; /** Una lista concatenata è una sequenza di anelli dotata di efficienti meccanismi di inserimento ed eliminazione. Questa classe ha un sottoinsieme dei metodi della classe standard java.util.LinkedList */ public class LinkedList { /** Costruisce una lista concatenata vuota. */ public LinkedList() { first = null; } ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2

11

Capitolo 17 Introduzione alle strutture di dati /** Restituisce il primo elemento della lista concatenata. @return il primo elemento della lista concatenata */ public Object getFirst() { if (first == null) throw new NoSuchElementException(); return first.data; } /** Toglie il primo elemento dalla lista concatenata. @return l’elemento eliminato */

©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2

12

Capitolo 17 Introduzione alle strutture di dati public Object removeFirst() { if (first == null) throw new NoSuchElementException(); 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; } ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2

13

Capitolo 17 Introduzione alle strutture di dati /** Restituisce un iteratore per percorrere questa lista. @return un iteratore per percorrere questa lista */ public ListIterator listIterator() { return new LinkedListIterator(); } private Link first; private class Link { public Object data; public Link next; } private class LinkedListIterator implements ListIterator { /** Costruisce un iteratore che punta alla testa della lista concatenata. */

14

Capitolo 17 Introduzione alle strutture di dati public LinkedListIterator() { position = null; previous = null; } /** Sposta l’iteratore dopo l’elemento successivo. @return l’elemento attraversato */ public Object next() { if (!hasNext()) throw new NoSuchElementException(); previous = position; // memorizza per remove if (position == null) position = first; else position = position.next; return position.data; }

©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2

15

Capitolo 17 Introduzione alle strutture di dati /** Controlla se c’è un elemento dopo la posizione dell’iteratore. @return true se c’è un elemento dopo la posizione dell’iteratore */ public boolean hasNext() { if (position == null) return first != null; else return position.next != null; } /** Aggiunge un elemento prima della posizione dell’iteratore e sposta l’iteratore dopo l’elemento inserito. @param obj l’oggetto da aggiungere */ public void add(Object obj) { if (position == null) { addFirst(obj); position = first; 16 }

Capitolo 17 Introduzione alle strutture di dati else { Link newLink = new Link(); newLink.data = obj; newLink.next = position.next; position.next = newLink; position = newLink; } previous = null; } /** Toglie l’ultimo elemento attraversato. Questo metodo può essere chiamato soltanto dopo una chiamata al metodo next(). */ public void remove() { if (position == first) { removeFirst(); position = first; }

©2002 Apogeo

17

Capitolo 17 Introduzione alle strutture di dati else { if (previous == null) throw new IllegalStateException(); previous.next = position.next; position = previous; } previous = null; } /** Imposta il dato presente nell’ultimo elemento attraversato. @param obj il dato da impostare */ public void set(Object obj) { if (position == null) throw new NoSuchElementException(); position.data = obj; } private Link position; private Link previous; } }

©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2

18

File ListIterator.java

Capitolo 17 Introduzione alle strutture di dati

import java.util.NoSuchElementException; /** Una iteratore di lista consente l’accesso a una posizione in una lista concatenata. Questa interfaccia contiene un sottoinsieme dei metodi dell’interfaccia standard java.util.ListIterator, in quanto i metodi per l’attraversamento all’indietro sono esclusi. */ public interface ListIterator { /** Sposta l’iteratore dopo l’elemento successivo. @return l’elemento attraversato */ Object next(); /** Controlla se c’è un elemento dopo la posizione dell’iteratore. @return true se c’è un elemento dopo la posizione dell’iteratore

19

Capitolo 17 Introduzione alle strutture di dati */ boolean hasNext(); /** Aggiunge un elemento prima della posizione dell’iteratore e sposta l’iteratore dopo l’elemento inserito. @param obj l’oggetto da aggiungere */ void add(Object obj); /** Toglie l’ultimo elemento attraversato. Questo metodo può essere chiamato soltanto dopo una chiamata al metodo next(). */ void remove(); /** Imposta il dato presente nell’ultimo elemento attraversato. @param obj il dato da impostare */ void set(Object obj); } ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2

20

Capitolo 17 Introduzione alle strutture di dati

Figura 8 Visione concreta di una lista concatenata ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2

21

Capitolo 17 Introduzione alle strutture di dati

Figura 9 Visione astratta di una lista concatenata

©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2

22

Capitolo 17 Introduzione alle strutture di dati

Figura 10 Visione concreta di un lettore

©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2

23

Capitolo 17 Introduzione alle strutture di dati

Figura 11 Visione astratta di un vettore

©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2

24