Esercizi Strutture dati di tipo astratto

Documenti analoghi
La Struttura Dati Pila

Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati

Laboratorio di Programmazione

Fondamenti di Informatica II

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

Pile: implementazioni. Pile. Pile: liste /1. Pile: liste /2. Università Roma La Sapienza Corsi di Laurea Informatica/Tecnologie Informatiche

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

La struttura dati CODA

Strutture Dinamiche. Fondamenti di Informatica

Esercitazione 11. Liste semplici

Liste con sentinella. intlist *createlist(void){ intlist *q = malloc(sizeof(intlist)); if(!q) { exit(-1); } q->next = q->prev = q; return q; }

Il linguaggio C funzioni e puntatori

Laboratorio di Informatica

Algoritmi e Strutture Dati

PILE E CODE. Pile (stack):

Il linguaggio C. Puntatori e dintorni

Programmazione I - Laboratorio

Esercizi su strutture dati

Funzioni, Stack e Visibilità delle Variabili in C

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

in più stringhe,... ADT un tipo è caratterizzato dalle operazioni consentite su di esso: un numero è qualcosa che si può moltiplicare, sommare,...

Esercitazione: Implementazione in linguaggio C dell ADT. Stack con l utilizzo. di linked list

Tipi astratti pila e coda

dott. Sabrina Senatore

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

5. Quinta esercitazione autoguidata: liste semplici

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

Strutture dati dinamiche in C (II)

La programmazione nel linguaggio C

Inserimento in una lista ordinata

Argomenti della lezione. Introduzione agli Algoritmi e alle Strutture Dati. Lista Lineare. Lista Lineare come Tipo di Dato Astratto

Esercizio 1: funzione con valore di ritorno di tipo puntatore

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

Linguaggio C: PUNTATORI

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

Liste a puntatori: un esercizio passo passo

Il linguaggio C Strutture

Tipi di dato e Strutture dati elementari

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

Organigramma Gerarchia. (Tree) Nessuna persona può avere più di un superiore Ogni persona può essere superiore di altre

Strutture dati. Le liste

L'Allocazione Dinamica della Memoria nel linguaggio C

Array. Maurizio Palesi Salvatore Serrano. In C si possono definire tipi strutturati Vi sono due costruttori fondamentali

Linguaggio C. Esercizio 1

1. Realizzare una funzione: int trovaritardatari(file *fprestiti, FILE *frate, Prestito *dest, int dim)

Astrazione Dati. Nicola Fanizzi. Linguaggi di Programmazione [010194] 10 mag, Dipartimento di Informatica Università degli Studi di Bari

ADT STACK (PILA) ADT STACK (PILA)

Rappresentazione collegata mediante puntatori di una lista

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

La struttura dati PILA

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

Algoritmi e strutture dati

Introduzione ai puntatori

Hash Table. Hash Table

Contenitori: Pile e Code

Struttura dati astratta Coda

Argomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili

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

Per semplicità eliminiamo le ripetizioni nell'albero.

Assembly (3): le procedure

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

Gestione dinamica della memoria

Esempio di prova scritta di Fondamenti di Informatica

I PUNTATORI E LE STRUTTURE DATI DINAMICHE. Cosimo Laneve/Ivan Lanese

Lezione 11 programmazione in Java. Anteprima. Gestione della memoria

Una breve introduzione all implementazione in C di algoritmi su grafo

Abstact Data Type. Abstact Data Type. Pubblico e privato. Struttura di un ADT

Fondamenti di Informatica AA 2016/2017

Implementazione dell albero binario in linguaggio C++

Informatica 3. LEZIONE 12: Liste. Modulo 1: ADT lista e implementazione basata su array Modulo 2: Lista concatenata

La Struttura Dati Lista

Alberi binari e alberi binari di ricerca

Allocazione dinamica della memoria

Strutture dati e loro organizzazione. Gabriella Trucco

a.a Codice corso: 21012, La definizione del tipo di dato astratto lista è intrinsecamente ricorsiva, infatti una lista può essere:

Implementazione ADT: Alberi

Scope delle variabili e passaggio parametri. Danilo Ardagna Politecnico di Milano

Lezione 12 Tabelle Hash

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

Argomenti della lezione. Tipo di dato astratto. Array. Tipo di dato Lista. Liste Implementazione di liste in Java Stack Code

I puntatori e l allocazione dinamica di memoria. Esercizi risolti

Fondamenti di Informatica T-1 Modulo 2

L Allocazione Dinamica della Memoria

STRUTTURE DATI: OLTRE GLI ARRAY LISTE

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

Tipi di dato personalizzati Array di struct. Tipi di dato utente. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.

Fondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 5A di Mercoledì 13 Luglio 2011 tempo a disposizione 2h

Strutture Dati Dinamiche

Puntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata

Introduzione al C. Unità Gestione Dinamica della Memoria

ADT LISTA: altre operazioni non primitive ADT LISTA COSTRUZIONE ADT LISTA COSTRUZIONE ADT LISTA (2)

Esercitazione 12. Esercizi di Ricapitolazione

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.

Esercitazione 6. Alberi binari di ricerca

Il tipo di dato astratto Pila

Introduzione al linguaggio C Puntatori

Il tipo astratto coda con priorità: specifiche sintattiche e semantiche. Realizzazioni.

Esempio di Prova Scritta

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.

Rappresentazione di liste mediante puntatori in linguaggio C

Transcript:

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 Email Docente: salvatore.cuomo@unina.it A.A. 2009-2010

Le liste Definizione La Lista Lineare é una struttura estremamente flessibile, il numero dei nodi componenti può essere modificato dinamicamente. La Lista si può identificare con un elenco, di cui è possibile variare sia la lunghezza che l ordine. Nella lista lineare l ordinamento logico dei nodi non necessariamente corrisponde a quello fisico. Ogni nodo della struttura è una coppia: ( informazione, puntatore ) Il primo elemento contiene l informazione Il secondo contiene l indirizzo del nodo successivo secondo l ordinamento logico

Le liste Fisicamente una lista è una successione di nodi che occupano in memoria posizioni generiche. P 0 L accesso ad un nodo può avvenire solo per scansione dell intera lista, poiché non può essere noto a priori il suo indirizzo. Si osservi ad esempio che in un array, invece, ogni componente è accessibile direttamente perché identificato univocamente all indice L accesso al primo nodo della lista avviene attraverso un puntatore p0. L ultimo nodo ha un simbolo speciale, nel campo indirizzo, di solito lo zero, per indicare la fine della lista. 0

Definizione di una lista in C Una lista può essere definita attraverso una struttura di tipo nodo come segue; typedef struct nodo *nod_punt; struct nodo{ real data; nod_punt next; } Per creare un nodo bisogna allocare memoria attaverso l utilizzo di funzioni create allo scopo. nod_punt crea_nodo(real valore){ nod_punt new_punt; new_punt=(nod_punt)malloc(sizeof(struct nodo)); If (new_punt!= NULL){ new_punt->data = valore; new_punt->next = NULL; } return new_punt; }

Rimozione di un nodo da una lista in C In figura viene mostrata una procedura per la rimozione di un nodo da una lista. Per eliminare un nodo un nodo bisogna allocare memoria attraverso l utilizzo di funzioni create allo scopo. nod_punt elimina_nodo(nod_punt pnt); { If (pnt!= NULL) { pnt = pnt->next; } return pnt; } Si osservi che: Nel caso della cancellazione si può utilizzare una variabile found per indicare se l elemento cercato è presente nel nodo puntato da curr. Nel caso dell inserimento, il nodo da inserire andrà tra i nodi puntati da prev e da curr. Procedure remove(elenco, prev, curr); var: elenco = lista ordinata di nomi var: p0,curr,prev = puntatori a elenco begin if (prev 0) else punt(prev ) := punt(curr ); else p0 := punt(curr ); endif end remove;

Esempio 1 A C D P0 B E 0 In figura viene mostrata l eliminazione del nodo contenente B LIST2 in una lista di alfanumerici. Viene modificato solo il valore del puntatore del primo nodo. Si osservi che Il nodo contenente B non viene eliminato fisicamente.

Esempio 2 P0 1.2 9.0 0.1 0 LIST aggiornata P0 1.2 9.0 0.1 0 0.02 In figura viene mostrata l inserimento di un nodo al secondo posto di LIST: lista lineare di reali. Sono modificati i valori dei puntatori del primo nodoche adesso punterà al nodo inserito e di quest ultimo che conterrà il vecchio indirizzo del primo nodo.

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()

La Pila versione dinamica Esempio Nel seguito si implementa un programma in Linguaggio C per la gestione delle pile utilizzando elementi di una LISTA dinamica. La definizione di un elemento della PILA avviene mediante una dichiarazione del tipo: struct ele{ int data; struct ele *next; }; Mentre lo Stack si definisce come: typedef struct{ int count; elem *top; }stack; Mostra Definzioni (parte I del programma)

La Pila versione dinamica cont Esempio Il programma principale ha inizio con l inizializzazione Della strutturaa stack mediante le direttive: vstack.top=null; vstack.count=0; Mostra Main (parte II del programma) Mostra Main (parte III del programma)

La Pila versione dinamica cont Esempio Il programma principale è strutturato in diversi moduli che di seguito verranno analizzati. La funzione void show(stack vstack), mostra gli elementi nello stack. La funzione void push(stack * vstack), inserisce gli elementi nello stack La funzione void pop(stack * vstack), elimina un elemento dallo Stack. Mostra void show() Mostra void push() Mostra void pop()

La Pila versione dinamica cont Esempio Il programma principale è strutturato in diversi moduli che di seguito verranno analizzati. La funzione void delete(stack * vstack), cancella elementi dallo stack liberando memoria. La funzione void top(stack vstack), restituisce la cima dello Stack. La funzione void isempty(stack vstack), verifica se lo Stack è vuoto. Mostra void delete() Mostra void top() Mostra void isempty()

La Pila versione dinamica cont Esempio Il programma principale è strutturato in diversi moduli che di seguito verranno analizzati. La funzione void isfull(stack vstack), verifica se lo Stack è pieno. La funzione void size(stack vstack), restituisce la dimensione dello Stack. Mostra void isfull() Mostra void size()

Materiali di studio Materiale di studio (1) Nick Parlante, LinkedListBasics [.pdf] (2) Nick Parlante, LinkedListProblems [.pdf] Libri consigliati (a) Donald Knuth. The Art of Computer Programming, Volume 1: Fundamental Algorithms, Third Edition.Addison- Wesley, 1997. ISBN 0-201-89683-4. Section 2.2.1: Stacks, Queues, and Deques, pp. 238--243. Sitografia essenziale [1] Definizione del National Institute of Standards and Technology (NIST) ( visitato ottobre 2009 ) http://www.itl.nist.gov/div897/sqg/dads/html/abstractdatatype.html [2] Donald Knuth ( visitato ottobre 2009 ) http://www-cs-faculty.stanford.edu/~knuth/taocp.html