Liste doppie - DEIdepoli/fi2ae/slides_pw/...modello matematico della struttura dati specifica tipi...

19
1 1 Liste doppie GT: 6.2 (e 3.3) Doubly Linked Lists 2 Argomenti della lezione ADT Position NodeList interface Position PositionList class DNode NodePositionList inserzione rimozione Iteratore ADT Iterator ADT Iterable interface PositionList (2) class NodePositionList (2) class ElementIterator<E> Iteratore di Posizioni interface PositionList (3) class NodePositionList (3) liste in java.util

Transcript of Liste doppie - DEIdepoli/fi2ae/slides_pw/...modello matematico della struttura dati specifica tipi...

Page 1: Liste doppie - DEIdepoli/fi2ae/slides_pw/...modello matematico della struttura dati specifica tipi dei dati memorizzati operazioni supportate sui dati tipi dei parametri delle operazioni

1

1

Liste doppie

GT: 6.2 (e 3.3)Doubly Linked Lists

2

Argomenti della lezione

ADT PositionNodeList

interfacePositionPositionList

classDNodeNodePositionList

inserzionerimozione

IteratoreADT IteratorADT Iterableinterface PositionList (2)class NodePositionList (2)class ElementIterator<E>

Iteratore di Posizioniinterface PositionList (3)class NodePositionList (3)

liste in java.util

Page 2: Liste doppie - DEIdepoli/fi2ae/slides_pw/...modello matematico della struttura dati specifica tipi dei dati memorizzati operazioni supportate sui dati tipi dei parametri delle operazioni

2

3

ADT e interfaccie GT 2

Astrazione nelle strutture dati Abstract Data Type (ADT)

Abstract Data Type (ADT)modello matematico della struttura datispecifica

tipi dei dati memorizzatioperazioni supportate sui datitipi dei parametri delle operazioni

specifica cosa e non come

in Java: interface (GT 2.4)lista di dichiarazioni di metodi cosa fa

una classe implementa un’interfaccia come fa

4

Lista di Nodi

ADT perLista di Nodi NodeListposizione (nella lista) Position

Motivazioniaccedere direttamente ai nodiaccedere in base alla posizione di un nodo, relativamente agli altri nodi

Lista: collezione di elementi, che memorizza ciascun elemento in una posizionegli elementi sono organizzati con ordine lineare

Page 3: Liste doppie - DEIdepoli/fi2ae/slides_pw/...modello matematico della struttura dati specifica tipi dei dati memorizzati operazioni supportate sui dati tipi dei parametri delle operazioni

3

5

ADT Position

Metodo:element()ritorna l’elemento associato alla posizione

N.B.: la posizione è sempre definita relativamente ai nodi vicini

Esempi:mazzo di cartecursore in un text editor

6

ADT NodeList

Metodi:first() ritorna la posizione del primo elementolast() ritorna la posizione dell’ultimo elementoprev(p) ritorna la posizione dell’elemento che precede pnext(p) ritorna la posizione dell’elemento che segue p

Errori:first() and last(): se lista vuotaprev(p): se p è primo elementonext(p): se p è ultimo elemento

N.B.: non c’è riferimento all’elementosi suppone che le posizioni siano valide

Page 4: Liste doppie - DEIdepoli/fi2ae/slides_pw/...modello matematico della struttura dati specifica tipi dei dati memorizzati operazioni supportate sui dati tipi dei parametri delle operazioni

4

7

ADT NodeList (cont.)

Metodi di aggiornamento:set(p,e)

rimpiazza l’elemento alla posizione p con l’elemento eritorna l’elemento che era in p

addFirst(e) inserisce l’elemento e come primo elementoaddLast(e) inserisce l’elemento e come ultimo elementoaddBefore(p,e) inserisce l’elemento e prima della pos. paddAfter(p,e) inserisce l’elemento e dopo la pos. premove(p)

invalida la posizione pritorna l’elemento che era in p

8

ADT NodeList (cont.)

Errori se la posizione passata come argomento non è valida

p == nullp era stato cancellatop posizione di una lista diversa

nei metodiprev(p): se p è prima posizionenext(p): se p è ultima posiozione

Page 5: Liste doppie - DEIdepoli/fi2ae/slides_pw/...modello matematico della struttura dati specifica tipi dei dati memorizzati operazioni supportate sui dati tipi dei parametri delle operazioni

5

9

Esempio

10

Interface Position

Page 6: Liste doppie - DEIdepoli/fi2ae/slides_pw/...modello matematico della struttura dati specifica tipi dei dati memorizzati operazioni supportate sui dati tipi dei parametri delle operazioni

6

11

Interface PositionList

12

Interface PositionList (cont.)

Page 7: Liste doppie - DEIdepoli/fi2ae/slides_pw/...modello matematico della struttura dati specifica tipi dei dati memorizzati operazioni supportate sui dati tipi dei parametri delle operazioni

7

13

Nodo

Nodo: implementa Positionper Lista di Nodi

class DNode implements Postion<E>

es.: Position<String> p = new DNode<String>();

prev next

elem node

oggetto di tipo DNode<String>

Position<String> p contieneriferimento ad oggetto di tipoDNode<String>

p

14

class DNode (1/2) prev next

elem node

Page 8: Liste doppie - DEIdepoli/fi2ae/slides_pw/...modello matematico della struttura dati specifica tipi dei dati memorizzati operazioni supportate sui dati tipi dei parametri delle operazioni

8

15

class DNode (2/2) prev next

elem node

16

Lista doppia con sentinelle: class NodePositionList

nodes/positions

elements

PositionList<String> p = new NodePositionList<String>();

p

trailer

header

4numElts oggetto di tipoNodePositionList<String>

riferimento adoggetto di tipoPositionList<String>

Page 9: Liste doppie - DEIdepoli/fi2ae/slides_pw/...modello matematico della struttura dati specifica tipi dei dati memorizzati operazioni supportate sui dati tipi dei parametri delle operazioni

9

17

class NodePositionList

costruttore

trailer

header

21

1

2trailer

header

0numElts

1

18

class NodePositionList: CheckPosition

controlla se la Position p è valida

Page 10: Liste doppie - DEIdepoli/fi2ae/slides_pw/...modello matematico della struttura dati specifica tipi dei dati memorizzati operazioni supportate sui dati tipi dei parametri delle operazioni

10

19

class NodePositionList: ... CheckPosition

cast: da Position a DNode

20

class NodePositionList

Page 11: Liste doppie - DEIdepoli/fi2ae/slides_pw/...modello matematico della struttura dati specifica tipi dei dati memorizzati operazioni supportate sui dati tipi dei parametri delle operazioni

11

21

Inserzione

addBefore(p, X)

A B C

p

A B C

XnewNode

p

A B X C

pnewNode

22

class NodePositionList (addBefore)

v

2

A B X C

p1

3

newNode

1

2

3

Page 12: Liste doppie - DEIdepoli/fi2ae/slides_pw/...modello matematico della struttura dati specifica tipi dei dati memorizzati operazioni supportate sui dati tipi dei parametri delle operazioni

12

23

class NodePositionList (remove)

p

v vNextvPrev

24

Argomenti della lezione

ADT PositionNodeList

interfacePositionPositionList

classDNodeNodePositionList

inserzionerimozione

IteratoreADT IteratorADT Iterableinterface PositionList (2)class NodePositionList (2)class ElementIterator<E>

Iteratore di Posizioniinterface PositionList (3)class NodePositionList (3)

liste in java.util

Page 13: Liste doppie - DEIdepoli/fi2ae/slides_pw/...modello matematico della struttura dati specifica tipi dei dati memorizzati operazioni supportate sui dati tipi dei parametri delle operazioni

13

25

ADT Iterator

per scandire una collezione, un elemento alla volta

metodiboolean hasNest()

controlla se ci sono ancora elementi inesploratiObject next()

ritorna prossimo riferimento a prossimo elemento

il metodo remove() in genere non si implementa

26

ADT Iterable

per collezioni che possono essere scandite con Iterator

metodo:iterator(): ritorna un Iterator sulla collezione

esempio: seconda versione interfaccia PositionList

Page 14: Liste doppie - DEIdepoli/fi2ae/slides_pw/...modello matematico della struttura dati specifica tipi dei dati memorizzati operazioni supportate sui dati tipi dei parametri delle operazioni

14

27

Esempio uso iteratore in PositionList

nella classe NodePositionList

Esempio uso per metodo toString()

es.: fare con StringBuffer

28

Esempio classe iteratore per PositionList

Page 15: Liste doppie - DEIdepoli/fi2ae/slides_pw/...modello matematico della struttura dati specifica tipi dei dati memorizzati operazioni supportate sui dati tipi dei parametri delle operazioni

15

29

Iteratore di posizioni (in PositionList)

aggiunta del metodo positions() all’ interfaccia PositionListritorna un oggetto Iterable con le posizioni

terza versione interfaccia PositionList

30

Iteratore di posizioni (in PositionList)

aggiunta del metodo positions() nella classe NodePositionListritorna un oggetto Iterable con le posizioni

Page 16: Liste doppie - DEIdepoli/fi2ae/slides_pw/...modello matematico della struttura dati specifica tipi dei dati memorizzati operazioni supportate sui dati tipi dei parametri delle operazioni

16

31

Costrutto Java 5 For-Each Loop GT: 6.3.2

Non aggiunge alcuna nuova funzionalità al linguaggio,è utile per semplificare la formulazione di cicliSintassi :

Dichiarazione di una variabile; il tipo della variabile deve essere compatibile con il tipo degli oggetti della collezione/array su cui viene effettuata l’iterazione

Espressione denota un array o un oggetto collezione di tipo IterableIterable

Statement è l’istruzione semplice o composta che viene iterata, che costituisce il corpo del ciclo

forfor ( ( DeclarationDeclaration : : ExpressionExpression ) Statement;) Statement;

32

Esempio con array

String primi[] = new String[] { "2", "3", "5", "7" };String txt= " ";

for (int i = 0; i < primi.length; i ++ )

txt = txt + " " + primi[i];

for ( String str: primi )

txt = txt + " " + str;

Ciclo for normale

Ciclo For-Each su arrayDichiarazione Espressione

Statement

Page 17: Liste doppie - DEIdepoli/fi2ae/slides_pw/...modello matematico della struttura dati specifica tipi dei dati memorizzati operazioni supportate sui dati tipi dei parametri delle operazioni

17

33

Esempio con oggetto collezione

List<String> parole = new ArrayList<String>(); // inserimento dati in oggetto collezione “parole”parole.add("a1"); parole.add("b2"); parole.add("c3");txt= " ";

Iterator<String> it = parole.iterator();while ( it.hasNext() ) {

String str = it.next();txt = txt + " " + str;

}

for ( String str: parole ) {txt = txt + " " + str;

}

Ciclo con Iterator

Ciclo For-Each

34

6.3.4 java.util.LinkedList

non ha concetto di posizioneusa un cursore sulla lista: posizione tra due elementiMetodi di LinkedListIterator:

add(e): aggiunge elemento e alla posizione del cursorehasNext(): hasPrevious(): previous(): ritorna l’elemento prec. e sposta indietro il cursore next(): ritorna l’elemento seguente e sposta avanti il cursore

nextIndex(): ritorna l’indice dell’elemento precedentepreviousIndex(): ritorna l’indice dell’elemento seguenteset(e): rimpiazza con e l’ultimo el. ritornato da next o previousremove(): rimuove l’ultimo el. ritornato da next o previous

Page 18: Liste doppie - DEIdepoli/fi2ae/slides_pw/...modello matematico della struttura dati specifica tipi dei dati memorizzati operazioni supportate sui dati tipi dei parametri delle operazioni

18

35

6.3.4 problema iteratori multipli

iteratori multipli su una stessa collezionese un iteratore modifica la collezione: sono guai!!

Java.util: fail fastinvalida tutti gli altri

interfaccia java.util.Listclassi

java.util.ArrayListjava.util.LinkedList

36

6.4 Java Collections Framework in java.util

InterfaccieCollection: estende Iterable ha metodo iterator()IteratorList: estende Collection, metodo listIterator()ListIterator: vedi slides prec.Map: mappa chiavi a valoriQueue: coda con nomi suoiSet: insiemi

classe java.util.LinkedListmetodi ADT deque (GT 5.3) e ADT arrayList (GT 6.1)

Page 19: Liste doppie - DEIdepoli/fi2ae/slides_pw/...modello matematico della struttura dati specifica tipi dei dati memorizzati operazioni supportate sui dati tipi dei parametri delle operazioni

19

37

6.4.3 ADT Sequence

metodi ADT deque (GT 5.3), ADT arrayList (GT 6.1) e ADT nodelist (GT 6.2).

+ due metodi di conversione indice posizione

38

Esercizi

C- 6.6: come gestire il caso in cui la posizione p appartenga ad un’altra lista?

sugg.: identificare a che collezione appartiene la posizione convariabile nell’oggetto Positionmetodo in collezione

C- 6.15: come implementare iteratori fail fast, se la collezione viene modificata?

sugg.: tenere contatore versione collezione