SimpleList: Realizzazione. Strutture dati. Strutture dati lineari: liste. SimpleList: rappresentazione collegata. Lista semplice: SimpleList

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "SimpleList: Realizzazione. Strutture dati. Strutture dati lineari: liste. SimpleList: rappresentazione collegata. Lista semplice: SimpleList"

Transcript

1 4 SimpleList: Realizzazione Strutture dati Un programma object-oriented usa oggetti per memorizzare dati Come organizzare gli oggetti in strutture dati dipende dalle funzionalità desiderate del programma Strutture dati lineari, alberi, grafi, Due alternative Sequenziale Basata su array monodimensionale Bisogna definire una capacità massima e un metodo full Realizzarla come esercizio Collegata Ogni elemento della lista è una coppia denominata Node Node = (Object, Node) 2 5 Strutture dati lineari: liste Struttura lineare atta a contenere oggetti di uno stesso tipo Definizione ricorsiva La lista vuota è una lista, Una lista non vuota l è una coppia h l / t l dove h l è un oggetto e t l è una lista h l e t l sono definiti rispettivamente head e tail di l Caratteristiche di una lista Lunghezza La lunghezza della lista vuota è 0 La lunghezza di una lista non vuota f l / t l è definita come 1 + lunghezza(t l ) Modalità di accesso e operatori per inserimento e rimozione di elementi SimpleList: rappresentazione collegata import java.io.*; class SimpleList { class Node { // NB: se il costruttore non fa niente non è necessario public Object elem; public Node succ; // definizione dei metodi private Node node; // referenza al primo nodo private int length; // mantiene la lunghezza della lista 3 6 Lista semplice: SimpleList Fornisce metodi per l accesso al primo elemento della lista public SimpleList() Costruisce la lista vuota public Object head() Restituisce il primo elemento della lista (definito sulla lista non vuota) public void inserthead(object elem) Inserisce elem in testa alla lista public void removehead() Elimina il primo elemento della lista (definito sulla lista non vuota) public int size() Restituisce la lunghezza della lista public boolean isempty() Restituisce true se la lista è vuota, false altrimenti Inner Class La classe Node è definita come membro della classe SimpleList Possibile creare oggetti di classe Node solo all interno della classe SimpleList (solo nei suoi metodi) Notare anche che nel nostro caso la classe Node non ha un costruttore Il costruttore sarebbe stato: public Node() { In generale se il corpo del costruttore è vuoto (non fa niente) allora non è necessario specificarlo: è definito per default

2 SimpleList: Realizzazione dei metodi (1) public SimpleList() { node = null; length = 0; public boolean isempty() { return (node == null); public int size() { return length; public Object head() { if(node == null) return null; return node.elem; 7 SimpleList: Realizzazione dei metodi (2) public void inserthead(object elem) { Node tempnode = new Node(); // costruttore di default tempnode.elem = elem; tempnode.succ = node; node = tempnode; length++; public void removehead() { if(node!= null) { node = node.succ; length--; 10 SimpleList: Inserimento Elemento da inserire New 8 SimpleList: testdriver public static void testdriver() throws Exception { InteractiveIO io = new InteractiveIO(); SimpleList list = new SimpleList(); String line = io.promptandread("stringa: "); while(!line.equals("")) { list.inserthead(line); line = io.promptandread("stringa: "); io.writeln("lunghezza lista: " + list.size()); while(!list.isempty()) { line = (String) list.head(); io.writeln(line); list.removehead(); 11 SimpleList: Eliminazione Inserimento ed eliminazione in posizione qualsiasi: Liste indicizzate Gli operatori della lista semplice costituiscono l insieme di operatori minimali per la realizzazione di una lista Altri operatori possono essere realizzati a partire da questo insieme minimale oppure possono estendere questo insieme minimale Un estensione della lista semplice è la lista indicizzata Accesso, inserimento ed eliminazione di elementi possono avvenire in ogni posizione elementat(int pos) insertelementat(object elem, int pos) removeelementat(int pos) 12

3 13 16 Vector e liste indicizzate Abbiamo già visto che Java fornisce nella libreria java.util la classe Vector che realizza le funzionalità di una lista indicizzata Un Vector è realizzato mediante array (rappresentazione sequenziale) Un Vector mantiene una capacità e un campo capacityincrement La capacità è ovviamente maggiore della size Un Vector incrementa la sua capacità di celle di dimensione capacityincrement Vector: altri metodi Object firstelement() Restituisce il primo elemento del Vector Object lastelement() Restituisce l ultimo elemento del Vector Object removeelement(object elem) Elimina la prima occorrenza di elem nel Vector Object removeallelements() Svuota il Vector Esercizio: realizzare una classe List come sottoclasse della classe SimpleList (con rappresentazione collegata) che esibisce lo stesso comportamento della classe Vector Vector: costruttori Vector() La capacità iniziale è predefinita Se non c è spazio per inserire un nuovo elemento la capacità viene raddoppiata. Vector(int capacity) Permette di definire la capacità iniziale Si comporta come il precedente quando non c è spazio per l inserimento Vector(int capacity, int increment) Permette di definire la capacità iniziale e il suo incremento Altri metodi int capacity() Restituisce la capacità del Vector void ensurecapacity(int mincapacity) Assicura una capacità minima incrementando la capacità del Vector se necessario 14 Inserimento ed eliminazione in posizione qualsiasi 8 Inserimento Eliminazione Alcuni metodi che non abbiamo visto int indexof(object elem) Restituisce la posizione della prima occorrenza di elem nel Vector, restituisce 1 se l elemento non è presente nel Vector int indexof(object elem, int pos) Restituisce la posizione della prima occorrenza di elem nel Vector a partire dalla posizione pos, restituisce 1 se l elemento non è presente nel Vector int lastindexof(object elem) Restituisce la posizione dell ultima occorrenza di elem nel Vector, restituisce 1 se l elemento non è presente nel Vector int lastindexof(object elem, int pos) Restituisce la posizione dell ultima occorrenza di elem nel Vector cercando indietro a partire dalla posizione pos, restituisce 1 se l elemento non è presente nel Vector 15 List: realizzazione di elementat public Object elementat(int pos) { int i = 0; Node tempnode = node; while (i < pos && tempnode!= null) { tempnode = tempnode.succ; i++; if (i!= pos tempnode == null) return null; return tempnode.elem; 18

4 public void insertelementat(object elem, int pos) { if(pos == 0) inserthead(elem); else { int i = 1; insertelementat Node prednode = node; // punta al predecessore while (i < pos && prednode!= null) { prednode = prednode.succ; i++; if (i == pos && prednode!= null) { Node tempnode = new Node(); tempnode.elem = elem; tempnode.succ = prednode.succ; prednode.succ = tempnode; length++; // incrementa la lunghezza della lista List: realizzazione di 19 Copia di liste e interferenza Ma cosa succede se con la realizzazione vista precedentemente si eseguono le seguenti operazioni: l1 = l2.copia(); l2.insertelementat(elem, 5); l1.removeelementat(6); Ancora una volta le due liste interferiscono l una sull altra seguendo così inesorabilmente lo stesso destino L operatore di copia visto prima in questo caso non è sufficiente ad evitare l interferenza sulle posizioni intermedie della struttura a puntatori Il metodo copia dovrebbe duplicare l intera struttura (tutti i nodi) 22 public void removeelementat(int pos) { if(pos == 0) removehead(); else { int i = 1; Node prednode = node; // punta al predecessore while (i < pos && prednode!= null) { prednode = prednode.succ; i++; List: realizzazione di removeelementat if (i == pos && prednode!= null && prednode.succ!= null) { prednode.succ = prednode.succ.succ; length--; // decrementa la lunghezza della lista 20 Lista semplice e interferenza Da notare che la lista semplice non soffre di questo problema, perché l accesso è possibile solo in testa: l1 = l2.copia(); l2.insertheadt(7); l1.removehead(); 23 Copia di liste e interferenza Sappiamo che con l assegnamento l1 = l2; due le due variabili puntano allo stesso oggetto interferendo tra di loro su successive operazioni di modifica Gli oggetti vanno copiati public List copia() { List temp = new List(); temp.node = this.node; temp.length = this.length; return temp; In questo modo posso effettuare l assegnamento l1 = l2.copia(); 21 La lista semplice è libera da interferenze l1.node l1 = l2.copia(); l2.node l1.node l2.inserthead(7); l2.node l1.removeheadt(); l2.node 7 7 l1.node 24

5 Realizzazione libera da interferenza Per avere una realizzazione libera da interferenza bisogna duplicare la parte precedente alla posizione in cui si vuole operare (inserire/rimuovere) Ad esempio, l2.insertelementat(8, 2) l1.node l2.node 25 Liste: rappresentazioni doppiamente collegate Ogni nodo punta al predecessore oltre che al suo successore class Node { public Object elem; public Node pred; public Node succ; 28 l2node Esercizio: realizzare la classe List con rappresentazione doppiamente collegata Realizzazione basata su lista semplice Una realizzazione libera da interferenze si ottiene se gli operatori della lista sono realizzati usando esclusivamente gli operatori della lista semplice La realizzazione è ricorsiva: Se la posizione è in cui bisogna effettuare l operazione è 0 allora si possono applicare direttamente gli operatori della lista semplice Altrimenti si salva e si elimina l elemento di testa, si riapplica l operatore ricorsivamente sulla sottolista così ottenuta e si rimette l elemento precedentemente eliminato in testa Queue (Code) Struttura FIFO: First In First Out removeelement front end addelement Esempio: realizzazione di insertelementat public void insertelementat(object elem, int pos) { if(pos == 0) inserthead(elem); else if(! isempty()) { Object headelem = head(); removehead(); insertelementat(elem, pos-1); inserthead(headelem); Queue: metodi public Queue () Crea la coda vuota public boolean isempty () public int size () public void addelement(object elem) Inserisce elem in coda public Object firstelement() Restituisce il primo elemento della coda public void removeelement () Rimuove il primo elemento dalla coda

6 Queue: estendiamo la classe Vector Solo il metodo removeelement da realizzare import java.io.*; import java.util.*; class Queue extends Vector { public Queue () { super (); // non necessario public void removeelement () { if(size > 0) removeelementat (0); 31 Queue con array: Metodi public boolean isempty() { return (num_elem == 0); public boolean isfull() { return (num_elem == content.length); public int size() { return (num_elem); public Object firstelement() { if(num_elem == 0) return null; return content[front]; 34 Queue: testdriver public static void testdriver() throws Exception { InteractiveIO io = new InteractiveIO(); Queue queue = new Queue(); String line = io.promptandread("stringa: "); while(!line.equals("")) { queue.addelement(line); line = io.promptandread("stringa: "); io.writeln("lunghezza coda: " + queue.size()); while(!queue.isempty()) { line = (String) queue.firstelement(); io.writeln(line); queue.removeelement(); 32 Queue con array: Metodi public void addelement(object elem) { if (num_elem < content.length) { if(num_elem == 0) front = end = 0; else end = (end + 1) % content.length; content[end] = elem; num_elem++; // gestione circolare public void removeelement () { if (num_elem > 0) { if(num_elem > 1) front = (front + 1) % content.length; num_elem--; 35 Queue: rappresentazione statica 33 Esercizio 36 E possibile realizzare code mediante array Per motivi di efficienza si effettua una gestione circolare class Queue { public Queue () { content = new Object [default_max_elem]; public Queue (int max_elem) { content = new Object [max_elem]; // altri metodi static final int default_max_elem = 100; // capacità di default Object [ ] content; int front, end; // indici del primo e dell ultimo della coda int num_elem = 0; // assegnamento di default, indica la coda vuota Provare a realizzare una coda con array che modifica la sua capacità quando il numero di elementi da inserire supera la capacità corrente Prima dell inserimento dell elemento bisognerebbe controllare se la coda è piena. In tal caso si dovrebbe creare un nuovo array content di capacità maggiore (vedi ciò che accade per Vector) e risistemare gli elementi della coda nel nuovo array Ovviamente non c è più bisogno del metodo isfull()

7 37 40 Stack (Pila) Struttura LIFO: Last In First Out Pop Push Top Dictionary E una classe astratta fornita nella libreria java.util Un dizionario supporta la memorizzazione di coppie (key, value) Usa il metodo equals(object key) per verificare l uguaglianza tra due chiavi La classe Stack Fornita nella libreria java.util come estensione della classe Vector Costruttore public Stack () Inserimento, rimozione e accesso al top public push(object elem) Inserisce un oggetto sul top dello stack public Object pop () Restituisce l oggetto sul top e lo elimina dallo stack public Object peek () Restituisce l oggetto sul top senza eliminarlo dallo stack Dictionary: metodi public Object put (Object key, Object value) Aggiunge la coppia (key, value) al dizionario e restituisce il precedente valore associato a key public Object get(object key) Restituisce il valore associato a key nel dizionario; restituisce null se la chiave non è presente public Object remove(object key) Elimina la chiave e il valore associato dal dizionario e restituisce il valore La classe Stack: altri metodi Altri metodi public int search(object elem) Restituisce la posizione della prima occorrenza di elem dal top dello stack (0 se l elemento è sul top); restituisce 1 se l elemento non è nello stack public boolean empty() Verifica se lo stack è vuoto Esercizio: rivisitare l esercizio delle torri di Hanoi usando degli stack per rappresentare le torri Dictionary: altri metodi public Enumeration keys ( ) Restituisce una enumeration delle chiavi nel dizionario public Enumeration elements ( ) Restituisce una enumeration dei valori nel dizionario public int size ( ) Restituisce il numero di chiavi nel dizionario public boolean isempty ( ) Verifica se il dizionario non contiene chiavi

8 Una realizzazione di dizionario basata su Vector 43 MyDictionary: get 46 import java.io.*; import java.util.*; class MyDictionary extends Dictionary { // definizione dei metodi private Vector keysvector; private Vector valuesvector; public Object get (Object key) { int pos = keysvector.indexof(key); if (pos == -1) { return null; return valuesvector.elementat(pos); MyDictionary: Metodi MyDictionary: remove public MyDictionary () { keysvector = new Vector(); valuesvector = new Vector(); public int size () { return keysvector.size(); public boolean isempty () { return keysvector.isempty (); public Object remove (Object key) { int pos = keysvector.indexof(key); if (pos == -1) return null; Object temp = valuesvector.elementat(pos); keysvector.removeelementat(pos); valuesvector.removeelementat(pos); return temp; MyDictionary: put MyDictionary: keys e elements public Object put (Object key, Object value) { int pos = keysvector.indexof(key); if (pos == -1) { keysvector.addelement(key); valuesvector.addelement(value); return null; Object temp = valuesvector.elementat(pos); keysvector.setelementat(key, pos); valuesvector.setelementat(value, pos); return temp; public Enumeration keys () { return keysvector.elements(); public Enumeration elements () { return valuesvector.elements(); Esercizio: realizzare un testdriver

9 49 52 Hash Table Hashtable è una classe predefinita nella libreria java.util che estende la classe Dictionary Una hash table usa una tabella (gestione basata su array) per memorizzare le coppie (key, value) Mappa una chiave su un indice nella tabella Una funzione che mappa una chiave su un indice della tabella è detta funzione hash Caratteristiche di una hash table capacity: dimensione massima della tabella load factor: rapporto tra il numero di chiavi memorizzate e la capacità della tabella Hashing Collision Il numero di possibili chiavi può essere molto più grande della capacità di una hash table Ad esempio il numero di possibili codici fiscali è molto più elevato di quelli che può avere necessità di memorizzare un azienda per i suoi impiegati Di conseguenza due chiavi possono essere mappate sullo stesso indice della tabella Hashing collision: tentativo di memorizzare due chiavi associate allo stesso indice nella tabella Una hash table implementa dei meccanismi per risolvere le collisioni, in modo tale da poter memorizzare (e poi recuperare) entrambe la chiavi Hash Code La classe Object definisce un metodo hashcode() che usa i dati contenuti in un oggetto per calcolare un hash code per l oggetto (un long integer) Dati due oggetti obj1 e obj2, se obj1.equals(obj2) restituisce true, allora obj1.hashcode() è uguale ad obj2.hashcode() Di solito quando si ridefinisce (override) il comportamento del metodo equals, bisogna anche ridefinire il comportamento di hashcode, per assicurarsi che se due oggetti sono uguali, anche i relativi hash code lo siano La classe Hashtable mappa l hash code di una chiave su un indice della tabella Può essere fatto con una semplice operazione di modulo Risoluzione delle collisioni Due possibili strategie Indirizzamento aperto Alloca l elemento in un altra posizione della tabella (garantendone il successivo reperimento) Il più semplice è la scansione lineare Il passo di scansione è costante le prestazioni sono indipendenti dal passo, per cui di solito è usato il passo 1 (vedi prossima diapositiva) Prestazioni migliori si ottengono con passo non costante (ad esempio con la scansione quadratica) Concatenazione Gestisce una lista dei sinonimi (chiavi con lo stesso indirizzo memorizzare nella tabella) Generazione di indirizzi Hash La funzione hash deve essere efficiente e semplice da realizzare In genere è costituita da due sottofunzioni la prima che mappa l insieme delle chiavi sull insieme degli interi, come il metodo hashcode() La seconda che mappa l insieme degli interi sull insieme degli indici della tabella Esempio: se una chiave è alfanumerica (come il codice fiscale) si può convertirla in intero usando il codice ASCII (ottenendo così l hash code) effettuare l operazione di modulo per mapparla sull insieme degli indici (questo lo fa già la classe Hashtable) Scansione lineare, passo 1 Inserimento se la posizione della chiave è già occupata (collisione), allora inserisce nella prima posizione successiva libera (viene generato un agglomerato, un gruppo contiguo di posizioni occupate) Ricerca se la posizione della chiave è occupata e non contiene la chiave da cercare, cerca in tutte le posizioni successive occupate Eliminazione trovata la chiave la elimina e l eliminazione rompe l agglomerato quindi si spostano indietro tutte le chiavi dell agglomerato il cui indirizzo è minore di quello della posizione libera ciò ne garantisce il recupero successivo

10 55 Ridurre la probabilità di collisioni La capacità e il fattore di caricamento di una hash table influenzano la possibilità che si verifichino collisioni Incrementando la capacità si riduce il fattore di caricamento e quindi la possibilità del verificarsi di collisioni Durante l esecuzione un istanza della classe Hashtable confronta il suo fattore di caricamento con una soglia, che per default è 0.75 Quando il fattore di caricamento è maggiore della soglia, la capacità della hash table viene incrementata automaticamente e gli elementi contenuti vengono riallocati 56 Metodi di Hashtable Costruttori: creano una hash table vuota Hashtable() capacity predefinita, soglia = 0.75 Hashtable(int capacity) Permette di definire la capacità della tabella Hashtable(int capacity, float threshold) Permette di definire capacità e soglia La classe Hashtable ridefinisce i metodi ereditati dalla classe astratta Dictionary get, put, remove 57 Altri Metodi di Hashtable boolean containskey(object key) Verifica se una chiave è contenuta nella hash table boolean contains(object value) Verifica se un valore è memorizzato nella hash table String tostring() restituisce una rappresentazione String della hash table void clear() Cancella tutte le coppie (key, value) dalla hash table void rehash() Crea una hash table più grande e riorganizza il contenuto della vecchia hash table nella nuova (ricalcola gli hash code)

La struttura dati CODA

La 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

Dettagli

Alberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione

Alberi. 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

Dettagli

SOMMARIO STACK. STACK: specifica STACK

SOMMARIO STACK. STACK: specifica STACK SOMMARIO STACK Pila (stack): una struttura dati lineare a cui si può accedere soltanto mediante uno dei suoi capi per memorizzare e per estrarre dati. Specifica (descrizione). Implementazione (realizzazione).

Dettagli

Algoritmi e strutture dati

Algoritmi e strutture dati Algoritmi e strutture dati Argomenti Strutture dati elementari e loro implementazioni in Java: Vettori Liste Stack (Pile) Queue (Code) Esempi di applicazione Tipo di dato astratto Tipo di dato astratto

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa 09 ADT: Lista, Pila, Coda A. Miola Marzo 2007 http://www.dia.uniroma3.it/~java/fondinf2/ ADT: Lista, Pila, Coda 1 Contenuti Tipo

Dettagli

Liste. Costo operazioni Tutte le operazioni hanno costo O(1)

Liste. Costo operazioni Tutte le operazioni hanno costo O(1) Liste Liste (List, Linked List) Una sequenza di nodi, contenenti dati arbitrari e 1-2 puntatori all'elemento successivo e/o precedente Contiguità nella lista contiguità nella memoria Costo operazioni Tutte

Dettagli

Laboratorio di Programmazione

Laboratorio di Programmazione Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 25 ADT (Abstract Data Types) tipo di dato astratto Un ADT è un modello matematico con una collezione di operatori definiti su tale

Dettagli

Altro di ADT. Dominio. Funzioni. Dominio. Funzioni. Costanti - Collezioni

Altro di ADT. Dominio. Funzioni. Dominio. Funzioni. Costanti - Collezioni di astratto Abstract Data Type Paolo Bison Fondamenti di Informatica 1 A.A. 2004/05 Università di Padova definizione di un indipendente dalla sua rappresentazione interna e dalla effettiva implementazione

Dettagli

Alberi Binari Alberi Binari

Alberi Binari Alberi Binari Alberi Binari Alberi Binari Un albero binario è una collezione di elementi organizzati in modo non sequenziale secondo un grafo aciclico caratterizzato da Radice Due sotto-alberi (il sotto-albero destro

Dettagli

Il TDA Map. Tabelle hash

Il TDA Map. Tabelle hash Il TDA Map Tabelle hash Definizione informale Il TDA Map memorizza coppie formate da una chiave k e da un valore v La coppia è chiamata entry Ogni chiave deve essere unica Questa è la differenza principale

Dettagli

Definizione informale. Il TDA Map memorizza coppie formate da una chiave k e da un valore v. La coppia è chiamata entry. Ogni chiave deve essere unica

Definizione informale. Il TDA Map memorizza coppie formate da una chiave k e da un valore v. La coppia è chiamata entry. Ogni chiave deve essere unica Il TDA Map Tabelle hash Definizione informale Il TDA Map memorizza coppie formate da una chiave k e da un valore v La coppia è chiamata entry Ogni chiave deve essere unica Questa è la differenza principale

Dettagli

Il TDA Map. Definizione informale. I metodi del TDA Map 2. I metodi del TDA Map 1. Interfaccia Map 1 NO_SUCH_KEY. Tabelle hash

Il TDA Map. Definizione informale. I metodi del TDA Map 2. I metodi del TDA Map 1. Interfaccia Map 1 NO_SUCH_KEY. Tabelle hash Il TDA Map Tabelle hash Definizione informale Il TDA Map memorizza coppie formate da una chiave k e da un valore v La coppia è chiamata entry Ogni chiave deve essere unica Questa è la differenza principale

Dettagli

Informatica 3. LEZIONE 13: Liste doppie, pile e code. Modulo 1: Free list Modulo 2: Lista doppia Modulo 3: Pila Modulo 4: Coda

Informatica 3. LEZIONE 13: Liste doppie, pile e code. Modulo 1: Free list Modulo 2: Lista doppia Modulo 3: Pila Modulo 4: Coda Informatica 3 LEZIONE 13: Liste doppie, pile e code Modulo 1: Free list Modulo 2: Lista doppia Modulo 3: Pila Modulo 4: Coda Informatica 3 Lezione 13 - Modulo 1 Free list Free list Le funzioni di sistema

Dettagli

Esempio su strutture dati dinamiche: ArrayList

Esempio 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

Dettagli

STRUTTURE DATI: OLTRE GLI ARRAY LISTE

STRUTTURE 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

Dettagli

tipi di dato astratti

tipi di dato astratti tipi di dato astratti A. FERRARI ADT Un tipo di dato astratto o ADT (Abstract Data Type) è un tipo di dato le cui istanze possono essere manipolate con modalità che dipendono esclusivamente dalla semantica

Dettagli

Fondamenti di Informatica II

Fondamenti di Informatica II Università degli studi di Messina Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica e delle Telecomunicazioni Fondamenti di Informatica II Tipi di dati astratti(adt)- seconda parte Coda Struttura

Dettagli

Argomenti della lezione. Tipo di dato astratto. Array. Tipo di dato Lista. Liste Implementazione di liste in Java Stack Code

Argomenti 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

Dettagli

Informatica 3. Informatica 3. LEZIONE 13: Liste doppie, pile e code. Lezione 13 - Modulo 1. Free list (2) Free list. Free list

Informatica 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

Dettagli

Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati

Fondamenti 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

Dettagli

TIPO DI DATO ASTRATTO

TIPO DI DATO ASTRATTO TIPO DI DATO ASTRATTO Tipo di dato astratto Esempio: Vogliamo rappresentare un sistema di prenotazione di esami universitari. Dati immagazzinati: prenotazioni esami Operazioni supportate: prenota(esame,

Dettagli

SET: specifica INTRODUZIONE. SET: esempio Si stampano i numeri casuali in ordine di generazione e il contenuto dell insieme.

SET: specifica INTRODUZIONE. SET: esempio Si stampano i numeri casuali in ordine di generazione e il contenuto dell insieme. INTRODUZIONE Il tipo di dati astratto insieme (set) definisce operazioni, quali inserimento e rimozione, su collezioni di oggetti che presentano molteplicità uno, cioè non sono ammessi duplicati. Una possibile

Dettagli

In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi.

In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi. In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi. 1 strutture dati (astratte) Una struttura dati astratti consiste di uno o più insiemi con delle operazioni

Dettagli

18 - 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 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

Dettagli

Heap e Code di Priorità

Heap e Code di Priorità Heap e Code di Priorità heap heap = catasta condizione di heap 1. albero binario perfettamente bilanciato 2. ogni nodo contiene una chiave maggiore o eguale di quelle presenti negli eventuali figli non

Dettagli

semplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente

semplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente Liste doppie Liste: semplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente Rappresentazione grafica semplice: doppia: Gli

Dettagli

Algoritmi e Strutture Dati

Algoritmi 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]

Dettagli

Esempio su strutture dati dinamiche: ArrayList

Esempio su strutture dati dinamiche: ArrayList Esempio su strutture dati dinamiche: ArrayList 1 ArrayList Gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito al momento della creazione e rimane immutato.

Dettagli

Pile e Code. Definiamo una collezione come un gruppo di oggetti, detti gli elementi della collezione.

Pile e Code. Definiamo una collezione come un gruppo di oggetti, detti gli elementi della collezione. Pile e Code lezione 4 Collezioni Defiamo una collezione come un gruppo di oggetti, detti gli elementi della collezione. Durante il corso defiremo delle tecniche di base per gestire modo efficiente collezioni

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Maria Rita Di Berardini 2, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 2 Polo di Scienze Università di Camerino ad Ascoli Piceno Il concetto di dato Il concetto

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Strutture Elementari Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 29 ottobre 2008 Strutture Dati Astratte Il concetto di dato Il concetto

Dettagli

Esercizio: Lista Circolare

Esercizio: Lista Circolare Esercizio: Lista Circolare Si realizzi in Java un gestore di una lista circolare. La dimensione minima della lista è 2 elementi (ed è anche la dimensione iniziale). La dimensione massima è 20 elementi.

Dettagli

Implementazione Java di un ADT

Implementazione 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

Dettagli

PILE E CODE. Pile (stack):

PILE E CODE. Pile (stack): PILE E CODE Sono tipi di dato che consentono di rappresentare sequenze di elementi in cui gli inserimenti e le cancellazioni sono eseguiti con particolari modalita` (politiche o discipline). Pile (stack):

Dettagli

Esercizio. Scrivere una classe ListMap<K, V> che implementa la mappa con una lista. Strutture Dati

Esercizio. 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

Dettagli

Esercitazione: Implementazione in linguaggio C dell ADT. Stack con l utilizzo. di linked list

Esercitazione: Implementazione in linguaggio C dell ADT. Stack con l utilizzo. di linked list Esercitazione: Implementazione in linguaggio C dell ADT Stack con l utilizzo di linked list Laboratorio di Programmazione Introduzione un ADT (Abstract Data Type) è un modello (formale) che generalizza

Dettagli

Tipi di dati astratti

Tipi di dati astratti Tipi di dati astratti ADT 1 Dati strutturati e algoritmi Una struttura di dati è un insieme di regole per organizzare e manipolare dei dati Un algoritmo è un procedimento composto in passi elementari in

Dettagli

Fondamenti di Informatica

Fondamenti di Informatica Strutture dati complesse Esempi di strutture dati complesse analizzate in questa lezione: Fondamenti di Informatica 21. Strutture di dati complesse in C++ Array di puntatori Pila (Stack) Coda (queue) Liste

Dettagli

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA7 B1 Gestione di liste 1 Prerequisiti Programmazione base in Java Utilizzo di classi e oggetti Tecnica di allocazione dinamica Gestione di liste Classificazione delle

Dettagli

Algoritmi e Programmazione Avanzata. Pile e code. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino

Algoritmi e Programmazione Avanzata. Pile e code. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino Sommario ADT Pile Code. A.A. 2001/2002 APA - 2 1 Sommario ADT Pile Code. A.A. 2001/2002 APA - 3 ADT Le regole che

Dettagli

Liste concatenate. Violetta Lonati

Liste concatenate. Violetta Lonati Liste concatenate Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 2 novembre 2017 Violetta Lonati Liste

Dettagli

Esempio su strutture dati dinamiche: ArrayList

Esempio 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

Dettagli

Altri Esercizi. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa E17. C. Limongelli Maggio 2012

Altri Esercizi. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa E17. C. Limongelli Maggio 2012 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E17 C. Limongelli Maggio 2012 1 Contenuti q Definizione di classi con ereditarietà q Uso di tipi di dati astratti q Ricorsione

Dettagli

Argomenti della lezione. Introduzione agli Algoritmi e alle Strutture Dati. Lista Lineare. Lista Lineare come Tipo di Dato Astratto

Argomenti della lezione. Introduzione agli Algoritmi e alle Strutture Dati. Lista Lineare. Lista Lineare come Tipo di Dato Astratto Argomenti della lezione Introduzione agli Algoritmi e alle Strutture Dati Operazioni su Liste Dr. Emanuela Merelli Tipi di Dato Astratto Lista Lineare Pila Coda Concetto di Struttura dati dinamiche Lista

Dettagli

Algoritmi e Strutture di Dati

Algoritmi e Strutture di Dati Algoritmi e Strutture di Dati Capitolo 4 - Strutture di dati elementari This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. To view a copy of this license, visit

Dettagli

Pile e code. Sommario. Algoritmi e Programmazione Avanzata. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino

Pile e code. Sommario. Algoritmi e Programmazione Avanzata. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino Pile e code Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino Sommario ADT Pile Code. A.A. 2002/2003 APA - Pile e code 2 Politecnico di Torino Pagina 1 di 23 Sommario

Dettagli

Strutture dati. Le liste

Strutture 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

Dettagli

Esercizi Strutture dati di tipo astratto

Esercizi Strutture dati di tipo astratto Salvatore Cuomo Esercizi Strutture dati di tipo astratto Lezione n. 20 Parole chiave: Strutture dati, pile code, liste Corso di Laurea: Informatica Insegnamento: Programmazione II, modulo di Laboratorio

Dettagli

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA7 B3 Gestione di una coda 1 Prerequisiti Programmazione base in Java Utilizzo di classi e oggetti Tecnica di allocazione dinamica Concetto di coda e operazioni relative

Dettagli

Insiemi Dinamici. Operazioni tipiche (S:struttura, x: riferimento(puntatore) alla chiave, k: chiave)

Insiemi Dinamici. Operazioni tipiche (S:struttura, x: riferimento(puntatore) alla chiave, k: chiave) Insiemi Dinamici Insiemi che possono essere modificati Elementi: oggetti = eventualmente: chiavi + (eventuali) dati satellite; l insieme delle chiavi puo essere totalmente ordinato Operazioni tipiche (S:struttura,

Dettagli

argomenti Hashing Funzioni hash per file Tabelle hash Funzioni hash e metodi per generarle Inserimento e risoluzione delle collisioni Eliminazione

argomenti Hashing Funzioni hash per file Tabelle hash Funzioni hash e metodi per generarle Inserimento e risoluzione delle collisioni Eliminazione Hashing argomenti Hashing Tabelle hash Funzioni hash e metodi per generarle Inserimento e risoluzione delle collisioni Eliminazione Funzioni hash per file Hashing estendibile Hashing lineare Hashing 2

Dettagli

Altri Esercizi. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2. Dispensa E09. C. Limongelli Marzo 2008

Altri Esercizi. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2. Dispensa E09. C. Limongelli Marzo 2008 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa E09 Altri Esercizi C. Limongelli Marzo 2008 http://www.dia.uniroma3.it/~java/fondinf2/ Altri Esercizi 1 Contenuti!Definizione

Dettagli

Programmazione in Java Parte II

Programmazione in Java Parte II Programmazione in Java Parte II Lezione 7 Dott. Marco Faella Il Java Collection Framework Java Collection Framework (JCF) è una parte della libreria standard dedicata alle collezioni, intese come classi

Dettagli

Metodi di una Collection

Metodi 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

Dettagli

semplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente

semplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente 1 of 23 22/11/2004 10.23 Liste: semplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente Rappresentazione grafica Lista semplice:

Dettagli

10/10/2016. Caratteristiche degli array. Il tipo RECORD. Il record. LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica

10/10/2016. Caratteristiche degli array. Il tipo RECORD. Il record. LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica Caratteristiche degli array Principali caratteristiche degli array: LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica Marco Lapegna Dipartimento di Matematica e Applicazioni Universita degli

Dettagli

Standard Template Library

Standard Template Library Standard Template Library Standard Template Library Progettata per gestire insiemi di dati in modo comodo ed efficiente senza conoscere dettagli implementativi Fa parte dello standard C++ È basata a sulla

Dettagli

1 Strutture di dati dinamiche. 2 Vector come esempio di array dinamico

1 Strutture di dati dinamiche. 2 Vector come esempio di array dinamico 1 Strutture di dati dinamiche Le strutture dinamiche servono per memorizzare i dati dei quali non si sa a priori la loro dimensione. Ad esempio non sappiamo a priori quanti contatti avremo nella nostra

Dettagli

Corso di Algoritmi e Strutture Dati con Laboratorio. Tipi di dato pila e coda

Corso di Algoritmi e Strutture Dati con Laboratorio. Tipi di dato pila e coda Corso di Algoritmi e Strutture Dati con Laboratorio Tipi di dato pila e coda Uno stack è una collezione di elementi ( tipo di dato astratto) che supporta le seguenti operazioni tipiche: push, pop, peek

Dettagli

ADT Mappa. Le chiavi (il mezzo per accedere agli elementi) hanno lo scopo di rendere efficiente la ricerca. Strutture Dati

ADT 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

Dettagli

ADT Dizionario. Come nella Mappa: Diversamente dalla Mappa:

ADT 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

Dettagli

Algoritmi e Strutture di Dati

Algoritmi e Strutture di Dati Algoritmi e Strutture di Dati Tipi astratti di dato (pile e code realizzate tramite array) m.patrignani Nota di copyright queste slides sono protette dalle leggi sul copyright il titolo ed il copyright

Dettagli

Orario delle lezioni LABORATORIO TEORIA. mercoledì. martedì aula P/4. lab Turing. Strutture Dati

Orario delle lezioni LABORATORIO TEORIA. mercoledì. martedì aula P/4. lab Turing. Strutture Dati Orario delle lezioni LABORATORIO martedì 15.00-18.00 TEORIA mercoledì 16.00 18.00 lab Turing aula P/4 Libro di testo Data Structures & Algorithms in Java Michael T. Goodrich Roberto Tamassia John Wiley

Dettagli

Si usano quando serve accesso rapido sia in lettura che in scrittura su un insieme non ordinato

Si usano quando serve accesso rapido sia in lettura che in scrittura su un insieme non ordinato Le tavole hash È il modo con cui sono realizzati gli HashSet Si usano quando serve accesso rapido sia in lettura che in scrittura su un insieme non ordinato Principio base Gli array hanno le caratteristiche

Dettagli

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Programmazione. 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

Dettagli

INTRODUZIONE INTRODUZIONE TABELLE HASH FUNZIONE HASH

INTRODUZIONE INTRODUZIONE TABELLE HASH FUNZIONE HASH INTRODUZIONE INTRODUZIONE Una tabella hash è una struttura dati che permette operazioni di ricerca e inserimento molto veloci: in pratica si ha un costo computazionale costante O(1). Si ricorda che la

Dettagli

Strutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05

Strutture 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

Dettagli

Hash Table. Hash Table

Hash Table. Hash Table Hash Table La ricerca di un elemento su una lista (semplice o doppia) presenta una complessità di tipo O(n), dato che occorre scandire (al più) l intera lista per poter trovare l elemento desiderato. Le

Dettagli

Dati e Algoritmi 1: A. Pietracaprina. Mappa (I parte)

Dati e Algoritmi 1: A. Pietracaprina. Mappa (I parte) Dati e Algoritmi 1: A. Pietracaprina Mappa (I parte) 1 Mappa In generale, una Mappa è una collezione di entry che supporta, come metodi principali: ricerca, inserimento, rimozione. Gradi di libertà: Universo

Dettagli

lezione 5 Tipo di dato Lista Liste

lezione 5 Tipo di dato Lista Liste lezione 5 Liste Tipo di dato Lista Una lista permette di memorizzare dati in maniera sequenziale e permette di inserire, accedere e cancellare dati in posizioni arbitrarie (non come nel caso di pile e

Dettagli

ADT LISTA: altre operazioni non primitive ADT LISTA COSTRUZIONE ADT LISTA COSTRUZIONE ADT LISTA (2)

ADT 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

Dettagli

Algoritmi e Strutture Dati. Lezione 5

Algoritmi e Strutture Dati. Lezione 5 Algoritmi e Strutture Dati Lezione 5 www.iet.unipi.it/a.virdis Antonio Virdis antonio.virdis@unipi.it 1 Sommario Hashing Hashing e tipi di input Esercizi 2 Array ++ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 3

Dettagli

Array. Walter Didimo

Array. Walter Didimo Array Walter Didimo Un problema ricorrente Gli strumenti di programmazione che abbiamo visto sin qui non sono ancora sufficienti per risolvere tutti i problemi di base Consideriamo ad esempio il seguente

Dettagli

Liste con sentinella. intlist *createlist(void){ intlist *q = malloc(sizeof(intlist)); if(!q) { exit(-1); } q->next = q->prev = q; return q; }

Liste con sentinella. intlist *createlist(void){ intlist *q = malloc(sizeof(intlist)); if(!q) { exit(-1); } q->next = q->prev = q; return q; } Liste con sentinella Un ulteriore semplificazione delle operazioni sulle liste si ottiene utilizzando un elemento sentinella (dummy) che non contiene informazione, ma serve a segnalare la fine e l inizio

Dettagli

Pile e code. ADT e strutture dati per la rappresentazione di sequenze ad accesso LIFO e FIFO

Pile e code. ADT e strutture dati per la rappresentazione di sequenze ad accesso LIFO e FIFO Pile e code ADT e strutture dati per la rappresentazione di sequenze ad accesso LIFO e FIFO Le Pile Una pila è una struttura dati lineare, alla quale gli elementi possono essere aggiunti o sottratti da

Dettagli

Introduzione al Java Collections Framework. Java Collections Framework (cont.) Interfacce del Collections Framework

Introduzione 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

Dettagli

Liste concatenate. Collezione ordinata di nodi. Carlo Paolo Simona. Anna. ciascun nodo contiene due riferimenti:

Liste concatenate. Collezione ordinata di nodi. Carlo Paolo Simona. Anna. ciascun nodo contiene due riferimenti: Liste concatenate Collezione ordinata di nodi head tail next next next next element element element element Ø Anna Carlo Paolo Simona ciascun nodo contiene due riferimenti: - un riferimento "element" a

Dettagli

Strutture dati Alberi binari

Strutture dati Alberi binari Strutture dati - 2 - Alberi binari Definizione L albero è un insieme di elementi (nodi), sui quali è definita una relazione di discendenza con due proprietà: esiste un solo nodo radice senza predecessori

Dettagli

Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals()

Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals() Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals() Ereditarietà (Inheritance) RIASSUMIAMO DALLA SCORSA

Dettagli

Esercitazione 8. Corso di Tecniche di programmazione. Laurea in Ingegneria Informatica

Esercitazione 8. Corso di Tecniche di programmazione. Laurea in Ingegneria Informatica Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Esercitazione 8 Corso di Tecniche di programmazione Laurea in Ingegneria Informatica (Canale di Ingegneria delle Reti

Dettagli

Liste. Introduzione alle strutture dati. Capitolo 17 Introduzione alle strutture dati

Liste. Introduzione alle strutture dati. Capitolo 17 Introduzione alle strutture dati Liste Introduzione alle strutture dati 1 Una lista concatenata di stringhe 2 public class LList /** Metodi per manipolare le liste /** Una lista e un riferimento ad un oggetto della classe Link private

Dettagli

Introduzione al Java Collections Framework

Introduzione 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

Dettagli

Ereditarietà (ultima)

Ereditarietà (ultima) Ereditarietà (ultima) Classi astratte Un ibrido tra classi e interfacce Hanno alcuni metodi implementati normalmente, altri astratti Un metodo astratto non ha implementazione abstract class AccountTransaction...

Dettagli

Ereditarietà (ultima)

Ereditarietà (ultima) Ereditarietà (ultima) Classi astratte Un ibrido tra classi e interfacce Hanno alcuni metodi implementati normalmente, altri astratti Un metodo astratto non ha implementazione abstract class AccountTransaction

Dettagli

Generics & Collections

Generics & 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

Dettagli

algoritmi e strutture di dati

algoritmi e strutture di dati algoritmi e strutture di dati tipi astratti di dato (pile, code, liste implementate tramite array) m.patrignani nota di copyright queste slides sono protette dalle leggi sul copyright il titolo ed il copyright

Dettagli

La struttura dati PILA

La 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

Esempio su strutture dati dinamiche: ArrayList

Esempio 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

Dettagli

Questa soluzione va contemplata quando le lunghezze stimate dalle liste usate sono significativamente maggiori delle dimensioni di un elemento.

Questa soluzione va contemplata quando le lunghezze stimate dalle liste usate sono significativamente maggiori delle dimensioni di un elemento. Un ulteriore semplificazione si ottiene utilizzando un elemento sentinella (dummy) che non contiene informazione, ma serve a segnalare la fine (e l inizio) di una lista. Questa soluzione va contemplata

Dettagli

se invoco un metodo di Object che è ridefinito in Point, viene invocato il metodo definito in Point

se 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

Dettagli

Gestione dinamica di una coda

Gestione dinamica di una coda Gestione dinamica di una coda Una coda o queue è una lista lineare a lunghezza variabile in cui l'inserimento di nuovi elementi (push) viene effettuato ad un estremo (fondo o rear) e l'estrazione degli

Dettagli

Laboratorio di Programmazione

Laboratorio di Programmazione Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 25 Le liste in C struct nodo { int info; struct nodo *next; }; typedef struct nodo Nodo; typedef Nodo *PNodo; Inserimento in ordine

Dettagli

Progettazione del Software

Progettazione del Software Progettazione del Software Programmazione in Java (6) The Collections Framework Domenico Fabio Savo Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti Sapienza Università di

Dettagli

Tipi astratti pila e coda

Tipi astratti pila e coda Tipi astratti pila e coda Una pila è un tipo astratto che consente di rappresentare un insieme di elementi in cui ogni eliminazione ha per oggetto l elemento che è stato inserito per ultimo. Questa disciplina

Dettagli

heap heap heap? max- e min-heap concetti ed applicazioni heap = catasta condizione di heap non è una struttura ordinata

heap heap heap? max- e min-heap concetti ed applicazioni heap = catasta condizione di heap non è una struttura ordinata heap heap concetti ed applicazioni heap = catasta condizione di heap 1. albero binario perfettamente bilanciato 2. tutte le foglie sono a sinistra ma non è un BST!! 3. ogni nodo contiene una chiave maggiore

Dettagli

Tipi di dato e Strutture dati elementari

Tipi di dato e Strutture dati elementari Tipi di dato e Strutture dati elementari Ing. Paolo Craca Anno accademico 2007/2008 Tipi di dato e Strutture dati elementari 1 / 40 Cosa vedremo in questo seminario 1 Introduzione 2 Pile 3 Code 4 5 Bibliografia

Dettagli

Sul pattern Iterator

Sul 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.

Dettagli

IL COMPONENTE STACK (pila)

IL COMPONENTE STACK (pila) COMPONENTI SOFTWARE Diverse tipologie di componenti: Librerie semplici collezioni di procedure e funzioni.non fanno uso di variabili globali o statiche e non definiscono nuovi tipi (visibili all esterno)

Dettagli

tipi di dato astratti

tipi di dato astratti tipi di dato astratti liste pile code alberi grafi Alberto Ferrari Informatica ADT o un tipo di dato astratto o ADT (Abstract Data Type) è un tipo di dato le cui istanze possono essere manipolate con modalità

Dettagli

PROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE

PROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE PROGRAMMAZIONE II canale A-D 2007-2008 14 luglio 2008 TRACCIA DI SOLUZIONE 1. Si vogliono realizzare mediante puntatori delle liste circolari, cioè delle liste tali che l ultimo elemento della lista punta

Dettagli