COLLEZIONI. SOMMARIO Collezioni: Liste: ITERATORI ITERATORI

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "COLLEZIONI. SOMMARIO Collezioni: Liste: ITERATORI ITERATORI"

Transcript

1 SOMMARIO Collezioni: Array e liste. Iteratori. Classi interne. Nodi: dati e riferimenti. Liste: LinkedList: specifica e implementazione. Prestazioni. COLLEZIONI Una collezione (contenitore) è un oggetto che raggruppa più dati in una singola struttura. Vi sono due tecniche fondamentali per rappresentare collezioni di elementi: quella basata su strutture indicizzate (array, composti da elementi consecutivi) e quella basata su strutture collegate (list, composte da nodi: ogni nodo contiene dati e collegamenti ad altri nodi). Le collezioni sono usate per memorizzare, leggere, manipolare dati strutturati e per trasmettere tali dati da un metodo ad un altro. Strutture Software 1 - Liste 1 Strutture Software 1 - Liste 2 ITERATORI Una tipica operazione che si esegue su collezioni è esaminare tutti gli elementi uno alla volta. Per gli array è semplice scandire tutti gli elementi attraverso un indice e un ciclo for. In generale, una generica collezione non ha i dati organizzati in una struttura così rigida e lineare. Di conseguenza si introduce il concetto di iteratore, generalizzando la scansione lineare di un array. Strutture Software 1 - Liste 3 ITERATORI Un iteratore è un oggetto di una classe che implementa l interfaccia IEnumerator. Tale interfaccia contiene: bool MoveNext(); object Currentget; void Reset();. Un iteratore è restituito da una collezione sulla quale si è invocato il metodo: IEnumerator GetEnumerator(); descritto dall interfaccia IEnumerable. Tale iteratore consente di scandire i dati della collezione usando i metodi dell interfaccia. Strutture Software 1 - Liste 4

2 ITERATORI Il metodo MoveNext() sposta l iteratore sul successivo elemento della collezione (al momento della creazione l iteratore precede il primo elemento), restituisce se l operazione è andata a buon fine, false se si è superata la fine della collezione. La proprietà Current fornisce l elemento corrente nella collezione (solo in lettura). Il metodo Reset() riposiziona l iteratore nella posizione iniziale: precedente il primo elemento della collezione. Un iteratore è valido solo se la collezione non è modificata mentre lo si usa. Strutture Software 1 - Liste 5 ITERATORI Sfruttando questo strumento possiamo scrivere una porzione di codice per accedere a tutti gli elementi di una qualsiasi collezione. Vediamo un esempio con la collezione array. int[] vett = 1, 3, 5, 2, 4, 6 ; IEnumerator iter = vett.getenumerator(); while (iter.movenext()) Console.Write(iter.Current + " "); Una possibile uscita Strutture Software 1 - Liste 6 ITERATORI In C# vi è la parola chiave foreach che permette di accedere in modo semplificato agli iteratori delle collezioni: foreach(int valore in vett) Console.Write(valore + " "); Da questo esempio si può intuire la potenza degli iteratori. Tuttavia la loro implementazione ci porta a considerare le classi interne. Perché è un oggetto che può operare sui dati privati della collezione ed è ritornato da un metodo della classe della collezione, inoltre si possono creare più oggetti iteratore sulla stessa collezione. Strutture Software 1 - Liste 7 CLASSI INTERNE Una classe interna (inner class) è definita internamente ad un altra classe (outer class). La classe interna può accedere a tutti i membri della classe esterna. Di solito è una helper class che non è esplicitamente utilizzata all esterno. Di solito la classe interna implementa un interfaccia che permette di invocare dall esterno i metodi della classe interna attraverso il riferimento creato da un metodo della classe che la include. Strutture Software 1 - Liste 8

3 CLASSI INTERNE Il fatto di creare una classe interna, invece di creare un unica classe, ci permette di creare più oggetti della classe interna che operano sullo stesso oggetto della classe esterna. Un esempio di classe interna è mostrato nella realizzazione di un iteratore per una collezione. NODI Fino ad ora si sono usate le strutture dati array (semplici e performanti). La loro caratteristica è di avere celle memorizzate sequenzialmente che sono accessibili attraverso indici con costo O(1). Tuttavia si può pensare di usare strutture dati in cui l ordinamento dei dati è solo a livello logico (senza usare un sottostante ordinamento fisico). Questo si può realizzare associando ad ogni elemento anche un riferimento all elemento che lo segue nella sequenza. Strutture Software 1 - Liste 9 Strutture Software 1 - Liste 10 NODI La struttura dati che sfrutta tale idea è la lista. Per ora vediamo di realizzare questa idea di elementi più riferimenti: un oggetto (nodo) che contenga, oltre all informazione sull elemento memorizzato, anche un riferimento al nodo che contiene l elemento che nella sequenza lo segue. Esempio di due nodi: null Strutture Software 1 - Liste 11 class object Element; Next; I due campi sono private per default. NODI La dichiarazione ricorsiva (il campo next è di tipo ) di un nodo può sembrare pericolosa, ma è corretta. Ciò che dichiara è un riferimento ad un oggetto di tipo e non un oggetto stesso. public (object e) if (e == null) throw new Exception("Elemento null."); Element = e; Next = null; Strutture Software 1 - Liste 12

4 NODI public (object e, n) if (e == null) throw new Exception("Elemento null."); Element = e; Next = n; public next get return Next; set Next = value; public object element get return Element; set Element = value; NODI Vediamo un semplice uso di tale oggetto: n1, n2; n1 = new ("Primo"); n2 = new ("Secondo"); n1.next = n2; Console.WriteLine(n1.element); Console.WriteLine(n1.next.element); Una possibile uscita Primo Secondo Attraverso n1 si accede al contenuto di n2. Strutture Software 1 - Liste 13 Strutture Software 1 - Liste 14 LISTE: introduzione Gli array presentano due limitazioni: Modificare la dimensione dell array richiede la creazione di un nuovo array e la copia di tutti i dati dall array originale a quello nuovo. Inserire un elemento nell array richiede lo scorrimento di dati nell array. Queste limitazioni possono essere superate da strutture concatenate: una collezione di nodi che contengono dati e riferimenti ad altri nodi. In particolare si fa riferimento alle liste concatenate (linked list). Strutture Software 1 - Liste 15 LISTE: introduzione Uno svantaggio delle liste concatenate consiste nell onerosità dell accesso ai suoi elementi: l unico modo per raggiungere un elemento della lista è quello di seguire le connessioni della lista dall inizio in modo sequenziale. Mentre negli array è possibile accedere a qualsiasi elemento attraverso un indice. I metodi di manipolazione delle liste sono diversi da quelli visti per gli array. In generale, una lista rende più semplice la riorganizzazione degli elementi. Strutture Software 1 - Liste 16

5 LISTE: specifica Una possibile (e minima) interfaccia è la seguente: interface IList: IEnumerable bool Add(object x); Per scandire gli elementi in sequenza attraverso un iteratore. Inserisce l'oggetto x in fondo alla lista. LISTE Sia L un oggetto di tipo IList: ecco alcune operazioni senza iteratori. Invocazione metodo L.IsEmpty(); L.Add( a ); Stato della lista [] [a] risultato bool Remove(object x); bool Contains(object x); bool IsEmpty(); void Clear(); Cancella la prima occorrenza dell'oggetto x. Verifica se la lista contiene l'oggetto x. Verifica se la lista è logicamente vuota. Svuota la lista. L.Add( b ); L.Add( c ); L.Contains( b ); L.Remove( b ); L.Contains( b ); L.IsEmpty(); [a b] [a b c] [a b c] [a c] [a c] [a c] false false Strutture Software 1 - Liste 17 Strutture Software 1 - Liste 18 LISTE Alcune operazioni con iteratori: la barra denota un cursore. Invocazione metodo L.Add(2); L.Add(5); L.Add(4); IEnumerator i=l.getenumerator(); i.movenext() i.movenext() i.current() i.reset() Stato della lista [ 2 ] [ 2 5 ] [ ] [ ] [ ] [ ] [2 5 4 ] [ ] risultato i è un iteratore Strutture Software 1 - Liste 19 5 LISTE: esempio Una porzione di codice che legge un file (nomi.txt) e memorizza il contenuto in una lista. Viene allocata la giusta quantità di elementi. Stampa il contenuto della lista attraverso l uso di un iteratore. Rimuove un elemento della lista (Mario) e stampa il nuovo contenuto della lista attraverso l uso di un foreach. nomi.txt Luca Mario Elisa Andrea Una possibile uscita Luca Mario Elisa Andrea Luca Elisa Andrea Strutture Software 1 - Liste 20

6 LISTE: esempio StreamReader fin = new StreamReader("nomi.txt"); string sinput1; IList L = new LinkedList(); while ((sinput1 = fin.readline())!= null) L.Add(sInput1); fin.close(); IEnumerator iter = L.GetEnumerator(); while (iter.movenext()) Console.Write(iter.Current + " "); Console.Write("\n \n"); L.Remove("Mario"); foreach (string s in L) Console.Write(s + " "); LISTE: implementazione Una possibile realizzazione della lista consiste nel considerare una sequenza di nodi che contengono un dato e un riferimento al nodo successivo nella sequenza. Tale sequenza è realizzata nella classe LinkedList che implementa l interfaccia IList. Un oggetto di tipo LinkedList è manipolato utilizzando i metodi resi disponibili dall interfaccia IList, non si accede direttamente alla sequenza di nodi. È un tipo di dato astratto, ADT. Strutture Software 1 - Liste 21 Strutture Software 1 - Liste 22 LISTE: implementazione Si realizza l interfaccia IList con la classe LinkedList e l interfaccia IEnumerator con la classe interna Iteratore. <<interface>> IList: IEnumerable bool Add(object x) bool Remove(object x) bool Contains(object x) bool IsEmpty() void Clear() <<interface>> IEnumerator bool MoveNext() object Current void Reset() LinkedList first last int mod IEnumerator GetEnumerator() bool Add(object x) bool Remove(object x) bool Contains(object x) bool IsEmpty() void Clear() Iteratore LinkedList ll; cursor; int expmod; Iteratore() bool MoveNext() object Current void Reset() NODI: operazioni principali Le due principali operazioni da realizzare sulle liste concatenate (sui nodi della lista nella fase di implementazione) sono: la cancellazione di un elemento della lista e l inserimento di un elemento nella lista. Quindi diminuire o aumentare la lunghezza di una lista. La semplicità di tali operazioni è la ragione d essere delle liste concatenate. Strutture Software 1 - Liste 23 Strutture Software 1 - Liste 24

7 current= NODI: operazioni principali element=obj3 current= NODI: operazioni principali element=obj3 x= null element=obj3 Il nodo da cancellare viene fatto cadere : current è un riferimento ad un oggetto, se prima della cancellazione current.next punta al nodo obj2, allora: current.current.next.next; Strutture Software 1 - Liste 25 element=obj3 Un nodo da inserire: current e x sono riferimenti ad oggetti, se prima dell inserimento current.next punta al nodo obj3, allora: x.current.next; current.x; Strutture Software 1 - Liste 26 LISTE: implementazione, LinkedList Vediamo una possibile implementazione della lista. LINKEDLIST Una possibile rappresentazione grafica: Si usa una variabile first che mantiene il riferimento al primo nodo della lista e una variabile last che mantiene un riferimento all ultimo nodo. Inoltre è utilizzata una variabile intera mod, che tiene conto delle modifiche alla lista, per evitare che modifiche concorrenti possano interferire con il comportamento degli iteratori. LinkedList first= last= mod=... element=objn null Strutture Software 1 - Liste 27 Strutture Software 1 - Liste 28

8 class LinkedList : IList private first; private last; private int mod; LINKEDLIST public LinkedList() first = last = null; mod = 0; Numero di modifiche: chiamate a Remove(), Add() e Clear(). LINKEDLIST public bool IsEmpty() return first == null; public void Clear() first = last = null; mod++; Strutture Software 1 - Liste 29 Strutture Software 1 - Liste 30 LINKEDLIST: ricerca public bool Contains(object x) if (x == null) throw new Exception("Argomento null."); for ( i = first; i!= null; i = i.next) if (x.equals(i.element)) return ; return false; Si esaminano i nodi della lista con un ciclo for: si definisce una variabile i di tipo a cui si assegna un riferimento al primo nodo. Si esce dal ciclo quando si finiscono i nodi. L incremento si ottiene con l assegnamento i=i.next, che sposta il riferimento al nodo successivo. Strutture Software 1 - Liste 31 first= first= element=obja element=obja LINKEDLIST: ricerca i = first; i!= null; x.equals(i.element); i= i = i.next element=objb i= element=objb element=objc element=objc i!= null; x.equals(i.element); Strutture Software 1 - Liste 32

9 LINKEDLIST: inserimento LINKEDLIST: inserimento public bool Add(object x) if (x == null) throw new Exception("Argomento null."); if (IsEmpty()) first = last = new (x); Lista non vuota else last.next = new (x); last = last.next; mod++; return ; Lista vuota Strutture Software 1 - Liste 33 Lista non vuota: last= element=objn null element=objn last= element=x null last.new (x); last=last.next; Strutture Software 1 - Liste 34 LINKEDLIST: prestazioni Aggiungere un nodo alla lista ha un costo computazionale costante O(1): è indipendente dal numero di nodi nella lista. Non si devono copiare gli elementi in una nuova struttura, come nel caso di array pieni. Verificare se la lista contiene un dato oggetto implica l uso di un ciclo for. Si consideri il caso medio: se ogni nodo della lista ha la stessa probabilità di contenere il dato, allora si ha una iterazione per verificare il primo nodo, due iterazioni per verificare il secondo nodo, e in una sequenza lunga n si ha in media 1 n i= 1 1 n( n + 1) i = n 2 = O( n) Strutture Software 1 - Liste 35 n LINKEDLIST: rimozione public bool Remove(object x) if (x == null) throw new Exception("Argomento null."); if (IsEmpty()) return false; if (x.equals(first.element)) if (first == last) last = null; first = first.next; mod++; return ; Primo elemento e ultimo for ( i = first; i.next!= null; i = i.next) if (x.equals(i.next.element)) if (i.next == last) last = i; i.next = i.next.next; mod++; return ; return false; Strutture Software 1 - Liste 36

10 LINKEDLIST: rimozione LINKEDLIST: prestazioni Primo elemento: first= first=first.next; first= Considerazioni analoghe a quelle sviluppate per calcolare la complessità computazionale media del metodo per la ricerca di un dato valgono anche per il metodo di rimozione di un dato. Quindi il metodo Remove() ha in media un costo lineare, cioè O(n). Strutture Software 1 - Liste 37 Strutture Software 1 - Liste 38 LINKEDLIST: iteratore Il metodo GetEnumerator() restituisce un oggetto iteratore sulla lista per scandire gli elementi in sequenza a partire dall inizio della lista. public IEnumerator GetEnumerator() return new Iteratore(this); La classe dell iteratore è definita come classe interna (Iteratore) alla classe LinkedList. LINKEDLIST: implementazione iteratore Vediamo una possibile implementazione dell iteratore secondo l interfaccia IEnumerator. Si usa una variabile cursor che individua il nodo il cui contenuto è restituito dalla proprietà Current. La variabile ll di tipo LinkedList fa riferimento all oggetto che ha creato l iteratore: attraverso tale riferimento si accede ai dati contenuti nell oggetto lista. Inoltre è utilizzata una variabile intera expmod, che tiene conto delle modifiche alla lista durante l iterazione, per verificare se sono avvenute eventuali modifiche concorrenti. Strutture Software 1 - Liste 39 Strutture Software 1 - Liste 40

11 LINKEDLIST: implementazione iteratore class LinkedList : IList class Iteratore : IEnumerator LinkedList ll; cursor; int expmod; Classe interna public Iteratore(LinkedList o) ll = o; cursor = null; expmod = ll.mod; Strutture Software 1 - Liste 41 LINKEDLIST: implementazione iteratore public object Current Modifica concorrente get if (ll.mod!= expmod) throw new Exception("Collezione modificata."); if (cursor == null) throw new Exception("Stato non valido."); return cursor.element; public void Reset() if (ll.mod!= expmod) throw new Exception("Collezione modificata."); cursor = null; Strutture Software 1 - Liste 42 LINKEDLIST: implementazione iteratore public bool MoveNext() if (ll.mod!= expmod) throw new Exception("Collezione modificata."); if (ll.isempty()) return false; if (cursor == null) cursor = ll.first; return ; if (cursor!= ll.last) cursor = cursor.next; return ; else return false; LISTE: considerazioni Se è necessario un accesso immediato a ciascun elemento, allora l array è la scelta migliore. Se si accede frequentemente solo ad alcuni elementi (i primi, gli ultimi) e se la modifica della struttura è il cuore di un algoritmo, allora la lista concatenata è la scelta migliore. Un vantaggio delle liste è che usano la quantità minima di memoria necessaria e sono facilmente ridimensionabili. Al contrario un array può essere modificato in dimensione solo di quantità fisse (per esempio dimezzato o raddoppiato). Strutture Software 1 - Liste 43 Strutture Software 1 - Liste 44

12 LISTE: prestazioni Vediamo in dettaglio le prestazioni di un array e di una linkedlist. Si devono distinguere due casi: dati ordinati e dati non ordinati. Elementi non in ordine. Con entrambe le soluzioni la ricerca è sequenziale e quindi ha un costo O(n). L inserimento o la rimozione di un dato ha un costo costante O(1): si può inserire in fondo alla lista, dato che non deve essere mantenuto un ordinamento. Nel caso dell array potrebbe essere necessario un ridimensionamento. Strutture Software 1 - Liste 45 LISTE: prestazioni Elementi ordinati. Per un array ordinato si può sfruttare l algoritmo di ricerca binaria con un costo O(log n), mentre per una lista la ricerca è sequenziale con un costo O(n) (non si può accedere direttamente al centro di una lista). Inserimento o rimozione di un dato. Per un array è veloce trovare la posizione, O(log n), ma è necessario far scorrere gli elementi per mantenere l ordinamento, costo O(n). Pertanto il costo dell operazione è lineare, O(n). Inoltre potrebbe essere necessario un ridimensionamento. Strutture Software 1 - Liste 46 LISTE: prestazioni Inserimento o rimozione di un dato. Per una lista è più oneroso trovare la posizione, O(n), ma è una operazione veloce inserire o rimuovere un elemento, costo O(1). Pertanto il costo dell operazione è lineare, O(n). Si deve tener presente che due operazioni che hanno lo stesso costo computazionale asintotico non implicano lo stesso tempo di esecuzione. La notazione asintotica è un approssimazione del numero di operazioni base eseguite. LISTE: ordinamento Risulta evidente che c è interesse ad avere delle tabelle di dati ordinati. Vediamo come si può affrontare il problema dell ordinamento per le liste. Nel caso delle liste sono utili gli algoritmi che elaborano i dati sequenzialmente, modalità che può essere efficientemente supportata dalle liste concatenate. Si può pensare di inserire un metodo Sort(), che ordini la lista lavorando direttamente sui nodi. Strutture Software 1 - Liste 47 Strutture Software 1 - Liste 48

13 LISTE: ordinamento Consideriamo l ordinamento per selezione di una lista concatenata. Si scandisce la lista per determinare il valore minimo, si rimuove tale elemento dalla lista e lo si inserisce in fondo ad una nuova lista. Si usano dei nodi ausiliari per poter manipolare la lista. Per la rimozione è conveniente avere il riferimento al nodo che precede quello che contiene il minimo. Vediamo una possibile implementazione. Strutture Software 1 - Liste 49 LISTE: ordinamento public void Sort() least, outfirst = null, outlast = null; if (IsEmpty() last == first) return; i = new (new object(), first); while (i.next!= null) least = i; for ( j = i.next; j.next!= null; j = j.next) if (((IComparable)j.next.element).CompareTo(least.next.element)< 0) least = j; if (outfirst == null) outfirst = outlast = least.next; else outlast.next = least.next; outlast = outlast.next; least.next = least.next.next; first = outfirst; last = outlast; mod++; Strutture Software 1 - Liste 50 LISTE: ordinamento Un esempio di uso del metodo Sort(): LinkedList L = new LinkedList(); Random rnd = new Random(); for (int i = 0; i < 15; i++) L.Add(rnd.Next(21) - 10); foreach (int n in L) Console.Write(n + " "); Console.Write("\n"); L.Sort(); foreach (int n in L) Console.Write(n + " "); Una possibile uscita Boxing del tipo int. Strutture Software 1 - Liste 51 LISTE: ordinamento In molti casi non si ha bisogno di implementare esplicitamente un algoritmo di ordinamento. Si può mantenere ordinata la lista mentre si inseriscono elementi: è sufficiente modificare il metodo Add() in modo che inserisca il nuovo elemento nella corretta posizione. In tal caso il costo dell operazione di inserimento è maggiore perché implica prima una ricerca. Strutture Software 1 - Liste 52

14 LISTE: ordinamento Un altra possibile soluzione è quella di copiare la lista in un array, ordinare l array (con un costo O(n log n)) e iterare sulla lista per mettere i dati ordinati nuovamente in lista. In generale, potrebbe essere necessario implementare un diverso tipo di iteratore che permetta operazioni sugli elementi della lista, quali rimozioni e inserimenti. Strutture Software 1 - Liste 53 LISTE: doppiamente concatenate Esistono altri tipi di lista, vediamone alcuni. La lista descritta è di tipo semplicemente concatenata: i nodi hanno informazione solo sul loro successore, per cui non si ha accesso al loro predecessore. Si può definire una lista doppiamente concatenata in modo che ogni nodo abbia due campi riferimento: uno al successore e uno al predecessore. In tal modo è possibile percorrere la lista nei due sensi. Strutture Software 1 - Liste 54 LISTE: con salti Per trovare un elemento in una lista è necessaria uno scansione sequenziale. Anche se la lista è ordinata è sempre necessaria una scansione sequenziale. Si evita questo problema utilizzando una lista con salti: liste che consentano di saltare alcuni nodi per evitare manipolazioni sequenziali. La struttura interna è più complessa: nodi con un numero di campi riferimento diverso. o1 o2 o3 LISTE: con salti o4 o5 La ricerca può essere efficiente, anche O(log n), tuttavia sono molto inefficienti le procedure di inserimento e cancellazione. o6 o7 o8 o9 Strutture Software 1 - Liste 55 Strutture Software 1 - Liste 56

Sommario. Collezioni. Collezioni: Liste: Pile (stack) Collezioni. Collezioni. Collezioni Struttura indicizzata (array) Nodi

Sommario. Collezioni. Collezioni: Liste: Pile (stack) Collezioni. Collezioni. Collezioni Struttura indicizzata (array) Nodi Sommario : Array e liste. Nodi: dati e riferimenti. Liste: LinkedList: specifica e implementazione. Prestazioni. Pile (stack) Informatica Medica, I semestre, C++ 1 Una collezione (contenitore) è un oggetto

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

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

Inserimento in una lista ordinata

Inserimento in una lista ordinata Inserimento in una lista ordinata Vogliamo inserire un nuovo elemento in una lista in cui gli elementi sono memorizzati in ordine crescente: Passo 1: creare un nuovo nodo della lista Passo 2: trovare il

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

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

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

Esercitazione 11. Liste semplici

Esercitazione 11. Liste semplici Esercitazione 11 Liste semplici Liste semplici (o lineari) Una lista semplice (o lineare) è una successione di elementi omogenei che occupano in memoria una posizione qualsiasi. Ciascun elemento contiene

Dettagli

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

Esercizi 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

Dettagli

ALBERI : introduzione SOMMARIO ALBERI ALBERI. ALBERI: introduzione ALBERI BINARI: introduzione VISITE RICORSIVE DI ALBERI

ALBERI : introduzione SOMMARIO ALBERI ALBERI. ALBERI: introduzione ALBERI BINARI: introduzione VISITE RICORSIVE DI ALBERI SOMMARIO ALBERI: introduzione ALBERI BINARI: introduzione VISITE RICORSIVE DI ALBERI Dimensione e Altezza ALBERI BINARI DI RICERCA (BST) Introduzione Ricerca, inserimento e cancellazione Implementazione

Dettagli

Capitolo 17. Introduzione alle strutture di dati. Capitolo 17 Introduzione alle strutture di dati

Capitolo 17. Introduzione alle strutture di dati. Capitolo 17 Introduzione alle strutture di dati 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

Dettagli

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve LE STRUTTURE DATI DINAMICHE: GLI ALBERI Cosimo Laneve 1 argomenti 1. definizione di alberi e nozioni relative 2. implementazione degli alberi, creazione, visita 3. algoritmo di visita iterativa e sua implementazione

Dettagli

Strutture fisiche e strutture di accesso ai dati

Strutture fisiche e strutture di accesso ai dati Strutture fisiche e strutture di accesso ai dati 1 A L B E R T O B E L U S S I P R I M A P A R T E A N N O A C C A D E M I C O 2 0 1 2-2 0 1 3 Gestore dei metodi di accesso 2 E il modulo del DBMS che esegue

Dettagli

22 - Strutture Dati (Java Collections Framework)

22 - 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/

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi 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

Dettagli

Sommario. Le strutture dati elementari per implementare sequenze: Vettori Liste

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

Dettagli

Liste doppie. Doubly Linked Lists. GT: 6.2 (e 3.3) Argomenti della lezione

Liste 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

Dettagli

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

QUEUE : considerazioni. QUEUE : considerazioni. QUEUE : esempio. QUEUE : esempio

QUEUE : 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

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi 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

Dettagli

Implementazione ADT: Alberi

Implementazione 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

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica Liste semplici (semplicemente linkate) Una lista semplice e costituita da nodi Laboratorio di Informatica 7. Strutture complesse di dati in C++ Ogni nodo e una struttura che contiene : Dati Un riferimento

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

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 di ordinamento

Algoritmi di ordinamento Algoritmi di ordinamento! Selection Sort! Quick Sort! Lower bound alla complessità degli algoritmi di ordinamento Ordinamento 1 Selection Sort SelectionSort(dati[]) { for (i=0; idati.length-1; i++) { min

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

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

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

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

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

Il linguaggio C. Puntatori e dintorni

Il linguaggio C. Puntatori e dintorni Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;

Dettagli

4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste

4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste 4 Le liste collegate 4.0 Le liste collegate c Diego Calvanese Fondamenti di Informatica Corso di Laurea in Ingegneria Elettronica A.A. 2001/2002 4.0 0 4 Le liste collegate Rappresentazione di liste 4.1

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

Strutture dati per insiemi disgiunti

Strutture dati per insiemi disgiunti Strutture dati per insiemi disgiunti Servono a mantenere una collezione S = {S 1, S 2,..., S k } di insiemi disgiunti. Ogni insieme S i è individuato da un rappresentante che è un particolare elemento

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

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

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

Dettagli

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

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

Le liste con array. Rimuovere la perla rossa costringe a spostare molte altre perle. Dove mettere la perla verde se si è esaurito il filo?

Le 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

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

Implementazione dell albero binario in linguaggio C++

Implementazione dell albero binario in linguaggio C++ Implementazione dell albero binario in linguaggio C++ Costruire il programma per gestire le operazioni su un albero binario. Ogni nodo dell albero contiene un codice e una descrizione; il programma deve

Dettagli

Una breve introduzione all implementazione in C di algoritmi su grafo

Una breve introduzione all implementazione in C di algoritmi su grafo Una breve introduzione all implementazione in C di algoritmi su grafo A cura di Gianmaria Leo Introduzione La lezione è un introduzione a concetti e strumenti che permettono l implementazione di algoritmi

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

Esercizi su strutture dati

Esercizi su strutture dati Esercizi su strutture dati Marco Alberti Programmazione e Laboratorio, A.A. 2016-2017 Dipartimento di Matematica e Informatica - Università di Ferrara Ultima modifica: 21 dicembre 2016 Liste collegate

Dettagli

Linked Lists. Liste linkate (1) liste linkate ( stack, queues ), trees. Liste linkate come strutture

Linked 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

Dettagli

Introduzione Generics Iteratori. Collezioni in Java. Dr. Giulio Pellitta. 13 aprile 2011

Introduzione 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à.

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

Informatica 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: 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

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

Strutture Dinamiche. Fondamenti di Informatica

Strutture Dinamiche. Fondamenti di Informatica Strutture Dinamiche Fondamenti di Informatica 1 Indice Allocazione e de-allocazione di memoria Liste e loro gestione Companies, srl 2 Allocazione e cancellazione di memoria malloc (sizeof (TipoDato));

Dettagli

Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1

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

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

5. Quinta esercitazione autoguidata: liste semplici

5. Quinta esercitazione autoguidata: liste semplici 22 5. Quinta esercitazione autoguidata: liste semplici 5.1. Liste rappresentate mediante strutture e puntatori (LISTE1.C, LISTE2.C) Scrivere un programma che - costruisce una lista di k interi (con k letto

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

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 9 - Array 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 di Laurea

Dettagli

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

Dettagli

Alberi binari e alberi binari di ricerca

Alberi binari e alberi binari di ricerca Alberi binari e alberi binari di ricerca Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica

Dettagli

Il linguaggio C Strutture

Il linguaggio C Strutture Il linguaggio C Strutture Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ Linguaggio C -- Strutture 2 Ringraziamenti Questi

Dettagli

INDICI PER FILE. Accesso secondario. Strutture ausiliarie di accesso

INDICI PER FILE. Accesso secondario. Strutture ausiliarie di accesso INDICI PER FILE Strutture ausiliarie di accesso 2 Accesso secondario Diamo per scontato che esista già un file con una certa organizzazione primaria con dati non ordinati, ordinati o organizzati secondo

Dettagli

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Fondamenti 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

Dettagli

Laboratorio di Algoritmi e Strutture Dati. Code con Priorità

Laboratorio di Algoritmi e Strutture Dati. Code con Priorità Laboratorio di Algoritmi e Strutture Dati Code con Priorità Teresa M.A. Basile basile@di.uniba.it Dipartimento di Informatica Università degli Studi di Bari Aldo Moro Materiale di base gentilmente concesso

Dettagli

LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica. Algoritmi ricorsivi

LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica. Algoritmi ricorsivi LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica Marco Lapegna Dipartimento di Matematica e Applicazioni Universita degli Studi di Napoli Federico II wpage.unina.it/lapegna Partiamo da un

Dettagli

Il tipo astratto di dati Node List

Il tipo astratto di dati Node List 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

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

Algoritmi di ordinamento: Array e ricorsione

Algoritmi di ordinamento: Array e ricorsione Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ 1 Algoritmi di ordinamento: Array e ricorsione 2 1 Indice Algoritmi di ordinamento: Insertion

Dettagli

Heap e code di priorità

Heap e code di priorità Heap e code di priorità Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010

Dettagli

Informatica 1. Prova di recupero 21 Settembre 2001

Informatica 1. Prova di recupero 21 Settembre 2001 Informatica 1 Prova di recupero 21 Settembre 2001 Si risolvano i seguenti esercizi. Ai fini della determinazione del voto finale il loro punteggio andrà sommato al punteggio del laboratorio. Il tempo complessivo

Dettagli

Indice. Prefazione. 3 Oggetti e Java 53

Indice. Prefazione. 3 Oggetti e Java 53 Prefazione xv 1 Architettura dei calcolatori 1 1.1 Calcolatori e applicazioni 1 1.1.1 Alcuni esempi di applicazioni 3 1.1.2 Applicazioni e interfacce 4 1.2 Architettura dei calcolatori 7 1.2.1 Hardware

Dettagli

Tipi di dato strutturati: Array

Tipi di dato strutturati: Array Tipi di dato strutturati: Array I dati visti finora sono: numeri (interi o razionali), booleani le stringhe (sequenze di caratteri) ma i dati manipolati nelle applicazioni reali sono spesso complessi (o

Dettagli

ADT Dizionario. Ordered search table. Supponiamo che sia definita una relazione d'ordine totale sulle chiavi del dizionario D:

ADT Dizionario. Ordered search table. Supponiamo che sia definita una relazione d'ordine totale sulle chiavi del dizionario D: Ordered search table Supponiamo che sia definita una relazione d'ordine totale sulle chiavi del dizionario D: possiamo memorizzare le entrate di D in un array list S in ordine non decrescente di chiavi:

Dettagli

liste ogni nodo ha un successore, tranne l ultimo della lista che ne ha zero; alberi binari ogni nodo ha zero, uno oppure due figli

liste ogni nodo ha un successore, tranne l ultimo della lista che ne ha zero; alberi binari ogni nodo ha zero, uno oppure due figli Alberi generali Gli alberi visti fino a questo momento erano insiemi di nodi collegati fra di loro, in cui ogni nodo poteva avere al massimo due figli. Negli alberi generali, ogni nodo può avere un numero

Dettagli

Java Le stringhe. Stringhe

Java Le stringhe. Stringhe Java Le stringhe 1 Le stringhe in Java In Java le stringhe non sono semplicemente array di caratteri terminati con zero come avviene in C In Java le stringhe sono oggetti appartenenti alla classe String

Dettagli

Il Java Collections Framework

Il 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

Dettagli

Calcolare x n = x x x (n volte)

Calcolare x n = x x x (n volte) Calcolare x n = x x x (n volte) Abbiamo bisogno di: una variabile ris in cui ad ogni iterazione del ciclo si ha un risultato parziale, e che dopo l ultima iterazione contiene il risultato finale; una variabile

Dettagli

Pile: implementazione. Pile: implementazione. Pile: implementazione con array. Pile: implementazione con array. Pile: implementazione con array

Pile: implementazione. Pile: implementazione. Pile: implementazione con array. Pile: implementazione con array. Pile: implementazione con array Sommario Pile: Implementazione con Array Esempio: algoritmo per il controllo del bilanciamento delle parentesi. Tipi riferimento Pile: implementazione Si consideri ora la realizzazione della pila. Si sono

Dettagli

lezione 9 min-heap binario Heap e Alberi posizionali generali

lezione 9 min-heap binario Heap e Alberi posizionali generali lezione 9 Heap e Alberi posizionali generali min-heap binario Un min-heap è un albero binario quasi completo in cui ogni nodo i diverso dalla radice soddisfa la seguente proprietà: il valore memorizzato

Dettagli

Da libro di testo Cormen et al. CAP 21: par 21.1, 21.2, 21.3 pagg. 468-477 Strutture dati per insiemi disgiunti Una struttura dati per insiemi disgiunti mantiene una collezione S={S 1,S 2,,S k } di insiemi

Dettagli

Problemi, istanze, soluzioni

Problemi, istanze, soluzioni lgoritmi e Strutture di Dati II 2 Problemi, istanze, soluzioni Un problema specifica una relazione matematica tra dati di ingresso e dati di uscita. Una istanza di un problema è formata dai dati di un

Dettagli

Perché il linguaggio C?

Perché il linguaggio C? Il linguaggio C 7 Perché il linguaggio C? Larga diffusione nel software applicativo Standard di fatto per lo sviluppo di software di sistema Visione a basso livello della memoria Capacità di manipolare

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

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

Organizzazione Fisica dei Dati (Parte II)

Organizzazione Fisica dei Dati (Parte II) Modello Fisico dei Dati Basi di Dati / Complementi di Basi di Dati 1 Organizzazione Fisica dei Dati (Parte II) Angelo Montanari Dipartimento di Matematica e Informatica Università di Udine Modello Fisico

Dettagli

Alberi e alberi binari I Un albero è un caso particolare di grafo

Alberi e alberi binari I Un albero è un caso particolare di grafo Alberi e alberi binari Un albero è un caso particolare di grafo È costituito da un insieme di nodi collegati tra di loro mediante archi Gli archi sono orientati (ogni arco esce da un nodo origine ed entra

Dettagli

Implementazione della coda con liste concatenate. x v. il front della coda è memorizzato nel primo nodo (head) della lista

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

Dettagli

Informatica 3. Informatica 3. LEZIONE 17: Alberi generici. Lezione 17 - Modulo 1. Introduzione. ADT dell albero generico.

Informatica 3. Informatica 3. LEZIONE 17: Alberi generici. Lezione 17 - Modulo 1. Introduzione. ADT dell albero generico. Informatica 3 Informatica 3 LEZIONE 17: lberi generici Lezione 17 - Modulo 1 Modulo 1: Definizione e DT Modulo 2: Implementazione Modulo 3: lberi e classi di equivalenza Definizione e DT Politecnico di

Dettagli

Corso: Fondamenti di Informatica (Canale 5) a.a Corsi di laurea: Ing. Settore Informazione

Corso: 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'

Dettagli

Array e liste. IASD a.a

Array e liste. IASD a.a Array e liste IASD a.a. 2015-16 Sequenze lineari n elementi a 0, a 1,..., a n 1 dove a j = (j + 1)-esimo elemento per 0 ij n 1. In una sequenza è importante l ordine degli elementi Consideriamo una sequenza

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

GLI ALBERI BINARI DI RICERCA. Cosimo Laneve

GLI ALBERI BINARI DI RICERCA. Cosimo Laneve GLI ALBERI BINARI DI RICERCA Cosimo Laneve argomenti 1. alberi binari di ricerca 2. la ricerca di elementi e la complessità computazionale 3. operazione di cancellazione di elementi 4. esempi/esercizi

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

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE SOMMARIO Coda (queue): Specifica: interfaccia. Implementazione: Strutture indicizzate (array): Array di dimensione variabile. Array circolari. Strutture collegate (nodi). Prestazioni. Strutture Software

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi e Strutture Dati Università di Camerino Corso di Laurea in Informatica (12 CFU) I periodo didattico Emanuela Merelli email:emanuela.merelli@unicam.it Argomenti della lezione Elementi di un linguaggio

Dettagli

CORSO DI PROGRAMMAZIONE

CORSO DI PROGRAMMAZIONE ISTITUTO TECNICO INDUSTRIALE G. M. ANGIOY SASSARI CORSO DI PROGRAMMAZIONE COLLEZIONI DI DATI DISPENSA 11.01 11-01_Liste_[15] Questa dispensa è rilasciata sotto la licenza Creative Common CC BY-NC-SA. Chiunque

Dettagli

SOMMARIO IL PROBLEMA DELLA RICERCA. Algoritmi di ricerca: Algoritmi di ordinamento: RICERCA LINEARE

SOMMARIO IL PROBLEMA DELLA RICERCA. Algoritmi di ricerca: Algoritmi di ordinamento: RICERCA LINEARE SOMMARIO IL PROBLEMA DELLA RICERCA Algoritmi di ricerca: Ricerca lineare; Ricerca binaria (su elenchi già ordinati). Dato un array e un oggetto, stabilire se l oggetto è contenuto in un elemento dell array,

Dettagli

Heap scenario. Ho un insieme dinamico di oggetti, ciascuno identificato con una priorità. (la priorità è semplicemente un numero);

Heap scenario. Ho un insieme dinamico di oggetti, ciascuno identificato con una priorità. (la priorità è semplicemente un numero); Heap Heap scenario Ho un insieme dinamico di oggetti, ciascuno identificato con una priorità. (la priorità è semplicemente un numero); Voglio poter: inserire: nuovi elementi, ciascuno con una data priorità

Dettagli

Java: Definire Classi e Creare Oggetti

Java: Definire Classi e Creare Oggetti Dipartimento di Informatica, Università degli Studi di Verona Corso di Programmazione per Bioformatica lezione del 21 marzo 2014 Introduzione Programmare con gli Oggetti Un programma Java è costituito

Dettagli

Linguaggio C: PUNTATORI

Linguaggio C: PUNTATORI Linguaggio C: PUNTATORI I puntatori sono una delle più importanti caratteristiche del linguaggio C. Permettono di lavorare a basso livello, mantenendo flessibilità e praticità. Il C utilizza molto i puntatori

Dettagli

Strutture dati e algoritmi. Sommario

Strutture dati e algoritmi. Sommario Sommario Strutture dati e algoritmi: Ricerca (lineare e binaria) Ordinamento (per selezione) Strutture dati e algoritmi Come esempi concreti di applicazioni in C++ si useranno le strutture dati e gli algoritmi.

Dettagli

Dizionari Liste invertite e Trie

Dizionari Liste invertite e Trie Dizionari Liste invertite e Trie Lucidi tratti da Crescenzi Gambosi Grossi, Strutture di dati e algoritmi Progettazione, analisi e visualizzazione Addison-Wesley, 2006 Dizionari Universo U delle chiavi

Dettagli