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

Documenti analoghi
Introduzione agli Abstract Data Type (ADT)

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

Pile (stacks) e code (queues)

Ingegneria del Software

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

Programmazione Orientata agli Oggetti in Linguaggio Java

I tipi di dato astratti

Il tipo di dato astratto Pila

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

dall argomento argomento della malloc()

Algoritmi e Strutture Dati. Tipo di dato astratto e Strutture dati elementari

Problem solving elementare su dati vettoriali

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

GESTIONE INFORMATICA DEI DATI AZIENDALI

Appello di Informatica B

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Lezione 9: Strutture e allocazione dinamica della memoria

Fondamenti di Informatica 2

Bontà dei dati in ingresso

Fondamenti di Informatica e Laboratorio T-AB Ingengeria dell Automazione a.a. 2008/2009. Lab 02 Tipi semplici in C

Abstract Data Type (ADT)

Informatica 3. Informatica 3. LEZIONE 12: Liste. Lezione 12 - Modulo 1. Posizione corrente. Introduzione

PROGRAMMAZIONE AVANZATA JAVA E C. Massimiliano Redolfi. Lezione 7: Code, Stack, Liste PAJC. Ricerca. prof. Massimiliano Redolfi PAJC

Concetti chiave. Struct. Variabili strutturate: il tipo struct Elementi di una struttura typedef e struct Array di strutture

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

costruttori e distruttori

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio

Compito di Fondamenti di Informatica

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

ARRAY E STRINGHE. G. Frosini Slide 1

3. Terza esercitazione autoguidata: progetto gestione voli

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

PROGRAMMI LINGUAGGIO C

Informatica 3. Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati. Lezione 10 - Modulo 1. Importanza delle strutture dati

I puntatori e l allocazione dinamica di memoria

Lezione 6 Le pile. Informatica. 28 Aprile 2016

DESCRIZIONE CREAZIONE APP Si suddivide in 4 fasi di lavoro: 1. PIANIFICAZIONE; 2. PROGETTAZIONE; 3. SVILUPPO; 4. DISTRIBUZIONE.

3. La sintassi di Java

Nomi e Ambiente. Nicola Fanizzi. Linguaggi di Programmazione [010194] 20 apr, Dipartimento di Informatica Università degli Studi di Bari

strutturare dati e codice

Programmazione I - Laboratorio

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

7) Strutture dati fondamentali

Algoritmi di ordinamento

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Gestione di files Motivazioni

Agenti risolutori di problemi. Risolvere i problemi mediante ricerca Maria Simi a.a 2014/2015

Introduzione ai tipi di dato astratti: applicazione alle liste

CREARE UNA LIBRERIA IN C

Laboratorio di Fondamenti di Informatica anno accademico Esercizi proposti il

Laboratorio di Algoritmi e Strutture Dati II Semestre 2005/2006. Ordinamenti: mergesort e quicksort

Vettori Algoritmi elementari di ordinamento

3) Il seguente numerale A1F0 in base 16 a quale numero in base 10 corrisponde?

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main

INFORMATICA 1 L. Mezzalira

Le sue caratteristiche:

Sistemi Operativi. Gianluca Della Vedova. Sistemi Operativi. Gianluca Della Vedova. Sistemi Operativi. Gianluca Della Vedova.

Puntatori Passaggio di parametri per indirizzo

Funzioni. Il modello console. Interfaccia in modalità console

TUTORATO di LINGUAGGI I

Prova di recupero di Informatica B Corsi di Laurea in Ingegneria Meccanica prof. Francesco Amigoni 20 febbraio 2004

Le operazioni di allocazione e deallocazione sono a carico del sistema.

IL CONCETTO DI FILE. È illecito operare oltre la fine del file.

La gestione dei processi in Minix

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

(1) - - (4) R4 = R7 * R7 (4) (2) (3) 5 - (4) rinviata perché in WAW con (3) 6 (3) e (4) ritirabili ma attendono il completamento di (2) (2) (3) (4)

L algoritmo di ricerca binaria. Daniele Varin LS Ing. Informatica Corso di Informatica teorica Docente: prof. Paolo Sipala

ESERCIZIO 1 (Definizione funzioni passaggio parametri per copia)

Lezione 4 Le code. Informatica. 26 Aprile Le pizze devono essere preparate e consegnate seguendo l ordine di arrivo degli ordini

Sistemi Operativi. Lezione 7 Comunicazione tra processi

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 5 di Giovedì 15 Luglio 2010 tempo a disposizione 2h30'

Files in C++ Fondamenti di Informatica. R. Basili. a.a

Esercizio 1. Esercizio 2

RICORSIONE - schema ricorsivo (o induttivo) si esegue l'azione S, su un insieme di dati D, mediante eventuale esecuzione di

Corso di Sicurezza Informatica

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

10 - Programmare con gli Array

2. Spiegare brevemente qual è la funzione del compilatore e la sua importanza per il programmatore.

Laboratorio di Algoritmi e Strutture Dati

Esame di Informatica Generale 9 CFU 21 Giugno 2011 Professori: Carulli, Fiorino, Mazzei

Anno Accademico 1999/2000

Gestione dinamica di una pila

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2011

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Il programma OCTAVE per l insegnamento dell algebra lineare nella Scuola Secondaria p. 1

Informatica Medica C++ Informatica Medica I semestre Docenti: Fabio Solari e Manuela Chessa. Sviluppo di un applicazione eseguibile

Introduzione. Laboratorio di Calcolo Corso di Laurea in Fisica. Università degli Studi di Roma La Sapienza

Una funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente.

Lezione 8. La macchina universale

Fondamenti dell Informatica Ricorsione e Iterazione Simona Ronchi Della Rocca (dal testo: Kfoury, Moll and Arbib, cap.5.2)

Funzioni e procedure

int f(char *s, short n, float x) {... } /* definizione di f */ int f(char *, short, float); /* prototipo di f */

Laboratorio di Programmazione Lezione 1. Cristian Del Fabbro

Variabili e tipi di dato

Alfabeto ed elementi lessicali del linguaggio C

Corso di Sicurezza Informatica. Sicurezza del software. Ing. Gianluca Caminiti

Creare una funzione float square(float x). La funzione deve restituire il quadrato del parametro x.

Problem solving avanzato

Corso di Laurea in Matematica

Transcript:

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 ADT Pile Code. A.A. 2002/2003 APA - Pile e code 3 ADT Le regole che sovrintendono allo sviluppo del software in ambiente professionale fanno ampiamente uso del concetto di Abstract Data Type (ADT). Gli ADT sono anche utilissimi nella fase di definizione e documentazione degli algoritmi, per dare agli stessi la massima generalità. Un ADT è un modello matematico sul quale è definito un insieme di operazioni. A.A. 2002/2003 APA - Pile e code 4 Politecnico di Torino Pagina 2 di 23

Esempio È possibile definire un ADT corrispondente ad un generico insieme di elementi, su cui sono definite le operazioni di unione, intersezione e differenza: union (X, Y) intersect (X, Y) diff (X, Y) Le tre operazioni definite dall ADT in questo caso hanno come operandi e producono come risultato degli elementi dell ADT. A.A. 2002/2003 APA - Pile e code 5 ADT come estensione dei tipi primitivi Il concetto di ADT combina e generalizza i concetti di tipi primitivi e di procedure. I tipi primitivi sono quelli supportati da un linguaggio (ad esempio int, float, char per il C). Attraverso gli ADT è possibile estendere l insieme dei tipi di dato supportati. A.A. 2002/2003 APA - Pile e code 6 Politecnico di Torino Pagina 3 di 23

ADT come estensione delle procedure Le procedure permettono di estendere la nozione di operatore: Gli operatori sono predefiniti, e permettono di eseguire le operazioni elementari sui tipi primitivi. Le procedure permettono di definire nuove operazioni sui tipi primitivi, o di definire operazioni su nuovi tipi. Gli ADT permettono di associare ad un nuovo tipo un insieme di operazioni. A.A. 2002/2003 APA - Pile e code 7 Implementazione di un ADT Un ADT è definito in maniera indipendente da: linguaggio di programmazione adottato scelte implementative, quali ad esempio quelle relative alla struttura dati. A.A. 2002/2003 APA - Pile e code 8 Politecnico di Torino Pagina 4 di 23

Esempio Nel caso dell ADT corrispondente agli insiemi di numeri interi sono possibili varie implementazioni in C, che differiscono innanzitutto per la struttura dati utilizzata: Vettore Lista. A.A. 2002/2003 APA - Pile e code 9 Implementazione in C Quando si implementa in C un ADT, conviene: Definire in un file separato le procedure corrispondenti alle operazioni definite dall ADT Definire un tipo di dato corrispondente all ADT Lavorare sull ADT esclusivamente utilizzando le procedure fornite. A.A. 2002/2003 APA - Pile e code 10 Politecnico di Torino Pagina 5 di 23

Esempio Definizione del tipo: typedef SET_ELEM int; /* nascosta */ Esempi di procedure: SET_ELEM *union (SET_ELEM *, SET_ELEM *); SET_ELEM *inters (SET_ELEM *, SET_ELEM *); SET_ELEM *diff (SET_ELEM *, SET_ELEM *); SET_ELEM *make_null( void); int size (SET_ELEM *); void dump (SET_ELEM *); A.A. 2002/2003 APA - Pile e code 11 Sommario ADT Pile Code. A.A. 2002/2003 APA - Pile e code 12 Politecnico di Torino Pagina 6 di 23

Pile Una pila è un ADT su cui sono definite le seguenti operazioni: Push: inserisce un nuovo elemento nell ADT Pop: estrae dall ADT un elemento; viene ritornato l elemento inserito da meno tempo Empty: ritorna vero se l ADT contiene 0 elementi Init: crea un ADT vuoto. A.A. 2002/2003 APA - Pile e code 13 Pila = stack = struttura LIFO Una pila (anche detta stack) è una struttura che implementa una strategia LIFO (Last In First Out). A.A. 2002/2003 APA - Pile e code 14 Politecnico di Torino Pagina 7 di 23

Esempio Si supponga di aver eseguito le seguenti operazioni: M = init() Push (M, K1) Push (M, K2) Push (M, K3) Se si esegue l operazione Pop (M), questa ritorna K3. Eseguendo nuovamente Pop (M), questa ritorna K2. Chiamando Empty (M) a questo punto, essa ritorna il valore FALSE. A.A. 2002/2003 APA - Pile e code 15 Implementazione tramite vettore Richiede: La definizione di un vettore di N elementi L introduzione di una variabile top che contiene l indice dell ultimo elemento inserito. La memoria per il vettore è allocata interamente, indipendentemente dal numero di elementi in esso memorizzati. Tutte le operazioni sulla pila hanno complessità O(1). A.A. 2002/2003 APA - Pile e code 16 Politecnico di Torino Pagina 8 di 23

Pseudo-codice A.A. 2002/2003 APA - Pile e code 17 C #define MAX 100 int buff[max]; int index; void push( int val); int pop( void); int empty( void); void push( int val) { buff[index++] = val; return; } int pop( void) { return( buff[--index]); } int empty( void) { if( index == 0) return (1); else return (0); } A.A. 2002/2003 APA - Pile e code 18 Politecnico di Torino Pagina 9 di 23

Sommario ADT Pile Code. A.A. 2002/2003 APA - Pile e code 19 Code Una coda è un ADT su cui sono definite le seguenti operazioni: Insert (o enqueue): inserisce un nuovo elemento nell ADT Extract (o dequeue): estrae dall ADT un elemento; viene ritornato l elemento inserito da più tempo Empty: ritorna vero se l ADT contiene 0 elementi Init: crea un ADT vuoto. A.A. 2002/2003 APA - Pile e code 20 Politecnico di Torino Pagina 10 di 23

Coda = struttura FIFO Una coda è una struttura che implementa una strategia FIFO (First In First Out). A.A. 2002/2003 APA - Pile e code 21 Esempio Si supponga di aver eseguito le seguenti operazioni: M = init() Enqueue (M, K1) Enqueue (M, K2) Enqueue(M, K3) Se si esegue l operazione Dequeue (M), questa ritorna K1. Eseguendo nuovamente Dequeue (M), questa ritorna K2. Chiamando Empty (M) a questo punto, essa ritorna il valore FALSE. A.A. 2002/2003 APA - Pile e code 22 Politecnico di Torino Pagina 11 di 23

Implementazione tramite vettore Richiede: La definizione di un vettore di N+1 elementi L introduzione di due variabili e : Head contiene l indice dell elemento inserito da più tempo Tail contiene l indice dell elemento nel vettore in cui inserire un nuovo elemento. Un meccanismo che trasformi il vettore in un buffer circolare. La memoria per il vettore è allocata interamente, indipendentemente dal numero di elementi in esso memorizzati. Tutte le operazioni sulla pila hanno complessità O(1). A.A. 2002/2003 APA - Pile e code 23 Buffer circolare Head e vengono incrementate ad ogni chiamata di dequeue ed enqueue, rispettivamente. Quando o giungono al valore n+1, devono venir forzate al valore 1. All inizio = 1, = 1. La condizione di coda piena (overflow) corrisponde a = + 1 (o =1, =n). La condizione di coda vuota (underflow) corrisponde a =. A.A. 2002/2003 APA - Pile e code 24 Politecnico di Torino Pagina 12 di 23

Esempio (n=5) A.A. 2002/2003 APA - Pile e code 25 Esempio (1) Init Coda vuota A.A. 2002/2003 APA - Pile e code 26 Politecnico di Torino Pagina 13 di 23

Esempio (2) Enqueue( Q, A) A A.A. 2002/2003 APA - Pile e code 27 Esempio (3) Enqueue( Q, B) A B A.A. 2002/2003 APA - Pile e code 28 Politecnico di Torino Pagina 14 di 23

Esempio (4) Enqueue( Q, C) A B C A.A. 2002/2003 APA - Pile e code 29 Esempio (5) Enqueue( Q, D) A B C D A.A. 2002/2003 APA - Pile e code 30 Politecnico di Torino Pagina 15 di 23

Esempio (6) Dequeue( Q) B C D A.A. 2002/2003 APA - Pile e code 31 Esempio (7) Enqueue( Q, E) B C D E A.A. 2002/2003 APA - Pile e code 32 Politecnico di Torino Pagina 16 di 23

Esempio (8) Enqueue( Q, F) Coda piena B C D E F A.A. 2002/2003 APA - Pile e code 33 Esempio (9) Dequeue( Q) C D E F A.A. 2002/2003 APA - Pile e code 34 Politecnico di Torino Pagina 17 di 23

Esempio (10) Enqueue( Q, G) Coda piena G C D E F A.A. 2002/2003 APA - Pile e code 35 Esempio (11) Dequeue( Q) G D E F A.A. 2002/2003 APA - Pile e code 36 Politecnico di Torino Pagina 18 di 23

Esempio (12) Dequeue( Q) G E F A.A. 2002/2003 APA - Pile e code 37 Esempio (13) Enqueue( Q, H) G H E F A.A. 2002/2003 APA - Pile e code 38 Politecnico di Torino Pagina 19 di 23

Esempio (14) Dequeue( Q) G H F A.A. 2002/2003 APA - Pile e code 39 Esempio (15) Dequeue( Q) G H A.A. 2002/2003 APA - Pile e code 40 Politecnico di Torino Pagina 20 di 23

Esempio (16) Dequeue( Q) H A.A. 2002/2003 APA - Pile e code 41 Esempio (17) Dequeue( Q) Coda vuota A.A. 2002/2003 APA - Pile e code 42 Politecnico di Torino Pagina 21 di 23

Pseudo-codice A.A. 2002/2003 APA - Pile e code 43 C #define DIM 10 int buffer[dim+1]; int =0, =0; int insert( int elem); int extract( void); int empty( void); int insert( int elem) { if( (+1) < (==DIM && ==0) ) return( -1); } buffer[++] = elem; if( == (DIM+1)) = 0; return( 0); A.A. 2002/2003 APA - Pile e code 44 Politecnico di Torino Pagina 22 di 23

C (2) int extract( void) {intret; } if( == ) return( -1); ret = buffer[out++]; if( == (DIM+1)) = 0; return( ret); int empty( void) { if( == ) return( 1); else return( 0); } A.A. 2002/2003 APA - Pile e code 45 Politecnico di Torino Pagina 23 di 23