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

Slides:



Advertisements
Presentazioni simili
Linee guida per la programmazione
Advertisements

Tipi di dato astratti Lista, Pila, Coda, Albero.
Estendere i linguaggi: i tipi di dato astratti
Procedure In assembler.
Strutture dati lineari
Universita di Camerino
Java: programmazione concorrente con condivisione di memoria
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
1 Semantica Operazionale di un frammento di Java: lo stato.
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
MultiSet, Liste Ordinate
Le gerarchie di tipi.
LIP: 19 Aprile Contenuto Soluzione Compitino Tipo di dato MultiSet, estensione con sottoclasse.
Liste Ordinate 3 Maggio Ultima Lezione Abbiamo visto i tipi di dato astratti IntList e StringList Realizzano liste di interi e di stringhe Realizzati.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Fondamenti di Informatica
UD 3: “Le Liste” UD 4: “Pile e Code” UD 5: “Alberi e grafi”
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
La valutazione delle espressioni
JAVASCRIPT DIFFERENZA TRA JAVASCRIPT E JAVA TAG LO SCRIPT OGGETTI LE CLASSI FUNZIONE GESTORE DI EVENTI ELEMENTI DEL LINGUAGGI è un vero e proprio linguaggio.
Introduzione al linguaggio C++ 5 lezioni
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Array Anno Accademico 2009/2010.
tipo astratto, implementazione, algoritmi
Gestione delle subroutine
Algoritmi e Strutture Dati
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Sistemi Operativi GESTIONE DEI PROCESSI.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Corso di informatica Athena – Periti Informatici
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti dispense prof. G. Levi.
1 Lucidi delle esercitazioni di Sistemi di Elaborazione in Rete Università degli Studi della Calabria Corso di Laurea in Ingegneria Gestionale A.A. 2003/2004.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA FINALE DEL 21 MAGGIO 2007 NOME: COGNOME: ________________________________________________________________________________.
Nota (rif. alla lezione precedente): Vector vs ArrayList Le classi generiche Vector e ArrayList sono sostanzialmente equivalenti, ma: I metodi.
Schiavone & Scalas 2 In informatica, il termine stack o pila viene usato in diversi contesti per riferirsi a strutture dati le cui modalità d'accesso.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Pile e Code.
Introduzione a Javascript
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
AlgoLab - Pile e Code Pile e code Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.
1 Tipi di Dato §descrittori, tipi, controllo e inferenza dei tipi §specifica (semantica) e implementazione di tipi di dato l implementazioni “sequenziali”
Algoritmi e Strutture Dati Strutture Dati Elementari.
TW Asp - Active Server Pages Nicola Gessa. TW Nicola Gessa Introduzione n Con l’acronimo ASP (Active Server Pages) si identifica NON un linguaggio di.
1 Input/Output. 2 Livelli del sottosistema di I/O Hardware Gestori delle interruzioni Driver dei dispositivi Software di sistema indipendente dal dispositivo.
Ripasso su Java. Introduzione Per risolvere problemi complessi, i linguaggi di programmazione forniscono costrutti per realizzare nuove funzioni che trasformino.
1 Input/Output. 2 Livelli del sottosistema di I/O Hardware Gestori delle interruzioni Driver dei dispositivi Software di sistema indipendente dal dispositivo.
Liste Concatenate 11 Aprile E’ una delle strutture dati fondamentali in tutti i linguaggi di programmazione di alto livello Una Lista Concatenata.
1 Laboratorio di Introduzione alla Programmazione §II MODULO §3 crediti §Esame e voto unico (su 6 crediti totali)
Ese 3 (del 3 Aprile 2003). Testo Progettare la specifica e l’implementazione del tipo di dato astratto modificabile Stack, supponendo che gli elementi.
Ese 3 (del 3 Aprile 2003). Testo Progettare la specifica e l’implementazione del tipo di dato astratto modificabile Stack, supponendo che gli elementi.
1 Laboratorio di Introduzione alla Programmazione §II MODULO §3 crediti §Esame e voto unico (su 6 crediti totali)
1 Strutture dati. 2 Astrazione Non vogliamo sapere l’organizzazione fisica dei dati  indirizzi e celle di memoria Ci interessa solo la loro organizzazione.
Lezione X Laboratorio di Programmazione. Struttura di un programma Definizione classe e specifica (parziale) classe.hclasse.cpp main.cpp Specifica metodi.
LIP: 2 Maggio 2008 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
Ese 1 e 3 (del 6 Aprile 2005). Primo Ese Si identifichino gli errori che il compilatore segnalerebbe per il seguente programma Tipi Legami tra dichiarazioni.
LIP: 11 Maggio 2007 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
Esercitazione 14 Marzo Esercizio dell’altra volta Definire un tipo di dato Abbonato i cui oggetti descrivono le informazioni relative ad un abbonato.
LIP: 4 Maggio 2007 Interfacce. Cos’e’ una Interfaccia una interfaccia e’ un particolare tipo di classe contiene solo la specifica non ha implementazione.
LIP: 15 Marzo 2005 Vettori di interi. Esercizio proposto Definire una classe VectorInt i cui oggetti sono vettori omogenei di interi ordinati in modo.
LIP: 18 Aprile 2008 Interfacce. Rappresentazione Lista val next vuota Lista vuota: any true Lista non vuota: any true 154 false 24 false.
Ex.1 - Astrazioni su Dati Si abbia il tipo di dato stack di interi, IntStack, specificato sotto: public class IntStack { \\ OVERVIEW: uno Stack è una collezione.
Cloud informatica V anno. Introduzione a PHP Lo scripting PHP PHP è un linguaggio di scripting lato server. Le caratteristiche di un linguaggio di scripting.
Corso di Algoritmi e Strutture Dati con Laboratorio Java Collections Framework (II parte)
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo Strutture dati di tipo astratto 19 Strutture dati,
Introduzione alle Classi e agli Oggetti in Java 1.
1 MODULO STRUTTURE DATI FONDAMENTALI: Strutture dinamiche classe 4° INDUSTRIALE INFORMATICA Focus on.
Transcript della presentazione:

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 o top, isEmpty ◦ eventualmente isFull  Disciplina di accesso: l'accesso agli elementi avviene secondo l'ordine inverso di inserimento (politica LIFO - last in first out)  Esempi pratici sono le pile di piatti o le pile di giornali, che sottendono l'idea che quando si pone un piatto/giornale nella pila lo si metta in cima, e che quando lo si preleva, si prelevi analogamente quello in cima A.A. 2015/ Draft2

tipo Stack : dati: una sequenza S di n elementi. operazioni: isEmpty() → result restituisce true se S è vuota, e false altrimenti push (elem e) aggiunge e come ultimo elemento di S peek() → elem // altrimenti riferita come top() restituisce l’ultimo elemento di S (senza eliminarlo da S) pop() → elem elimina da S l’ultimo elemento e lo restituisce A.A. 2015/ Draft3

 Il termine stack viene usato in informatica in modo più specifico in diversi contesti:  lo stack è un elemento dell'architettura dei moderni processori, e fornisce il supporto fondamentale per l'implementazione del concetto di subroutine (vedi call stack, ricorsione)  le macchine virtuali di quasi tutti i linguaggi di programmazione ad alto livello usano uno stack dei record di attivazione per implementare il concetto di subroutine (generalmente, ma non necessariamente, basandosi sullo stack del processore)  la memoria degli automi a pila dell’informatica teorica è uno stack A.A. 2015/ Draft4

Esempi  Verificare il bilanciamento delle parentesi in espressioni e programmi abc{defg{ijk}{l{mn}}op}qr (true) abc{def}}{ghij{kl}m(false) abc{def}{ghij{kl}m(false)  Riconoscere stringhe palindrome abcdcba  Valutare espressioni postfisse * A.A. 2015/ Draft5

 La classe stack nel package java.util dovrebbe essere evitata poiché è una sottoclasse di Vector e perciò consente l’esecuzione di operazioni non-stack. A.A. 2015/ Draft6

 Le classi generiche Vector e ArrayList sono sostanzialmente equivalenti, ma:  I metodi di Vector sono sincronizzati, mentre quelli di ArrayList non lo sono. Quindi se il programma è concorrente (cioè usa il multi- threading di Java) è opportuno usare Vector, altrimenti converrebbe ArrayList perché più efficiente.  Vector fornisce, con opportuni metodi e costruttori, un controllo maggiore sulla capacità, cioè la dimensione dell'array soggiacente.  Per motivi storici, Vector fornisce più metodi con nomi diversi per manipolare gli elementi di un vettore. A.A. 2015/ Draft7

 I costruttori di Vector permettono di specificare la capacità iniziale del vettore ( initialCapacity ) e il valore da usare per aumentare la capacità ( capacityIncrement ) quando necessario. ◦ Se ( capacityIncrement == 0), il nuovo array avrà capacità doppia rispetto all'attuale.  I costruttori di ArrayList permettono di specificare solo la capacità iniziale del vettore. A.A. 2015/ Draft8

 Vector /* crea un vettore vuoto, con i parametri specificati */ Vector (int initialCapacity, int capacityIncrement) /* default: capacityIncrement==0 */ Vector (int initialCapacity) /* default: initialCapacity==10 e capacityIncrement==0 */ Vector ()  ArrayList /* crea un vettore con la capacità iniziale indicata */ ArrayList (int initialCapacity) /* crea un vettore vuoto; */ ArrayList () A.A. 2015/ Draft9

 La seguente interfaccia definisce le operazioni di interesse di una pila Rif. Stack.java public interface Stack { void push(T item); T pop(); T peek(); int size(); boolean isEmpty(); } A.A. 2015/ Draft10

 Implementazione semplice basata su LinkedList: lo stack “delega” banalmente alla lista! Rif. SimpleStack.java  Implementazione basata su array (tecnica del raddoppiamento-dimezzamento) Rif. ArrayStack.java  Implementazione basata su liste collegate semplici Rif. LinkedStack.java A.A. 2015/ Draft11

 Javadoc è uno strumento che permette di documentare i sorgenti di un programma all’interno dei sorgenti stessi.  Anziché scrivere la documentazione di un programma in un file separato, il programmatore inserisce nel codice sorgente dei commenti in un formato particolare.  Tali commenti vengono estratti dal programma javadoc che li converte in un formato più semplice per la consultazione (HTML o PDF, ad esempio) A.A. 2015/ Draft12

 In generale, si dovrebbe commentare tutto ciò che utile per far comprendere il proprio codice ai colleghi e, per gli aspetti più generali, agli utenti.  Un commento Javadoc è pensato solo per descrivere le funzionalità o i principi di un package/classe/interfaccia/metodo.  Un commento Javadoc non è pensato per “spiegare” pezzi di codice. Questi commenti, anche se sono in formato Javadoc, non sono mai estratti dal comando javadoc.  La documentazione minima dovrebbe comprendere la descrizione di ciascun package, classe, interfaccia, metodo pubblico, attributo pubblico. A.A. 2015/ Draft13

A.A. 2015/ Draft14

Un commento Javadoc:  è sempre posto subito prima della dichiarazione della classe, interfaccia, metodo, attributo.  deve descrivere in modo sintetico lo scopo dell’oggetto che si sta documentando.  può contenere tag HTML per aiutare la formattazione, anche se si sconsiglia di adottare tag di presentazione come,, ecc in favore di tag di struttura come,, ecc  può contenere tag speciali (prossime slide) che aiutano a organizzare meglio il commento.  Un commento Javadoc non deve essere una lezione. Deve aiutare a comprendere e non far perdere tempo. A.A. 2015/ Draft15

A.A. 2015/ Draft16

Il commento precedente è composto da:  Una prima parte composta da un paragrafo che riassume lo scopo del metodo.  Eventuali paragrafi successivi sono suddivisi da.  Una riga vuota che separa la parte descrittiva dalla parte dei tag Javadoc. Deve esserci solo 1 riga vuota in tutto.  Una seconda parte in cui sono inseriti tag Javadoc (ad spiegati nelle prossime slide) che identificano le componenti dell’oggetto che si sta commentando. A.A. 2015/ Draft17

 Formato generale di un comment dove nome specifica quale tipo di informazione si sta dando e il commento è l’informazione.  William Shakespeare  Ogni tag deve essere su una riga nuova.  I commenti possono estendersi su più righe, ma non ci devono essere righe vuote! A.A. 2015/ Draft18

A.A. 2015/ Draft19

A.A. 2015/ Draft20

A.A. 2015/ Draft21

 Il comando per estrarre la documentazione è javadoc presente in tutte le Java Development Kit (JDK)  Il comando javadoc può produrre la documentazione in diversi formati, ciascuno dei quali può richiedere dei file di istruzioni speciali (i cosidetti doclet)  Il formato standard è HTML e non richiede nessun file ausiliario. A.A. 2015/ Draft22

A.A. 2015/ Draft23

 Se si vuole eseguire javadoc soltanto su files.java selezionati, è necessario indicare i files sorgenti separati da spazi oppure usare un asterisco (*) come wildcard.  Far attenzione ad includere i path completi  Esempio (windows): C:\> javadoc -d [path to javadoc destination directory] [source filenames] C:\> javadoc -d.\doc.\src\*.java A.A. 2015/ Draft24

 Una coda è una collezione di elementi ( tipo di dato astratto) che supporta le seguenti operazioni tipiche: ◦ Enqueue (add), dequeue (remove), peek, isEmpty, eventualmente isFull  Disciplina di accesso: l'accesso agli elementi avviene secondo l'ordine di inserimento (politica FIFO - first in first out)  Esempi pratici: una coda che in un paese civile si fa per ottenere un servizio (es: una coda di persone alla cassa di un supermercato), una coda di ordini da evadere, una coda di file da stampare,... A.A. 2015/ Draft25

Questo tipo di struttura dati:  è molto utilizzata in Informatica, ad esempio nella gestione delle operazioni da eseguire da parte di un sistema operativo  è fondamentale nelle telecomunicazioni, in particolare nelle reti a commutazione di pacchetto, dove descrive la gestione dei pacchetti in attesa di essere trasmessi su un collegamento. A.A. 2015/ Draft26

tipo Queue : dati: una sequenza S di n elementi. operazioni: isEmpty() → result restituisce true se S è vuota, e false altrimenti add (elem e) aggiunge e come ultimo elemento di S peek() → elem // altrimenti riferita come first() restituisce il primo elemento di S (senza eliminarlo da S) remove() → elem elimina da S il primo elemento e lo restituisce A.A. 2015/ Draft27

 La seguente interfaccia definisce le operazioni di interesse di una coda Rif. Queue.java public interface Queue { public boolean isEmpty(); public boolean add (T e); public T peek(); public T remove(); public int size(); } A.A. 2015/ Draft28

 Implementazione semplice basata su LinkedList: la coda “delega” banalmente alla lista! Rif. SimpleQueue.java  Implementazione basata su array a dimensione fissa (buffer circolare) Rif. BoundedQueue.java  Implementazione basata su liste collegate semplici Rif. LinkedQueue.java A.A. 2015/ Draft29

public interface Queue extends Collection { E element(); boolean offer(E e); E peek(); E poll(); E remove(); }  Le classi LinkedList e PriorityQueue implementano l’interfaccia Queue A.A. 2015/ Draft30

A.A. 2015/ Draft31 Ogni metodo esiste in due forme: 1. Una solleva un’eccezione se l’operazione fallisce 2. L’altra restituisce un valore speciale se l’operazione fallisce