Le strutture dati in Java: liste, code 1

Documenti analoghi
Informatica 3. Informatica 3. LEZIONE 9: Introduzione ai linguaggi funzionali. Lezione 9 - Modulo 1. Paradigma funzionale. Linguaggi imperativi

tipi di dato astratti

Esercizi per il corso di Algoritmi

Indici con gli alberi. Indici su memorie secondarie. Organizzazione logica di un disco

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati

Modelli per le macchine digitali

Algoritmi e Strutture di Dati

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

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

Piano di Lavoro e di Attività Didattica. Classe 3 Sezione. Docente/i. Lorenzo Porcelli. Stefano Punta. Anno scolastico 2013/ 2014.

Lezione 1. Introduzione alle proprietà strutturali. F. Previdi - Controlli Automatici - Lez. 1 1

PIL NOMINALE, PIL REALE E DEFLATORE

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

Esercizi Strutture dati di tipo astratto

SOMMARIO STACK. STACK: specifica STACK

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

Vediamo come si sviluppa la soluzione esplicita del problema. ( t)

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

Memoria cache. Corso di Laurea in Ingegneria dell Informazione Università degli Studi di Firenze AA 2008/2009

Laboratorio di Programmazione

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Appunti di Analisi Numerica

Piano di Lavoro e di Attività Didattica. Classe 4 Sezione. Docente/i. Lorenzo Porcelli. Stefano Punta. Anno scolastico 2013/ 2014.

Stabilità dell equilibrio (parte II)

COSTRUZIONE DELLE TAVOLE SELEZIONATE

Laboratorio di Programmazione

Introduzione. Liste. Strutture ricorsive (2) Strutture ricorsive (1) DD p KP p

Introduzione ai Modelli di Durata: Stime Non-Parametriche. a.a. 2009/ Quarto Periodo Prof. Filippo DOMMA

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

Programmazione orientata agli oggetti. Ivan Lanese e Cosimo Laneve

LINKEDLIST: implementazione iteratore. LINKEDLIST: iteratore INNERITERATOR INNERITERATOR

Aniello Murano Altri problemi NP- Completi

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

Laboratorio di Programmazione

La programmazione nel linguaggio C

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

Equazioni Differenziali (5)

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

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

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

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

Linked Lists. Liste linkate (1) Progettazione: struct. Liste linkate (2)

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

Teoria dei Segnali. La Convoluzione (esercizi) parte prima

Laboratorio di Algoritmi e Strutture Dati. Code con Priorità

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

Lezione n.12. Gerarchia di memoria

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

Diodi a giunzione p/n.

Algoritmi di Ricerca. Esempi di programmi Java

Programmazione orientata agli oggetti. Ivan Lanese

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Strutture dati dinamiche

Ingressi Uscite I S I S T E M A U

Università degli Studi di Firenze Corso di Laurea triennale in Fisica e Astrofisica

Inserimento di un elemento in coda. quale va collegato quello nuovo. ultimo. *lista 8 3. aux. ultimo. *lista 8 3. aux

Heap e code di priorità

ADT: Abstract Data Type. Quasi ADT. ADT per collezioni di dati (code generalizzate) 04 I tipi di dati astratti (I parte)

Fondamenti di Informatica


Controlli automatici

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

State Space Model. Corso di: Analisi delle Serie Storiche. Corso di Laurea Triennale in: Scienze Statistiche A.A. 2017/18

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

Algoritmi di Ricerca. Esempi di programmi Java

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

Lezione 4 Material Requirement Planning

Algoritmi di Ricerca. Esempi di programmi Java. Prof. Angela Bonifati

tipi di dato astratti

Tipi astratti pila e coda

CORSO DI PROGRAMMAZIONE

Strutture dati e loro organizzazione. Gabriella Trucco

Lezione 15 programmazione in Java. Nicola Drago Dipartimento di Informatica Università di Verona

del segnale elettrico trifase

Geometria analitica del piano pag 7 Adolfo Scimone. Rette in posizioni particolari rispetto al sistema di riferimento

La struttura a termine dei tassi d interesse. Benedetto Matarazzo

Tipi di dato e Strutture dati elementari

Fondamenti di Informatica T-1

SESSIONE SUPPLETIVA PROBLEMA 2

5 Soluzioni numeriche di equazioni differenziali

La risposta di un sistema lineare viscoso a un grado di libertà sollecitato da carichi impulsivi. Prof. Adolfo Santini - Dinamica delle Strutture 1

Circuiti dinamici. Circuiti del primo ordine. (versione del ) Circuiti del primo ordine

Calcolo numerico e ODE. Integrazione Numerica. Calcolo numerico Integrazione numerica Derivazione numerica. Equazioni differenziali.

RICERCA OPERATIVA GRUPPO A prova scritta del 21 giugno 2010

Algoritmi e Strutture Dati

Fondamenti di informatica T-1 (A K) Esercitazione 2 Basi del linguaggio Java

P8 CIRCUITI SEQUENZIALI ELEMENTARI

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

SISTEMI LINEARI TEMPO INVARIANTI. Fondamenti Segnali e Trasmissione

2. Grafi e proprietà topologiche

Corso di Componenti e Impianti Termotecnici TERMOSTRISCE

Sommario. I Uso degli oggetti 39

Minimi Quadrati Ricorsivi

Teoria dei Segnali. La Convoluzione (esercizi) parte seconda

MODELLISTICA E SIMULAZIONE cred.: 5 7,5 Recupero 1 prova: 25 luglio 2005

Laboratorio di Algoritmi

Transcript:

AA 03/04 Le sruure dai I programmi lavorano su informazioni Corso di laurea in Informaica Le informazioni sono spesso organizzae in avole Che non sono semplicemene una massa di dai numerici Ma è che coinvolgono relazioni sruurali ra i dai In genere c è mola più informazione sruurale ra i dai di quella che sia necessario rappresenare 1 2 Proprieà delle sruure dai Le sruure dai hanno proprieà saiche e dinamiche che possono essere molo diverse Le sruure dai devono essere rappresenae e implemenae nei linguaggi di programmazione Spazio di memoria per l archiviazione La rappresenazione influenza le funzionalià Creazione, manipolazione, ricerca, accesso 3 Rappresenazione della sruura dai Decidere caso per caso quana sruura rappresenare Occorre considerare non solo la sruura dai ma anche la classe d operazioni da effeuare sui dai La rappresenazione dipende ano dalle proprieà inrinseche delle sruura dai quano dalle funzionalià che si desiderano Forma e funzione 4 Tabelle d informazioni Nella forma più semplice una abella è una lisa lineare di elemeni La sua relazione sruurale più imporane consene di rispondere a domande come Chi è il della lisa? Chi è l ulimo? Chi precede e chi segue un dao elemeno? Quani elemeni ci sono nella lisa? In alri casi una abella può essere a 2 o più dimensioni Può avere una sruura gerarchica ad albero Può essere una sruura più complessa con ramificazioni a reicolo Lise lineari Un insieme di n 0 di nodi le cui proprieà sruurali coinvolgono essenzialmene solo le posizioni lineari (a 1-dimensione) relaive dei nodi Se n 0, x[1] è il nodo allora k con 1<k< n, il k-esimo nodo x[k] è preceduo dal nodo x[k-1] ed è seguio dal nodo x[k+1]; inolre x[n] è l ulimo nodo 5 6 lise, code 1

AA 03/04 Operazioni sulle lise Le operazioni che vogliamo eseguire su una lisa, includono (non esclusivamene): Accedere al k-esimo nodo Inserire un nuovo nodo in una posizione opporuna Eliminare il k-esimo nodo Unire 2 o più lise Fare una copia di una lisa Deerminare il numero di nodi in una lisa Ordinare i nodi di una lisa secondo un crierio Cercare le occorrenze di una nodo con un paricolare valore Paricolari lise Sono frequeni lise lineari in cui inserimeni, cancellazioni e accesso ai dai avvengono quasi sempre solo in prima o in ulima posizione Sack o pila. Inserimeni e cancellazioni (e spesso anche gli accessi) avvengono solo a un esremo della lisa Coda. Inserimeni avvengono a un esremo della lisa e le cancellazioni all alro Deque (coda a doppi esremi). Inserimeni e cancellazioni possono avvenire ai 2 esremi della lisa 7 8 Esempio Nomenclaura Spesso vengono usai alri nomi per indicare sack e lise in genere LIFO. Las In Firs Ou, per sack FIFO. Firs In Firs Ou, per le code In paricolare per gli sack si usano i ermini Top o cima per indicare il elemeno dello sack Un binario moro ad una sazione di esa èrappresenabile con uno sack. Il reno ad uscire è l ulimo che è enrao 9 Boom o fine per indicare l ulimo elemeno Pop per eliminare l elemeno al op Push per inserire un nuovo dao 10 Rappresenazione di una lisa Lise saiche vs dinamiche A seconda della classe di operazioni più frequeni è uile una paricolare rappresenazione Non esise una singola rappresenazione che rende le operazioni ue ugualmene efficieni L accesso random alla k-esimo nodo è diffcile se conemporaneamene inseriamo e cancelliamo nodi Disinguiamo rappresenazioni di lise in funzione delle principali operazioni da eseguire 11 Le lise saiche sono quelle che adoano una rappresenazione saica Viene allocaa un area di memoria di dimensione prefissaa quindi hanno una dimensione fissa Le lise dinamiche adoano una rappresenazione dinamica L area di memoria per archiviare i nodi viene riservaa dinamicamene in esecuzione quando serve Possono avere una dimensione non prefissaa 12 lise, code 2

AA 03/04 Implemenazione di pile public void push(objec o) Aggiunge l oggeo passao come paramero sullo sack. Se lo sack è pieno solleva una OuOfBoundsSackExcepion public Objec pop() Ripora il riferimeno dell oggeo che sa al op dello sack. Se lo sack è vuoo solleva una EmpySackExcepion public boolean empy() Ripora rue se lo sack è vuoo, false alrimeni Sack() Il cosruore che cosruisce uno sack vuoo 13 L eccezione per sack vuoo public class EmpySackExcepion exends RunTimeExcepion { Un eccezione definia come esensione di RunTimeExcepion quindi non conrollaa Viene sollevaa dal meodo pop() 14 L eccezione per sack pieno Implemenazione saica public class OuOfBoundsSackExcepion exends RunTimeExcepion { Un eccezione definia come esensione di RunTimeExcepion quindi non conrollaa Può essere sollevaa dal meodo push() Per un implemenazione saica di sack, possiamo adoare un array di oggei Lo sack viene rappresenao come un array di riferimeni a Objec L array sarà predimensionao in modo conveniene Occorre enere presene la dimensione massima dell array Porà sempre essere possibile andare in overflow 15 16 Implemenazione saica Implemenazione dinamica Ogni posizione dell array rappresena un nodo dello sack La posizione 0 viene usaa per conenere l elemeno più in basso dello sack. Un indice indica la cima dello sack Sack.java e l eccezioni EmpySackExcepion.java OuOfBoundsSackExcepion.java Si usa una lisa lineare concaenaa Olre all informazioni del nodo è necessario archiviare l indirizzo del nodo successivo Ogni nodo coniene un campo per conenere il riferimeno all oggeo con il valore che ci ineressa archiviare 17 18 lise, code 3

AA 03/04 Rappresenazione del nodo La classe che rappresena il nodo dello sack Class NodoSack { Objec dao; NodoSack pros; La definizione è ricorsiva, cioè il nodo è definio in ermini di sé sesso Rappresenazione dello sack Per definire lo sack è sufficiene dare il riferimeno alla cima dello sack La cima sarà null nel caso di sack vuoo public class Sack { privae NodoSack cima; alri meodi 19 Cosruore e meodi Il meodo push() public Sack() { cima = null; public boolean empy() { reurn cima == null; Il meodo ha come paramero il riferimeno all oggeo che deve inserire alla cima dello sack Dovrà creare un nuovo nodo Copiare il riferimeno passao come paramero nel campo dao del nuovo nodo Inserire il nuovo nodo alla cima della lisa 21 22 Il meodo pop() Classi inerne Il meodo non ha parameri. Deve eliminare il nodo alla cima dello sack Dovrà memorizzare il riferimeno conenuo nella cima Eliminare la cima Riporare all ambiene il riferimeno memorizzao La classe NodoSack viene usaa solo dalla classe Sack e quindi viene dichiaraa saic e privae È una risorsa privaa della classe Sack che avrà accesso perciò ai suoi campi Se la lisa è vuoa deve sollevare un eccezione Sack.java EmpySackExcepion 23 24 lise, code 4

AA 03/04 Le code Negli sack l elemeno che si preleva è l ulimo che si è inserio (LIFO) Nelle code gli elemeni si inseriscono ad un esremo e prelevano all alro (FIFO) Quindi si preleva nell ordine in cui si è inserio Ad esempio: una lisa d aesa Implemenazione dinamica Si può usare una lisa concaenaa Uile avere anche un riferimeno all ulimo nodo della lisa 25 26 Implemenazione in Java Operazioni sulla coda Rappresenazione del singolo nodo class NodoCoda { Objec dao; NodoCoda pros; Rappresenazione della coda public class Coda { privae NodoCoda, ulimo; privae saic NodoCoda { alri meodi 27 Inserire nodi Avviene alla fine della lisa Eliminare nodi Avviene all inizio della lisa 28 Cosruore e meodi Inserire nodi Il cosruore cosruisce una coda vuoa public Coda() { = ulimo = null; Funzione per inserire un nodo Cosruire il nuovo nodo da inserire Collegare il nuovo nodo dopo l ulimo Aggiornare il riferimeno all ulimo nodo public void aggiugi (Objec o) { Creare il nuovo nodo con il dao riferio da o NodoCoda = new NodoCoda();.dao = o;.pros = null; ulimo 29 30 lise, code 5

AA 03/04 inserire nodi Collegare dopo l ulimo nodo ulimo.pros = ; inserire nodi Aggiornare il riferimeno all ulimo nodo ulimo = ; ulimo ulimo 31 32 inserire nodi Eliminare nodi Ma se la coda era vuoa allora if ( == null) = ulimo = ; ulimo ulimo Conrollare se la coda è vuoa e nel caso sollevare l eccezione CodaVuoaExcepion if ( == null) hrow new CodaVuoaExcepion(); Eliminare il riferimeno al nodo e riporare all ambiene il riferimeno conenuo nel campo dao Objec risulao =.dao; =.pros; 33 34 eliminare nodi Se la lisa rimane vuoa dopo il prelievo, occorre ricordarsi di aggiornare ulimo if ( == null) ulimo = null; Coda.java con l eccezioni CodaVuoaExcepion.java e il driver ProvaCoda.java 35 lise, code 6