Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Email Docente: A.A. 2009-2010 Salvatore Cuomo Strutture dati di tipo astratto 19 Strutture dati,

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Puntatori Linguaggio C.
C++ Di Marco Cozzani.
Tipi di dato astratti Lista, Pila, Coda, Albero.
Estendere i linguaggi: i tipi di dato astratti
Strutture dati lineari
STRUTTURE DATI AVANZATE Abstract Data Types Presentazione realizzata da: Mario Capurso – Altamura Michele Doronzo Aldo Lamacchia.
Le Strutture Dati M. Capurso con materiale di: G.Piccolo, A.Arcieri, Lamacchia F. Piccolo, B. Monterisi (Abstract Data Types)
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Strutture dati dinamiche.
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Strutture dati dinamiche.
Introduzione al linguaggio C Dr. Francesco Fabozzi Corso di Informatica.
Fondamenti di Informatica
UD 3: “Le Liste” UD 4: “Pile e Code” UD 5: “Alberi e grafi”
Strutture dati elementari
Algoritmi in C++ (1) da completare
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
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
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Liste.
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
STRUTTURE DATI e LABORATORIO II ESERCITAZIONE N°13 Heap massimo.
Tail recursion: esempio
Alberi binari Definizione della struttura dati: struct tree { };
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
CALCOLATORI ELETTRONICI Gestione delle subroutine.
Argomenti della lezione
Esercizi su pile Scrivere una funzione che restituisca una nuova pila che contiene i valori di una pila in ingresso in ordine inverso. La pila originale.
Type int_stack = struct { int top; int P[100]; } int_stack creapila() { int_stack s = new int_stack; s.top = 0; return s; } int_stack push(int_stack s,
Type int_stack = struct { int top; int P[100]; } int_stack creapila() { int_stack s = new int_stack; s.top = 0; return s; } int_stack push(int_stack s,
memoria gestita staticamente:
1 Strutture Dinamiche Corso di Informatica A Vito Perrone.
Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Esercizio 10.* Un cassiere vuole dare un resto di n centesimi di euro usando il minimo numero di monete. a) Descrivere un algoritmo goloso per fare ciò.
15 maggio 2002 Avvisi: Ultima lezione: mercoledì 29 maggio II Esonero: mercoledì 5 giugno, ora da stabilire.
Corso di informatica Athena – Periti Informatici
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
C. Gaibisso Programmazione di Calcolatori Lezione XXII La struttura di dati lista di variabili strutturate Programmazione di Calcolatori: le liste di.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA FINALE DEL 21 MAGGIO 2007 NOME: COGNOME: ________________________________________________________________________________.
Alberi binari Definizione della struttura dati: struct tree { };
Complessità di un algoritmo
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
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.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
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.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
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.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
1 Analisi ammortizzata Si considera il tempo richiesto per eseguire, nel caso pessimo, una intera sequenza di operazioni. Se le operazioni costose sono.
1 Strutture dati. 2 Astrazione Non vogliamo sapere l’organizzazione fisica dei dati  indirizzi e celle di memoria Ci interessa solo la loro organizzazione.
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.
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.
Esercizi.
LIP: 4 Maggio 2007 Interfacce. Cos’e’ una Interfaccia una interfaccia e’ un particolare tipo di classe contiene solo la specifica non ha implementazione.
Corso di Algoritmi e Strutture Dati con Laboratorio Tipi di dato pila e coda.
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 Esercizi sui dati strutturati 13 Tipi di dati strutturati.
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo Esercizi su stringhe e file 15 Stringhe e file.
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo La ricorsione 15 Approccio ricorsivo, esercizi sulla.
13. Strutture dati dinamiche Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
1 MODULO STRUTTURE DATI FONDAMENTALI: Strutture dinamiche classe 4° INDUSTRIALE INFORMATICA Focus on.
Transcript della presentazione:

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

Introduzione Definizione un ADT (Abstract Data Type) è un modello (formale) che generalizza ed estende i tipi di dato primitivi e le operazioni definite su di essi; Un ADT (es. contatore) è connotato da: lo stato dell’ADT (es. conteggio); i metodi che definiscono le operazioni ammesse sul dato astratto (modifica e/o accesso allo stato) (es. crea, elimina, azzera, incrementa, decrementa). consente pertanto di estendere l’insieme dei tipi di dato predefiniti del linguaggio.

Esempio 1 La pila Una pila (detta anche stack) è un ADT in cui l’accesso ai dati è realizzato con strategia LIFO (Last In First Out): l’operazione di estrazione restituisce l’elemento più recentemente inserito. I metodi sono: init, crea e inizializza un’istanza vuota dell’ADT; push, inserisce un elemento; pop, estrae l’elemento più recentemente inserito; empty, restituisce vero se la pila è vuota, viceversa falso; destroy, elimina l’istanza dell’ADT.

Esempio 1 cont Figura: Rappresentazione grafica di una pila

Esempio 2 La coda una coda è un ADT in cui l’accesso ai dati è realizzato con strategia FIFO (First In First Out): l’operazione di estrazione restituisce l’elemento presente da più tempo. I metodi sono: init, crea e inizializza un’istanza vuota dell’ADT; enqueue, inserisce un elemento; dequeue, estrae l’elemento presente da più tempo; empty, restituisce vero se la coda è vuota, viceversa falso; destroy, elimina l’istanza dell’ADT.

È possibile realizzare uno stack utilizzando una lista concatenata. Si può definire un nuovo tipo di dato elem come: struct elem{ datad; struct elem*next; }; typedef struct elem elem; È possibile definire lo stack mediante una dichiarazione del tipo: struct stack { intcnt; elem *top; }; typedef struct stack stack ; Dichiarazione di uno stack

Le funzioni da implementare sono: voidinitialize(stack *stk); utilizzata per inizializzare lo stack. void push(data d, stack *stk); utilizzata per inserire all’interno dello stack. void pop(data *d, stack *stk); utilizzata per estrarre dallo stack. booleanempty(const stack *stk); Per verificare quando lo stack è vuoto. Dichiarazione di uno stack

In particolare la funzione push deve prevedere i seguenti passi fondamentali: Dichiarazione un puntatore p di tipo elem Allocazione memoria per un elemento puntato da p Puntare al dato di input p -> d = dato di input Aggiornare il puntatore p ->next = stk -> top Aggiornare il puntatore alla testa dello stack stk -> top = p Aggiornare il numero di elementi presenti nello stack stk -> cnt++ La funzione push cnt top data NULL data

In particolare la funzione push deve prevedere i seguenti passi fondamentali: Dichiarazione un puntatore p di tipo elem Allocazione memoria per un elemento puntato da p Estrarre il dato dalla testa ed aggiornare opportunamente i puntatori: d = stk -> top -> d p = stk -> top stk->top=stk->top->next Aggiornare il numero di elementi presenti nello stack stk -> cnt-- Liberare la memoria a cui punta p La funzione pop cnt top data NULL data

Header file In questa parte di codice scritto in Linguaggio C si descrive come puo’ essere sviluppato un header file dal nome stack.h per la gestione di uno stack. Mostra codice Linguaggio C – stack.h

Problema Sviluppare in linguaggio C un programma per una gestione di una Pila ( Stack ) basata su array, che implementi si seguenti i principali metodi: Aggiungi un elemento ( Push ) Preleva un elemento ( Pop ) Mostra l'elemento in cima alla Pila ( top ) Mostra il numero di elementi nella Pila ( size ) Verifica se la Pila e' vuota ( isEmpty ) Verifica se la Pila e' piena ( isFull ) Esercizi sulla Pila

Osservazione La Pila e' un insieme ordinato di elementi. L' ordine degli elementi nella pila e' determinato dalle operazioni di inserimento e prelievo. L'inserimento ed il prelievo avvengono ad una estremita' dell'insieme detta cima della pila. Esempi di applicazione della struttura Pila si trovano: * nella gestione dell'indirizzo della prossima istruzione nelle chiamate ( eventualmente nidificate ) a sottoprogrammi * nella verifica dell'accoppiamento delle parentesi aperte e chiuse in una espressione. Esercizi sulla Pila

La pila In questa parte di codice scritto in Linguaggio C si descrive un programma di tipo main che richiama diversi moduli per la gestione di una pila Mostra main parte 1 Mostra main parte 2 Esercitazione

La pila: funzioni principali Descriviamo alcuni dettagli di tipo realizzativo. s puntatore alla struttura definita TipoStack costituita da: 1. array puntatore all'array di elementi 2. maxElem variabile che contiene il numero degli elementi dell'array puntato da array 3. itop variabile che contiene l'indice corrente della pila. Inoltre: s->array indirizzo dell'array di elementi ovvero nome dell'array di elementi; s->itop indice corrente della pila s->array[s->itop] valore dell'elemento dell'array s->array di indice s->itop Mostra funzione TipoStack() Esercitazione

La pila: funzioni principali La funzione void push(TipoStack *s, tipoElemento data), inserisce un elemento nella pila. La funzione tipoElemento pop(TipoStack *s) estrae un elemento dalla pila La funzione tipoElemento top(TipoStack *s), ritorna il primo elemento della pila. Mostra funzione push() Mostra funzione pop() Mostra funzione top() Esercitazione

La pila: funzioni principali La funzione int size(TipoStack *s), ritorna la lunghezza della pila La funzione void destroy(TipoStack *s), distrugge la la memoria allocata per la pila La funzione void deleteElement(TipoStack *s, tipoElemento data), elimina un elemento della pila medinante la definizione delle operazioni ammesse per una pila: inserimento e prelievo dei dati solo dalla cima (top) della struttura Mostra funzione size() Mostra funzione destroy() Mostra funzione deleteElement() Esercitazione

La pila: funzioni principali La funzione void display(TipoStack *s), visualizza gli elementi della pila. La funzione int isEmpty(TipoStack *s) segnala se la pila è vuota. La funzione int isFull(TipoStack *s) segnala se la pila è piena. Mostra funzione display() Mostra funzione isEmpty(), isFull() Esercitazione

Materiali di studio Libri consigliati (a) Donald Knuth. The Art of Computer Programming, Volume 1: Fundamental Algorithms, Third Edition.Addison- Wesley, ISBN Section 2.2.1: Stacks, Queues, and Deques, pp Sitografia essenziale [1] Definizione del National Institute of Standards and Technology (NIST) ( visitato ottobre 2009 ) [2] Definzione di Lista Concatenata ( visitato ottobre 2009 )