Il tipo astratto di dati Node List
|
|
- Fortunato Ranieri
- 6 anni fa
- Visualizzazioni
Transcript
1 Il tipo astratto di dati Node List Tipo di dati e operazioni Tipi di dati: oggetti arbitrari (come al solito) Operazioni: Metodi generici: - integer size() - boolean isempty() Metodi di accesso: - Position first(): Restituisce la posizione del primo elemento della lista - Position last(): Restituisce la posizione dell ultimo elemento della lista - Position prev(position p): Restituisce la posizione dell elemento che precede l elemento in posizione p - Position next(position p): Restituisce la posizione dell elemento che segue l elemento in posizione p
2 Il tipo astratto di dati Node List Tipo di dati e operazioni Metodi di aggiornamento: - E set(position p, E e): Rimpiazza l'elemento in posizione p con e, restituendo l'elemento che prima era in posizione p - addbefore (Position p, E e): Inserisce l elemento e nella posizione che precede la posizione p - addafter(position p, E e): Inserisce l elemento e nella posizione che segue la posizione p - addfirst(e e): Inserisce l elemento e come primo elemento - addlast(e e): Inserisce l'elemento e come ultimo elemento - E remove(position p): Rimuove e restituisce l elemento in posizione p
3 Il tipo astratto di dati Node List Eccezioni InvalidPositionException Viene lanciata quando viene specificata come argomento una posizione non valida (ad esempio la posizione è null oppure è inesistente) BoundaryViolationException Viene lanciata quando si tenta di accedere ad una posizione al di fuori della lista (ad esempio si chiama il metodo next sull'ultima posizione della lista) EmptyListException Viene lanciata quando si invocano i metodi first() o last() su una lista vuota
4 Il tipo astratto di dati Node List L'interfaccia Position package position; public interface Position<E> { E element();
5 Il tipo astratto di dati Node List L'interfaccia PositionList public interface PositionList<E> {... public int size(); public boolean isempty(); public Position<E> first() throws EmptyListException; public Position<E> last() throws EmptyListException; public Position<E> next(position<e> p) throws InvalidPositionException, BoundaryViolationException; public Position<E> prev(position<e> p) throws InvalidPositionException, BoundaryViolationException; public void addfirst(e e); public void addlast(e e);
6 Il tipo astratto di dati Node List L'interfaccia PositionList public interface PositionList<E> {... public void addafter(position<e> p, E e) throws InvalidPositionException; public void addbefore(position<e> p, E e) throws InvalidPositionException; public E remove(position<e> p) throws InvalidPositionException; public E set(position<e> p, E e) throws InvalidPositionException;
7 Il tipo astratto di dati Node List Implementazione basata su liste dopp. concatenate header trailer Liste doppiam. concatenate NODI ADT Lista POSIZIONI I nodi della lista doppiamente concatenata implementano le posizioni dell'adt node list
8 Il tipo astratto di dati Node List Implementazione dell'interfaccia Position public class DNode<E> implements Position<E> { private DNode<E> prev, next; private E element; public DNode(DNode<E> newprev, DNode<E> newnext, E elem) { prev = newprev; next = newnext; element = elem; public E element() { if ((prev == null) && (next == null)) throw new InvalidPositionException("La posizione non e` in una lista!"); return element; public DNode<E> getnext() { return next; public DNode<E> getprev() { return prev; public void setnext(dnode<e> newnext) { next = newnext; public void setprev(dnode<e> newprev) { prev = newprev; public void setelement(e newelement) { element = newelement;
9 Il tipo astratto di dati Node List Implementazione dell'interfaccia PositionList import position.*; public class NodePositionList<E> implements PositionList<E> {... protected int numelts; // Numero di elementi nella lista protected DNode<E> header, trailer; // Nodi sentinella public NodePositionList() { numelts = 0; header = new DNode<E>(null, null, null); trailer = new DNode<E>(header, null, null); header.setnext(trailer);
10 Il tipo astratto di dati Node List Implementazione dell'interfaccia PositionList public class NodePositionList<E> implements PositionList<E> {... public int size() { return numelts; public boolean isempty() { return (numelts == 0); public Position<E> first() throws EmptyListException { if (isempty()) throw new EmptyListException("La lista e` vuota"); return header.getnext(); public Position<E> last() throws EmptyListException { if (isempty()) throw new EmptyListException("La lista e` vuota"); return trailer.getprev();...
11 Il tipo astratto di dati Node List Implementazione dell'interfaccia PositionList public class NodePositionList<E> implements PositionList<E> {... protected DNode<E> checkposition(position<e> p) throws InvalidPositionException { if (p == null) throw new InvalidPositionException ("Null passato come posizione"); if (p == header) throw new InvalidPositionException ("header non e` una posizione valida di una lista"); if (p == trailer) throw new InvalidPositionException ("trailer non e` una posizione valida di una lista"); try { DNode<E> temp = (DNode<E>) p; if ((temp.getprev() == null) (temp.getnext() == null)) throw new InvalidPositionException ("La posizione non fa parte di una lista"); return temp; catch (ClassCastException e) { throw new InvalidPositionException ("Il tipo della posizione non e` valido per questa lista");...
12 Il tipo astratto di dati Node List Implementazione dell'interfaccia PositionList public class NodePositionList<E> implements PositionList<E> {... public Position<E> prev(position<e> p) throws InvalidPositionException, BoundaryViolationException { DNode<E> v = checkposition(p); DNode<E> prev = v.getprev(); if (prev == header) throw new BoundaryViolationException ("non posso retrocedere oltre l'inizio della lista"); return prev;... public Position<E> next(position<e> p) throws InvalidPositionException, BoundaryViolationException { DNode<E> v = checkposition(p); DNode<E> next = v.getnext(); if (next == trailer) throw new BoundaryViolationException ("non posso avanzare oltre la fine della lista"); return next;
13 Il tipo astratto di dati Node List Implementazione dell'interfaccia PositionList public class NodePositionList<E> implements PositionList<E> {... public void addafter(position<e> p, E element) throws InvalidPositionException { DNode<E> v = checkposition(p); numelts++; DNode<E> newnode = new DNode<E>(v, v.getnext(), element); v.getnext().setprev(newnode); v.setnext(newnode);... public void addfirst(e element) { numelts++; DNode<E> newnode = new DNode<E>(header, header.getnext(), element); header.getnext().setprev(newnode); header.setnext(newnode);
14 Il tipo astratto di dati Node List Implementazione dell'interfaccia PositionList public class NodePositionList<E> implements PositionList<E> { public E remove(position<e> p) throws InvalidPositionException { DNode<E> v = checkposition(p); numelts--; DNode<E> vprev = v.getprev(); DNode<E> vnext = v.getnext(); vprev.setnext(vnext); vnext.setprev(vprev); E velem = v.element(); // scollega la posizione dalla lista rendendola invalida v.setnext(null); v.setprev(null); return velem;
15 Esercizio Merge sort L'algoritmo merge sort è un algoritmo di ordinamento che ordina una sequenza di elementi ricorsivamente nel modo seguente: 1. divide la sequenza in due sequenze non ordinate, ciascuna avente taglia circa la metà della sequenza originale; 2. ordina separatamente ciascuna delle due sequenze; 3. fonde le due sequenze ordinate in un'unica sequenza ordinata. Dare un'implementazione del merge sort usando l'adt Lista. Si assuma che gli elementi da ordinare siano di tipo Integer.
16 Soluzione Merge sort public static void mergesort(positionlist<integer> L){ int n = L.size(); if (n < 2) return; PositionList<Integer> L1 = new NodePositionList<Integer>(); PositionList<Integer> L2 = new NodePositionList<Integer>(); for (int i = 0; i < n/2; i++) L1.addLast(L.remove(L.first())); for (int i = n/2; i < n; i++) L2.addLast(L.remove(L.first())); mergesort(l1); mergesort(l2); merge(l1,l2,l);
17 Soluzione Merge sort public static void merge(positionlist<integer> L1, PositionList<Integer> L2, PositionList<Integer> L){ while (!L1.isEmpty() &&!L2.isEmpty()) if (L1.first().element() <= L2.first().element()) L.addLast(L1.remove(L1.first())); else L.addLast(L2.remove(L2.first())); while(!l1.isempty()) // sposta i rimanenti elementi di L1 L.addLast(L1.remove(L1.first())); while(!l2.isempty()) // sposta i rimanenti elementi di L2 L.addLast(L2.remove(L2.first()));
18 Iteratore A cosa serve Una operazione molto frequente sugli ADT array list e lista di nodi è quella di scandire la collezione di elementi un elemento alla volta Esempi: - cercare uno specifico elemento - visualizzare ordinatamente gli elementi della collezione - determinare il numero di occorrenze di un dato elemento - sommare tutti gli elementi di una collezione
19 Iteratore A cosa serve Un iteratore è un software design pattern che permette la scansione di un qualsiasi ADT che astrae una collezione ordinata di elementi Un iteratore può essere visto come una estensione del concetto di posizione (position): - l'adt position incapsula il concetto di posto - un iteratore incapsula il concetto di posto e di posto successivo
20 Iteratore Esempio Data una collezione ordinata di oggetti (array list, node list) A B C D
21 Iteratore Esempio Data una collezione ordinata di oggetti (array list, node list) A B C D un iteratore è un nuovo ADT che ci permette di scandire la collezione
22 Iteratore Esempio Data una collezione ordinata di oggetti (array list, node list) A B C D ADT iteratore A un iteratore è un nuovo ADT che ci permette di scandire la collezione
23 Iteratore Esempio Data una collezione ordinata di oggetti (array list, node list) A B C D ADT iteratore B un iteratore è un nuovo ADT che ci permette di scandire la collezione
24 Iteratore Esempio Data una collezione ordinata di oggetti (array list, node list) A B C D ADT iteratore C un iteratore è un nuovo ADT che ci permette di scandire la collezione
25 Iteratore Esempio Data una collezione ordinata di oggetti (array list, node list) A B C D ADT iteratore D un iteratore è un nuovo ADT che ci permette di scandire la collezione
26 Iteratore Definizione del tipo astratto di dati Un iteratore può essere definito come un ADT che supporta i seguenti due metodi: - public boolean hasnext(): determina se ci sono altri elementi nell'iteratore - public E next(): restituisce l'elemento successivo in un iteratore
27 Iteratore Definizione del tipo astratto di dati Un iteratore può essere definito come un ADT che supporta i seguenti due metodi: - public boolean hasnext(): determina se ci sono altri elementi nell'iteratore - public E next(): restituisce l'elemento successivo in un iteratore eccezione: NoSuchElementException quando next() viene invocato su una collezione vuota o sull'ultimo elemento della collezione
28 Iteratore Definizione del tipo astratto di dati Un iteratore può essere definito come un ADT che supporta i seguenti due metodi: - public boolean hasnext(): determina se ci sono altri elementi nell'iteratore - public E next(): restituisce l'elemento successivo in un iteratore eccezione: NoSuchElementException quando next() viene invocato su una collezione vuota o sull'ultimo elemento della collezione java fornisce un iteratore con l'interfaccia java.util.iterator
29 Iteratore Implementazione un iteratore viene solitamente associato ad uno degli ADT ad accesso sequenziale (array list, lista di nodi) un iteratore permette di accedere a tutti gli oggetti della collezione nell'ordine lineare stabilito il primo elemento di un iteratore si ottiene dalla prima chiamata del metodo next() (assumendo che l'iteratore contenga almeno un elemento) un iteratore deve essere indipendente dal modo con cui è organizzata la collezione di oggetti a cui è associato
30 Iteratore Implementazione Vogliamo un meccanismo uniforme per scandire una struttura dati ad accesso sequenziale: dobbiamo fare in modo che tutti i tipi astratti di dati ad accesso sequenziale supportino il seguente metodo: Iterator<E> iterator(): restituisce un iteratore degli elementi della collezione
31 Iteratore Implementazione Vogliamo un meccanismo uniforme per scandire una struttura dati ad accesso sequenziale: dobbiamo fare in modo che tutti i tipi astratti di dati ad accesso sequenziale supportino il seguente metodo: Iterator<E> iterator(): restituisce un iteratore degli elementi della collezione in Java 5 questo metodo è fornito dall'interfaccia java.lang.iterable
32 Iteratore Implementazione La nostra implementazione deve consentire di tener traccia del punto della collezione indicato dal cursore dell'iteratore creare un nuovo iteratore consiste semplicemente nel creare un oggetto iteratore che rappresenta un cursore posto prima del primo elemento della collezione usando la prima volta il metodo next(), si sposta il cursore sul primo elemento della collezione successive invocazioni del metodo next() ci permetteranno di scandire tutti gli elementi della collezione il metodo hasnext() ci permette di capire quando abbiamo finito di scandire tutta la collezione (va usato prima di invocare next())
33 Iteratore (lista di nodi) Modifica dell'interfaccia PositionList<E> Aggiungiamo il metodo iterator() all'interfaccia PositionList<E>: public interface PositionList<E> {...
34 Iteratore (lista di nodi) Modifica dell'interfaccia PositionList<E> Aggiungiamo il metodo iterator() all'interfaccia PositionList<E>: import java.util.iterator; public interface PositionList<E> extends Iterable<E>{... public Iterator<E> iterator(); Nelle prossime diapositive vediamo come implementare questo metodo
35 Iteratore (lista di nodi) La classe ElementIterator<E> import java.util.iterator; import position.*; public class ElementIterator<E> implements Iterator<E>{ protected PositionList<E> list; // la lista su cui implem. l'iteratore protected Position<E> cursor; // indica la successiva posizione public ElementIterator(PositionList<E> L) { list = L; cursor = (list.isempty())? null : list.first(); public boolean hasnext() { return (cursor!= null); public E next() throws NoSuchElementException { if (cursor == null) throw new NoSuchElementException("No next element"); E toreturn = cursor.element(); cursor = (cursor == list.last())? null : list.next(cursor); return toreturn; public void remove() {
36 Iteratore (lista di nodi) Il metodo iterator() nella classe NodePositionList Aggiungiamo l'implementazione del metodo iterator() (che usa la classe ElementIterator<E>) alla classe NodePositionList<E> che implementa l'interfaccia PositionList<E>: public class NodePositionList<E> implements PositionList<E> {... public Iterator<E> iterator() {return new ElementIterator<E>(this);
37 Merge sort Scansione della lista con un iteratore public static void main(string[] args) { PositionList<Integer> L1 = new NodePositionList<Integer>(); L1.addLast(7); L1.addLast(5); L1.addLast(2); L1.addLast(4); L1.addLast(1); L1.addLast(8); mergesort(l1); Iterator<Integer> I = L1.iterator(); while (I.hasNext()) System.out.print(I.next()+" ");
38 Esercizio di test Scrivere un metodo public static void remove (PositionList<Integer> L, Integer i) che rimuova da una lista L di interi tutte le occorrenze dell'intero i.
39 Iteratore sulle posizioni Per gli ADT con Position Negli ADT che supportano la nozione di position (come la lista di nodi) possiamo fare una scansione delle posizioni oltre che degli elementi?
40 Iteratore sulle posizioni Per gli ADT con Position Negli ADT che supportano la nozione di position (come la lista di nodi) possiamo fare una scansione delle posizioni oltre che degli elementi? Possiamo fornire anche il metodo: positions(): restituisce un oggetto Iterable contenente le posizioni della collezione come suoi elementi
41 Iteratore sulle posizioni Per gli ADT con Position Aggiungiamo il metodo positions() all'interfaccia PositionList<E>: import java.util.iterator; public interface PositionList<E> extends Iterable<E>{... public Iterator<E> iterator(); public Iterable<Position<E>> positions();
42 Iteratore sulle posizioni (nodelist) Implementazione del metodo positions() public class NodePositionList<E> implements PositionList<E> {... public Iterable<Position<E>> positions() {// crea una lista di posizioni PositionList<Position<E>> P = new NodePositionList<Position<E>>(); if (!isempty()) { Position<E> p = first(); while (true) { P.addLast(p); // aggiunge la posizione p come ultimo elemento di P if (p == last()) break; p = next(p); return P; // restituisce P come oggetto Iterable public Iterator<E> iterator() {return new ElementIterator<E>(this);
43 Iteratore sulle posizioni (nodelist) Implementazione del metodo positions() Cosa fa il metodo positions()? Il metodo positions() se invocato su una lista L crea una nuova lista P contenente le posizioni di L La lista P viene restituita come un oggetto Iterable<Position<E>> Ciò ci permette di invocare il metodo iterator() su P per ottenere facilmente un iteratore sulle posizioni della lista originale L
44 Ritorniamo al nostro esercizio Uso del metodo positions() Scrivere un metodo public static void remove (PositionList<Integer> L, Integer i) che rimuova da una lista L di interi tutte le occorrenze dell'intero i.
45 Ritorniamo al nostro esercizio Soluzione public static void remove(positionlist<integer> L, Integer i){ Iterable<Position<Integer>> It = L.positions(); Iterator<Position<Integer>> I = It.iterator(); while (I.hasNext()){ Position<Integer> p = I.next(); if (p.element().equals(i)) L.remove(p); public static void main(string[] args) { PositionList<Integer> L1 = new NodePositionList<Integer>();... remove(l1,1); Iterator<Integer> I = L1.iterator(); while (I.hasNext()) System.out.print(I.next()+" ");
46 For-each-loop for(iterator<type> iter = expression.iterator(); iter.hasnext();){ Type name = iter.next(); loop_statement for(type name : expression){ loop_statement
47 For-each-loop for(iterator<type> iter = expression.iterator(); iter.hasnext();){ Type name = iter.next(); loop_statement for(iterator<position<e>> iter = positions.iterator(); iter.hasnext();){ Position<E> pos = iter.next(); System.out.println(pos.element()); for(type name : expression){ loop_statement
48 For-each-loop for(iterator<type> iter = expression.iterator(); iter.hasnext();){ Type name = iter.next(); loop_statement for(iterator<position<e>> iter = positions.iterator(); iter.hasnext();){ Position<E> pos = iter.next(); System.out.println(pos.element()); for (Position<E> pos: positions) System.out.println(pos.element()); for(type name : expression){ loop_statement
49 For-each-loop Attenzione: per poter usare il for-each-loop è necessario utilizzare le interfacce java.lang.iterable e java.util.iterator
50 Ritorniamo al nostro esercizio Uso del metodo positions() e del for-each-loop Scrivere un metodo public static void remove (PositionList<Integer> L, Integer i) che rimuova da una lista L di interi tutte le occorrenze dell'intero i.
51 Ritorniamo al nostro esercizio Soluzione con il for-each-loop public static void remove(positionlist<integer> L, Integer i){ for (Position<Integer> p : L.positions()) if (p.element().equals(i)) L.remove(p); public static void main(string[] args) { PositionList<Integer> L1 = new NodePositionList<Integer>();... remove(l1,1); for (Integer i : L1) System.out.print(i+" ");
Implementazione della coda con liste concatenate. x v. il front della coda è memorizzato nel primo nodo (head) della lista
Liste concatenate Implementazione della coda con liste concatenate head (front della coda) tail (rear della coda) Ø e y a x v il front della coda è memorizzato nel primo nodo (head) della lista il rear
DettagliListe doppie. Doubly Linked Lists. GT: 6.2 (e 3.3) Argomenti della lezione
Liste doppie GT: 6.2 (e 3.3) Doubly Linked Lists 1 Argomenti della lezione ADT Position NodeList interface Position PositionList class DNode NodePositionList inserzione rimozione Iteratore ADT Iterator
DettagliRipasso di Java. A.A. 16/17 DA1 A. Pietracaprina 1
Ripasso di Java A.A. 16/17 DA1 A. Pietracaprina 1 1 Programma Stand-alone File: MyProgram.java import ; // import a package or a class public class MyProgram { public static void main(string[] args) {..
DettagliSTRUTTURE DATI: OLTRE GLI ARRAY LISTE
STRUTTURE DATI: OLTRE GLI ARRAY le strutture dati progettate per ospitare una collezione di elementi, sono variazioni di array Ma l'array ha dimensione fissa anche in Java determinata a priori, in linguaggi
DettagliAlberi binari ( 7.3)
Alberi binari ( 7.3) + a 3 b Albero Binario ( 7.3) DEFINIZIONE Albero Binario è un albero ordinato in cui ogni nodo ha al più due figli. Un albero binario si dice proprio se ogni nodo ha o zero o figli
DettagliSul pattern Iterator
Sul pattern Iterator 1 Introduzione Capita spesso di aver a che fare con strutture dati complesse, come ad esempio, liste, code, ecc. È buona norma accedere a queste strutture senza esporre la loro organizzazione.
DettagliCOLLEZIONI. SOMMARIO Collezioni: Liste: ITERATORI ITERATORI
SOMMARIO Collezioni: Array e liste. Iteratori. Classi interne. Nodi: dati e riferimenti. Liste: LinkedList: specifica e implementazione. Prestazioni. COLLEZIONI Una collezione (contenitore) è un oggetto
DettagliAlberi ( GT. 7 ) In informatica, un albero è un modello astratto con cui viene rappresentata una struttura gerarchica
Alberi ( GT. 7 ) Albero definizioni Albero ADT (Abstract Data Type) Algoritmi di base su alberi Alberi binari Strutture dati per rappresentare alberi Implementazione AlberoBinario 1 Alberi (GT. 7) In informatica,
DettagliMetodi di una Collection
Java Collections Introduzione Una java collection (a volte chiamata anche container) è un oggetto che raggruppa più elementi dello stesso tipo in una singola unità. Tipicamente è utilizzata per raggruppare
DettagliImplementazione ADT: Alberi
Implementazione ADT: Alberi Livelli di astrazione 2001/2002 1 Esercitazione 5 (E6): alberi (tree) albero struttura dati fondamentale, soprattutto per le operazioni di ricerca tipi di albero con radice
DettagliLe liste. ADT e strutture dati per la rappresentazione di sequenze. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez. 5
Le liste ADT e strutture dati per la rappresentazione di sequenze L ADT delle liste Una lista di valori di tipo A è una sequenza finita: a1, a2, L, an dove ai A, per ogni i valore lunghezza posizione L
DettagliEsempio su strutture dati dinamiche: ArrayList
Esempio su strutture dati dinamiche: ArrayList 1 ArrayList Abbiamo detto che gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito al momento della creazione
DettagliADT Mappa. Le chiavi (il mezzo per accedere agli elementi) hanno lo scopo di rendere efficiente la ricerca. Strutture Dati
ADT Mappa Una mappa è un contenitore di elementi del tipo (k,v) dove k è la chiave e v è il suo corrispondente valore ogni elemento (k,v) viene detto entrata (entry) della mappa entrate multiple con la
DettagliAlbero Binario GT 7.3. interfacce di Positio<E>, Tree<E>, e BinaryTree<E>; il file TestLinkedBinaryTree.java
Laboratorio Java Albero Binario GT 7.3 Esercitazione Sono dati : interfacce di Positio, Tree, e BinaryTree; il file TestLinkedBinaryTree.java e i file.class che implementano le interfacce www.dei.unipd.it/corsi/fi2ae
DettagliImplementazione Java di un ADT
Implementazione Java di un ADT Primo passo definire l'interfaccia (API) dell' ADT (l'api descrive i nomi dei metodi che l'adt supporta e come essi sono dichiarati e usati) Secondo passo scrivere il codice
DettagliCapitolo 17. Introduzione alle strutture di dati. Capitolo 17 Introduzione alle strutture di dati
Capitolo 17 Introduzione alle strutture di dati 1 Figura 1 Inserire un elemento in una lista concatenata 2 Figura 2 Un iteratore di lista 3 Figura 3 Una visione astratta dell iteratore di lista 4 File
DettagliAlberi. Definizioni principali
Definizioni principali Un albero è una struttura dati che contiene oggetti organizzati gerarchicamente (a differenza della lista di nodi, dell'array list, i cui elementi sono organizzati linearmente) radice
DettagliBank. Bank. BankAccount. Bank. Bank. private BankAccount[] conti; // Posizione attuale private int posizioneattuale;...
Bank BankAccount Bank Bank Bank BankAccount private BankAccount[] conti; // Posizione attuale private int posizioneattuale;... Bank Bank public Bank(String nome, String internationalcode, int dimensione)
DettagliEsempio su strutture dati dinamiche: ArrayList
Esempio su strutture dati dinamiche: ArrayList Fondamenti di Informatica L-B 1 ArrayList Abbiamo detto che gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito
DettagliADT Dizionario. Come nella Mappa: Diversamente dalla Mappa:
Come nella Mappa: un Dizionario è un contenitore di elementi del tipo (k,v) dove k è la chiave e v è il suo corrispondente valore. ogni elemento (k,v) viene detto entrata (entry) del Dizionario. chiavi
Dettaglise invoco un metodo di Object che è ridefinito in Point, viene invocato il metodo definito in Point
Gli HashSet Tipo predefinito che rappresenta insiemi di Object Cosa succede se... Posso mettere un riferimento a un Point in una variabile Object Object o=new Point(12,3); è quasi tutto come se l oggetto
DettagliCapitolo 14 Introduzione alle strutture di dati. Cay S. Horstmann Concetti di informatica e fondamenti di Java quarta edizione
Capitolo 14 Introduzione alle strutture di dati Cay S. Horstmann Concetti di informatica e fondamenti di Java quarta edizione Obiettivi del capitolo Capire come utilizzare le liste concatenate presenti
DettagliGenerics & Collections
Generics & Collections Ingegneria del software Jody Marca jody.marca@polimi.it I Generics 2 I Generics rendono possibile definire tipi parametrici tramite classi ed interfacce che gestiscono tipi generici
DettagliQUEUE : considerazioni. QUEUE : considerazioni. QUEUE : esempio. QUEUE : esempio
QUEUE : considerazioni QUEUE : considerazioni Si è realizzata una struttura dati complessa utilizzandone una primitiva, l array. Il pregio di tale implementazione è il basso costo computazionale, mentre
DettagliPolimorfismo parametrico vs polimorfismo per inclusione
Polimorfismo parametrico vs polimorfismo per inclusione Esercizio Definire il tipo di dato Stack con operazioni Push( element ) Pop() Non forzare una specifica implementazione Non forzare un tipo specifico
Dettagli22 - Strutture Dati (Java Collections Framework)
22 - Strutture Dati (Java Collections Framework) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/
DettagliImplementazione con alberi binari di ricerca
public class LinkedBinaryTree implements BinaryTree { /** Espande una foglia in un nodo interno con due foglie come figli */ public void expandexternal(position v, E l, E r) throws InvalidPositionException
DettagliArgomenti della lezione. Tipo di dato astratto. Array. Tipo di dato Lista. Liste Implementazione di liste in Java Stack Code
Argomenti della lezione! Tipi di dato astratti! Strutture dati elementari Liste Implementazione di liste in Java Stack Code! Esempi di applicazione Tipo di dato astratto! Tipo di dato astratto o ADT (Abstract
DettagliEsempio su strutture dati dinamiche: ArrayList
Esempio su strutture dati dinamiche: ArrayList 1 ArrayList! Abbiamo detto che gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito al momento della creazione
DettagliIl TDA Dictionary. Definizione informale. I metodi del TDA Dictionary 1. Applicazioni. I metodi del TDA Dictionary 2. I metodi del TDA Dictionary 3
Il TDA Dictionary Definizione informale Il TDA Dictionary (dizionario) modella una collezione di voci su cui è possibile effettuare delle ricerche Una voce è una coppia (chiave, elemento) Le principali
DettagliEsercizio. Scrivere una classe ListMap<K, V> che implementa la mappa con una lista. Strutture Dati
Esercizio Scrivere una classe ListMap che implementa la mappa con una lista Esercizio Si scriva un metodo public static PositionList preorder(linkedbinarytree T) che preso in
DettagliCorso: Strutture Dati Docente: Annalisa De Bonis
Heap Corso: Strutture Dati Docente: Annalisa De Bonis Definizione l Un heap è un albero binario che contiene entrate della forma (key, value) nei suoi nodi e soddisfa le seguenti proprietà: l Heap-Order:
DettagliAstrazioni sul controllo. Iteratori
Astrazioni sul controllo Iteratori Nuove iterazioni Definendo un nuovo tipo come collezione di oggetti (p. es., set) si vorrebbe disporre anche di un operazione che consenta cicli (iterazioni) Es.: gli
DettagliCapitolo 16. Programmazione generica. Cay S. Horstmann Concetti di informatica e fondamenti di Java quarta edizione
Capitolo 16 Programmazione generica Cay S. Horstmann Concetti di informatica e fondamenti di Java quarta edizione Obiettivi del capitolo Capire gli obiettivi della programmazione generica Essere in grado
DettagliL' ADT grafo è un contenitore di elementi memorizzati nelle posizioni del grafo (vertici e archi)
L' ADT grafo è un contenitore di elementi memorizzati nelle posizioni del grafo (vertici e archi) le informazioni possono essere memorizzate sia sui vertici sia sugli archi del grafo Metodi fondamentali
DettagliLaboratorio 9 ( Java 4 ) Classe astratta per BFS su grafo
Laboratorio 9 ( Java ) Classe astratta per BFS su grafo Testo esercitazione Scaricare il file EseBFS.zip, scompattarlo ed analizzare le classi in esso contenute con particolare attenzione alla classe astratta
DettagliCollezioni. (a cura del Prof. Marco Patella)
(a cura del Prof. Marco Patella) 1 Introduzione al Java Collections Framework Una collezione (o contenitore) consente di organizzare e gestire un gruppo di oggetti collezioni (vere e proprie) mappe implementate
DettagliAlberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione
Alberi Strutture dati: Alberi Strutture gerarchiche di dati Esempi Il file system di un sistema operativo L organigramma di un azienda Alberi generali, alberi n-ari, alberi binari, Ogni nodo ha un unico
DettagliCapitolo 6. Uso della gerarchia. c 2005 Pearson Education Italia Capitolo 6-1 / 125
Capitolo 6 Uso della gerarchia c 2005 Pearson Education Italia Capitolo 6-1 / 125 Sommario: Uso della gerarchia 1 Notazione UML per le classi 2 Introduzione alla gerarchia 3 Gerarchia e tipi La gerarchia
DettagliCorso di Algoritmi e Strutture Dati con Laboratorio. Java Collections Framework (I parte)
Corso di Algoritmi e Strutture Dati con Laboratorio Java Collections Framework (I parte) L infrastruttura JCF è una raccolta di interfacce e classi, tra loro correlate, appartenenti al pacchetto java.util.
DettagliAlgoritmi e Strutture Dati. Tipo di dato astratto e Strutture dati elementari
Algoritmi e Strutture Dati Tipo di dato astratto e Strutture dati elementari 1 Argomenti della lezione Tipi di dato astratto Strutture dati elementari Liste o Implementazione di liste in Java Stack Code
DettagliLe collezioni di oggetti. Prof. Accarino IIS Altiero Spinelli via Leopardi 132 Sesto San Giovanni
Le collezioni di oggetti Prof. Accarino IIS Altiero Spinelli via Leopardi 132 Sesto San Giovanni Contenitori di oggetti Java mette a disposizione una libreria per gestire gruppi di oggetti organizzandola
DettagliProgrammazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi:
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 22 settembre 2014 TEMPO DISPONIBILE: 2 ore Negli
DettagliFondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati
Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati Paolo Torroni Dipartimento di Elettronica, Informatica e Sistemistica Università degli Studi di Bologna Anno Accademico 2008/2009 Sommario
DettagliStrutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05
Strutture dati Il che cosa e il come Il che cosa ed il come Struttura dati: descrive come sono organizzati i dati e come sono realizzate le operazioni su di essi (cioe come si accede ai dati) Specifica
DettagliLe liste con array. Rimuovere la perla rossa costringe a spostare molte altre perle. Dove mettere la perla verde se si è esaurito il filo?
Liste Linkate Le liste con array Volendo usare una metafora, l implementazione delle liste tramite array è come infilare le perle (gli oggetti della lista) in un filo di lunghezza predefinita. E chiaro
DettagliAlgoritmi di Ricerca. Esempi di programmi Java
Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare
DettagliAlgoritmi di Ricerca. Esempi di programmi Java
Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare
DettagliIntroduzione al Java Collections Framework. Java Collections Framework (cont.) Interfacce del Collections Framework
Università degli Studi di Roma La Sapienza Corso di Laurea in Ingegneria dell Informazione (sede di Latina) Corso di Laurea in Ingegneria dell Informazione (consorzio Nettuno) Introduzione al Java Collections
DettagliIntroduzione Generics Iteratori. Collezioni in Java. Dr. Giulio Pellitta. 13 aprile 2011
13 aprile 2011 Cos è una collezione? Gerarchia delle collezioni Introduzione Una collezione è semplicemente un oggetto che raggruppa più oggetti (detti elementi della collezione) in una singola unità.
DettagliIntroduzione al Java Collections Framework
Università degli Studi di Roma La Sapienza Corso di Laurea in Ingegneria dell Informazione (sede di Latina) Corso di Laurea in Ingegneria dell Informazione (consorzio Nettuno) Insegnamento di PROGETTAZIONE
DettagliOCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO
CENTRO STUDI ULISSE Via Buccino, n. 22 - C.a.p. 84018 - Scafati (SA) Tel. Fax. 081.19970299-339.2365416-349.4152010 E-mail: info@centrostudiulisse.it - www.centrostudiulisse.it OCA JAVA 7 SE PROGRAMMER
DettagliProgrammazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 11 luglio 2014 TEMPO DISPONIBILE: 2 ore Negli esercizi
DettagliLa struttura dati CODA
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 La struttura dati CODA Pietro Di Lena - pietro.dilena@unibo.it Introduzione Una coda (o queue) è una struttura dati astratta
DettagliCorso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I)
Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I) Ing. Gianluca Caminiti Sommario ( OOP ) Programmazione Object-Oriented Incapsulamento, Ereditarietà, Polimorfismo Richiami
DettagliAlberi. In informatica, un albero è un modello astratto di una struttura dati gerarchica
Il TDA Tree Alberi In informatica, un albero è un modello astratto di una struttura dati gerarchica Struttura dati non lineare Si pensi al file system di un sistema operativo Le relazioni in un albero
DettagliAlgoritmi e Strutture Dati
Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 Il concetto di dato Il concetto di tipo di dato Insertion Sort for j 2 to lenght[a]
DettagliProgrammazione orientata agli oggetti Classi astratte e interfacce
Programmazione orientata agli oggetti Classi astratte e interfacce Fondamenti di Informatica L-B 1 Classi astratte Java ci consente di definire classi in cui uno o più metodi non sono implementati, ma
DettagliAlberi Binario in Java
Alberi Binario in Java Realizzare un albero binario di ricerca. L albero binario è di ricerca se esiste una relazione di ordinamento tra i valori dei nodi (valori comparabili). In particolare, dato un
DettagliProgrammazione orientata agli oggetti La classe Object, metodi e classi final, this. Object
Programmazione orientata agli oggetti La classe, metodi e classi final, this 1 La classe Negli esempi fatti nella prima parte del corso abbiamo definito alcune classi, per esempio Counter e Orologio, senza
Dettaglipublic static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false;
Metodi iterativi con array monodimensionali 1. Scrivere un metodo che, dato un array di interi a, restituisce il valore minimo in a. public static int minimo (int[] a) { int min = a[0]; for (int i=1; i
DettagliL ambizione dei design pattern (letteralmente schemi di programmazione) è quella di offrire soluzioni a problemi ricorrenti che facilitano lo
Design Pattern L ambizione dei design pattern (letteralmente schemi di programmazione) è quella di offrire soluzioni a problemi ricorrenti che facilitano lo sviluppo dei programmi, il loro mantenimento,
DettagliCorso: Fondamenti di Informatica (Canale 5) a.a Corsi di laurea: Ing. Settore Informazione
Domanda n. 1 Corso: Fondamenti di Informatica (Canale 5) a.a. 2016-17 Corsi di laurea: Ing. Settore Informazione Questionario a Risposte Multiple per auto-valutazione del Lab10 Argomento: Algoritmi e complessita'
DettagliIl linguaggio Java: aggiunte in Java 1.5
.. Il linguaggio Java: aggiunte in Java 1.5 Una breve presentazione GENERICI Java 1.5 introduce i generici: classi che hanno un parametro di tipo. Nelle versioni precedenti a Java 1.5 si può definire:
Dettagli19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
19 - Eccezioni Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso
DettagliTipi di Dati Astratti
Tipi di Dati Astratti April 19, 2017 Dati e Tipi di Dato Tipo di dato: concetto di alto livello Macchina fisica: unico tipo di dato sequenze di bit Macchine Astratte: tipi di dato più complessi Tipo di
DettagliScope e visibilità per classi
Scope e visibilità per classi Packages Classi interne nelle loro diverse forme Interne / statiche / locali Utilizzo congiunto con interfacce Implementazione di iteratori Gestione di eventi Packages Package:
DettagliNotazione grafica UML
Notazione grafica UML Estensione e implementazione in UML: estende implementa Per classi astratte e interfacce i nomi vanno in corsivo preceduti da e UtenteComputer
DettagliIl Java Collections Framework
Il Java Collections Framework Il Java Collections Framework è una libreria formata da un insieme di interfacce e di classi che le implementano per lavorare con gruppi di oggetti (collezioni). Le interfacce
DettagliInformatica 3. Informatica 3. LEZIONE 13: Liste doppie, pile e code. Lezione 13 - Modulo 1. Free list (2) Free list. Free list
LEZIONE 13: Liste doppie, pile e code Modulo 1: Free list Modulo 2: Lista doppia Modulo 3: Pila Modulo 4: Coda Lezione 13 - Modulo 1 Free list Politecnico di Milano - Prof. Sara Comai 1 Politecnico di
DettagliFondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento
Fondamenti di Informatica Algoritmi di Ricerca e di Ordinamento 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare se un elemento fa parte della sequenza oppure l elemento
DettagliUguaglianza e copia di oggetti
Uguaglianza e copia di oggetti Sommario 1. Classi Object e Class 2. Uguaglianza superficiale e uguaglianza profonda 3. Copia superficiale e copia profonda 4. Uguaglianza e copia in classi derivate 1 La
DettagliADT LISTA: altre operazioni non primitive ADT LISTA COSTRUZIONE ADT LISTA COSTRUZIONE ADT LISTA (2)
ADT LISTA Pochi Linguaggi forniscono tipo lista fra predefiniti (LISP, Prolog); per gli altri, ADT lista si costruisce a partire da altre strutture dati (in C tipicamente vettori o puntatori) OPERAZIONI
DettagliMarco Faella I pattern Template Method e Factory Method
Marco Faella I pattern Template Method e Factory Method 12 Lezione n. Parole chiave: Java Corso di Laurea: Informatica Insegnamento: Linguaggi di Programmazione II Email Docente: faella.didattica@gmail.com
DettagliEsercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni
Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizio 1 Dire quale è la complessità temporale del seguente metodo, espressa con notazione asintotica O(.) (con la migliore
Dettagli18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
18 - Vettori Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo di.unipi.it Corso di
DettagliLe basi del linguaggio Java
Le basi del linguaggio Java Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una
DettagliSommario. Le strutture dati elementari per implementare sequenze: Vettori Liste
Sequenze Sommario Le strutture dati elementari per implementare sequenze: Vettori Liste Strutture dati elementari Le strutture dati vettore e lista sono fra le strutture dati più usate e semplici Il loro
DettagliOCA JAVA 8 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO
CENTRO STUDI ULISSE Via Buccino, n. 22 - C.a.p. 84018 - Scafati (SA) Tel. Fax. 081.19970299-339.2365416-349.4152010 E-mail: info@centrostudiulisse.it - www.centrostudiulisse.it OCA JAVA 8 SE PROGRAMMER
DettagliInformatica 3. LEZIONE 12: Liste. Modulo 1: ADT lista e implementazione basata su array Modulo 2: Lista concatenata
Informatica 3 LEZIONE 12: Liste Modulo 1: ADT lista e implementazione basata su array Modulo 2: Lista concatenata Informatica 3 Lezione 12 - Modulo 1 ADT lista e implementazione basata su array Introduzione
DettagliCapitolo 9. Tipi enumerativi, tipi generici e interfacce. c 2005 Pearson Education Italia Capitolo 9-1 / 73
Capitolo 9 Tipi enumerativi, tipi generici e interfacce c 2005 Pearson Education Italia Capitolo 9-1 / 73 Sommario: Tipi enumerativi, tipi generici e interfacce 1 Definizione di tipi enumerativi La classe
DettagliLinked Lists. Liste linkate (1) liste linkate ( stack, queues ), trees. Liste linkate come strutture
Linked Lists Liste linkate () La combinazione di class/struct e puntatori porta alla creazioni di interessanti Abstract Data Type liste linkate ( stack, queues ), trees Liste linkate come strutture struct
DettagliEccezioni Precisazioni e approfondimenti
Eccezioni Precisazioni e approfondimenti Costruttore: il parametro String definisce il messaggio di errore associato all eccezione Metodi particolarmente significativi getmessage(): ritorna l istanza di
DettagliClassi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali
Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali 1 Ereditarietà, polimorfismo e altri sporchi trucchi Facciamo un esempio che ci permette di comprendere come vengono utilizzate
DettagliTesto di Riferimento (usato nei corsi precedenti)
Parti II e III 1 Framework Collections in Java: API Java http://java.sun.com/ Generics in Java Tutorial Sun (in inglese) http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf Testo di Riferimento (usato
DettagliEsempi in Java di program.ne O-O
Esempi in Java di program.ne O-O Ereditarietà Polimorfismo statico e dinamico Esercitazione laboratorio Interfaccia Comparable e Comparator 1 Gerarchia di ereditarietà Persona IS_A Docente Studente Tecnico
DettagliIteratori e iteratore in una catena (capitolo 14)
SETTIMANA 9 Iteratori e iteratore in una catena (capitolo 14) 1 Accedere a nodi di una catena Per eseguire operazioni sulla catena che necessitano di accedere ai nodi è necessario aggiungere metodi all
DettagliProgrammazione Java Avanzata Programmazione Object- Oriented in Java
Programmazione Java Avanzata Programmazione Object- Oriented in Java Ing. Gianluca Caminiti Testi di Riferimento (Java) Cay Horstmann Concetti di informatica e fondamenti di Java Apogeo, 2007 (Versione
DettagliProgrammazione II Compitino (Vers. B)
Programmazione II Compitino (Vers. B) 15 gennaio 2015 Cognome Jackson Nome Michael Matricola 696969 Anno di corso 1 Nei seguenti quesiti, quando vi è richiesto di scrivere un programma, potete limitarvi
DettagliFondamenti di informatica Oggetti e Java. Luca Cabibbo. Collezioni++ (Aggiunte di Marco Patella) Capitolo 26.bis. aprile 2006.
Fondamenti di informatica Oggetti e Java Luca Cabibbo ++ (Aggiunte di Marco Patella) Capitolo 26.bis aprile 2006 1 Problemi delle collezioni Dal momento che ogni collezione contiene oggetti di tipo Object
DettagliLaboratorio di Programmazione Lezione 2. Cristian Del Fabbro
Laboratorio di Programmazione Lezione 2 Cristian Del Fabbro Prossima lezione GIOVEDÌ 29 OTTOBRE 14:00 Input da tastiera package input; import java.io.*; public class Input { public static void main(string[]
Dettagli18 - Classi parzialmente definite: Classi Astratte e Interfacce
18 - Classi parzialmente definite: Classi Astratte e Interfacce Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/
DettagliProf. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1
Operazioni sulle liste Definiamo una serie di procedure e funzioni per operare sulle liste. Usiamo liste di interi per semplicità, ma tutte le operazioni sono realizzabili in modo del tutto analogo su
DettagliRiassunto: cos è la OOP? classi astratte, interfacce, classi interne. Scaletta. Figura con area()? Figura senza area()? Stefano Mizzaro 1.
OO in Java: classi astratte, interfacce, classi interne Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro mizzaro@dimi.uniud.it Programmazione,
DettagliEsempio: Tombola! Vogliamo progettare una applicazione che realizza il gioco della tombola Versione semplificata: un banco, un
Esempio: Tombola! Vogliamo progettare una applicazione che realizza il gioco della tombola Versione semplificata: un banco, un giocatore, ogni giocatore una scheda Ci vengono già fornite le classi necessarie
DettagliStrutture dati. Le liste
Strutture dati Le liste Introduzione Una lista è una successione finita di valori di un tipo (insieme di valori e ordine). Come tipo di dato è qualificata dalle operazioni che ci si possono svolgere: inserimento
DettagliVariabili e Metodi di classe Interfacce e Package Gestione di File in Java
Fondamenti di Informatica Variabili e Metodi di classe Interfacce e Package Gestione di File in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Variabili di classe: Static Una variabile di classe
DettagliIL CONCETTO DI CLASSE
IL CONCETTO DI CLASSE Una CLASSE riunisce le proprietà di: componente software: può essere dotata di suoi propri dati / operazioni moduli: riunisce dati e relative operazioni, fornendo idonei meccanismi
Dettaglipublic double getlato() restituisce la lunghezza del lato del quadrato che esegue il metodo.
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 21 settembre 2015 TEMPO DISPONIBILE: 1 ora e 40
DettagliLa struttura dati PILA
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 La struttura dati PILA Pietro Di Lena - pietro.dilena@unibo.it Introduzione Una pila (o stack) è una struttura dati astratta
Dettagli