Fondamenti di Informatica
|
|
- Albina Lolli
- 4 anni fa
- Visualizzazioni
Transcript
1 Strutture dati complesse Esempi di strutture dati complesse analizzate in questa lezione: Fondamenti di Informatica 21. Strutture di dati complesse in C++ Array di puntatori Pila (Stack) Coda (queue) Liste semplici (semplicemente linkate) Liste doppie (doppiamente linkate) Corso di Laurea in Ingegneria Informatica e dell Automazione A.A Semestre Prof. Giovanni Pascoschi Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 2 Array di puntatori Esempio di array di puntatori L istruzione : char* strin[4]; 0xAB00 m a r i o \0 tipo* array[dim]; dichiara un array di puntatori, dove: Il nome dell'array è array L'array ha dim elementi Gli elementi array[0], array[1],...sono puntatori a dati di tipo tipo La memoria per i singoli dati deve essere allocata esplicitamente Gli array di puntatori permettono di ridurre la quantità di memoria allocata al minimo indispensaile strin[0] strin[1] strin[2] strin[3] 0xAB00 0xB392 0xAC84 0xB0F0 0xB392 a \0 0xAC84 0xB0F0 p i n o \0 a n g e l a \0 L occupazione in memoria è al minimo indispensabile, al contrario della dichiarazione statica di 4 array di dimensione fissa. Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 3 Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 4
2 Esempio di array di puntatori Esempio di array di puntatori Esempio: Array di 4 stringhe di lunghezza variabile tra 1 e 20 caratteri Se allocato staticamente Ogni elemento deve essere di 21 byte per poter contenere la stringa di dimensione massima ( 20 caratteri più il terminatore) In totale sono necessari 4 x 21 = 84 bytes Se allocato dinamicamente Ogni elemento è un puntatore e occupa 4 byte È allocata la memoria necessaria a contenere esattamente le singole stringhe Se tutte le stringhe sono lunghe 8 caratteri ogni stringa occupa 9 byte Array statico Dimensione totale: 4 x 21 = 84 Dimensione dati: 4 x 9 = 36 Efficienza: 36 / 84 = 42% Array dinamico Dimensione totale: 4 x x 9 = 52 Dimensione dati: 4 x 9 = 36 Efficienza: 36 / 52 = 69% Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 5 Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 6 Pila (Stack) con array Pila (Stack) con array la Pila (Stack) è un insieme di dati che permette l inserimento di nuovi elementi e l estrazione degli elementi introdotti da un unica estremità il funzionamento della pila viene denominato LIFO (Last Input First Output) meccanismo utilizzato per gestire le chiamate alle funzioni (insieme degli indirizzi di rientro) oppure nel registro di stack (linguaggio assembly) operazione di inserimento di un dato push operazione di estrazione di un dato pop L implementazione di una pila puo essere fatta tramite un array (dimensione fissa) push A[0] A[1] A[2] pop testa = 0... A[MAX-1] testa = MAX Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 7 Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 8
3 Esempio Pila Esempio Pila #include <iostream> using namespace std; const int MAX = 20; int Pila[MAX]; int testa; void clearpila( ); void pop( ); void push( ); void readpila( ); void menu( ); int main( ) { int scelta; clearpila( ); menu( ); cout<< Seleziona una voce ; cin>>scelta; while(scelta <1 scelta >5); switch(scelta) { case 1: clearpila( ); case 2: pop( ); case 3: push( ); case 4: readpila( ); while(scelta!=5); return 0; Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 9 void pop( ) { if( testa == MAX) cout<< La pila e vuota. Impossibile estrarre un dato << endl; else{ cout << Elemento estratto = << Pila[testa] << endl; testa++; void push( ) { int dato; if (testa == 0) cout<< La pila è piena. Impossibile inserire altri dati << endl; else{ cout << dato da inserire = ; cin>> dato; testa- -; Pila[testa] = dato; Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 10 Esempio Pila Coda (Queue) con array void clearpila( ) { testa = MAX; cout<< Pila vuota << endl; void readpila( ) { for(int i=testa; i< MAX; i++) { cout<< Pila[i] << endl; la Coda (Queue) è un insieme di dati che permette l inserimento di nuovi elementi da una parte e l estrazione degli elementi introdotti dalla parte opposta il funzionamento della coda viene denominato FIFO (First Input First Output) operazione di inserimento di un dato push void menu( ) { cout << endl; cout << 1. Pulisci pila << endl; cout << 2. Estrai un dato << endl; cout << 3. Aggiungi un dato << endl; cout << 4. Leggi pila << endl; cout << 5. Fine << endl; operazione di estrazione di un dato pop Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 11 Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 12
4 Coda (Queue) con array Esempio Coda L implementazione di una coda puo essere fatta tramite un array (dimensione fissa) pop fine = -1 A[0] A[1] A[MAX-1]... push fine = MAX-1 Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 13 #include <iostream> using namespace std; const int MAX = 20; int Coda[MAX]; int fine; void clearcoda( ); void pop( ); void push( ); void readcoda( ); void menu( ); int main( ) { int scelta; clearcoda( ); menu( ); cout<< Seleziona una voce ; cin>>scelta; while(scelta <1 scelta >5); switch(scelta) { case 1: clearcoda( ); case 2: pop( ); case 3: push( ); case 4: readcoda( ); while(scelta!=5); return 0; Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 14 Esempio Coda Esempio Coda void pop( ) { if( fine ==-1) cout<< La coda e vuota. Impossibile estrarre un dato << endl; else{ cout << Elemento estratto = << Coda[0] << endl; for(int i=1; i<= fine; i++) Coda[i-1] = Coda[i]; fine- -; void push( ) { int dato; if (fine == MAX-1) cout<< La coda è piena. Impossibile inserire altri dati << endl; else{ cout << dato da inserire = ; cin>> dato; fine++; Coda[fine] = dato; Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 15 void clearcoda( ) { fine = -1; cout<< Coda vuota << endl; void readcoda( ) { for(int i=0; i<= fine; i++) { cout<< Coda[i] << endl; void menu( ) { cout << endl; cout << 1. Pulisci coda << endl; cout << 2. Estrai un dato << endl; cout << 3. Aggiungi un dato << endl; cout << 4. Leggi coda << endl; cout << 5. Fine << endl; Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 16
5 Liste semplici (semplicemente linkate) Liste semplici Una lista semplice e costituita da nodi Ogni nodo e una struttura che contiene : Dati Un riferimento (puntatore) al nodo successivo Riferimenti esterni Puntatore al primo elemento della lista: Un riferimento speciale indica la fine della lista: Puntatore a Puntatore al nodo stesso Struttura logica di una lista semplice Il terminatore è un puntatore a Il terminatore è un puntatore all'elemento stesso In una lista circolare il terminatore punta al primo elemento della lista Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 17 Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 18 Esempio lista semplice Esempio lista semplice Una lista semplice può essere percorsa solo in avanti, cioè dalla testa verso la coda 0xBA04 0xBA42 0xBB86 0xBA04 struct node { int data; node* next; ; 125 0xBA xBB Per scorrere una lista è necessaria una variabile temporanea per puntare ad un generico elemento Non si può usare il puntatore alla testa altrimenti si perde il riferimento al primo elemento curr puntatore corrente puntatore alla testa della lista curr = ; // curr punta alla testa della lista curr = curr->next; // curr punta al prossimo nodo della lista Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 19 Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 20
6 Esempio lista semplice : inserimento Esempio lista semplice : cancellazione Per inserire un nuovo elemento nella lista bisogna trovare la posizione giusta e poi aggiustare i puntatori. Per cancellare un nuovo elemento nella lista bisogna trovare la posizione giusta e poi aggiustare i puntatori. curr prec curr prec nuovo struct node* nuovo; nuovo = new node; nuovo->data = 1234; nuovo->next = ; struct node* curr; curr = prec->next; prec->next = curr->next; nuovo->next = curr; prec->next = nuovo; Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 21 Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 22 Esempio Lista semplice (in ordine alfabetico) #include <iostream> #include <string> using namespace std; struct Node{ string nome; Node* next; ; Node* ; void StartupList( ); // creazione lista vuota void ResetList( ); // eliminazione lista void InsertList( ); //inserimento nuovo nodo void RemoveList( ); //cancellazione nodo void ShowList(); // visualizza lista bool IsEmptyList(); // lista vuota? void menu( ); int main( ) { int scelta; StartupList( ); menu( ); cout<< Seleziona una voce ; cin>>scelta; while(scelta <1 scelta >5); switch(scelta) { case 1: InsertList( ); case 2: RemoveList( ); case 3: ShowList( ); case 4: ResetList( ); while(scelta!=5); ResetList(); return 0; Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 23 Esempio Lista semplice void StartupList( ) { =; bool IsEmptyList( ) { if (== ) return true; else return false; void ShowList( ) { Node* v; cout<< Elenco dei nominativi <<endl; v = ; while(v!= ) { cout<< v->nome << endl; v = v->next; cout<< Fine elenco nominativi <<endl; void ResetList( ) { Node* curr; while(!= ) { cout<< Nominativo eliminato: << ->nome << endl; curr = ; = -> next; delete curr; cout<< Lista vuota <<endl; void menu( ) { cout << endl; cout << 1. Inserisci nominativo << endl; cout << 2. Rimuovi nominativo << endl; cout << 3. Visualizza lista << endl; cout << 4. Svuota lista << endl; cout << 5. Fine << endl; Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 24
7 Esempio Lista semplice Esempio Lista semplice void InsertList( ) { string Nomeins; Node* nuovo; // puntatore del nuovo nodo Node* curr; // puntatore temporaneo Node* prec; // puntatore al nodo precedente cout<< Nominativo da inserire ; //info nuovo nodo cin>> Nomeins; nuovo = new Node; nuovo-> nome = Nomeins; nuovo->next = ; else { curr = ; //nodo fluttuante temporaneo while(curr!= && nuovo->nome>=curr->nome) { // si scorre la lista fino alla fine prec = curr; // il nodo temporaneo diventa il nodo precedente curr = curr->next; // il puntatore al successivo viene assegnato a temp nuovo->next = curr; // si è trovato il nodo che segue il nodo nuovo prec->next = nuovo; if(isemptylist()==true) = nuovo; // se lista vuota nuovo = nuova testa else { if(->nome >= nuovo->nome) { //nuovo nodo precede testa in ord. alf? curr = ; // la testa diventa il nodo curr = nuovo; // il nuovo nodo diventa la testa ->next = curr; //il puntatore al next di testa è curr return; Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 25 Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 26 Esempio Lista semplice Esempio Lista semplice void RemoveList( ) { string Nomeins; Node* curr; // puntatore temporaneo Node* prec; // puntatore al nodo precedente bool trovato = false; cout<< Nominativo da rimuovere ; cin>> Nomeins; if(isemptylist()==true) cout<< La lista è già vuota <<endl; // lista vuota else { if(->nome == Nomeins) { //nome = nome inserito? trovato = true; // la testa diventa il nodo curr curr = ->next; // il nuovo nodo diventa la testa : si salva next cout<< Nome eliminato: << ->nome <<endl; delete ; = curr; // nuova testa è l elemento successivo else { curr = ->next; //nodo fluttuante temporaneo prec = ; while(!trovato && curr!= ) { // si scorre la lista fino alla fine if(curr->nome == Nomeins) { trovato = true; prec->next = curr->next; // il nodo curr viene bypassato cout<< Nome eliminato : << curr->nome << endl; delete curr; else { prec = curr; // curr diventa il nodo precedente curr = curr->next; // curr->next diventa in nuovo curr if(! trovato) cout<< Nome non trovato nella lista <<endl;; Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 27 Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 28
8 Lista doppiamente linkata Liste doppiamente linkate Una lista doppiamente linkata e costituita da nodi Ogni nodo e una struttura che contiene Dati Un riferimento (puntatore) al nodo successivo Un riferimento (puntatore) al nodo precedente Riferimenti esterni Puntatore al primo elemento della lista: Puntatore al primo elemento della lista in senso opposto: Struttura logica di una lista doppiamente linkata I terminatori sono due puntatori a I terminatori sono due puntatori all elemento stesso Un riferimento speciale indica la fine della lista in maniera analoga alle liste semplici In una lista circolare i terminatori puntano al capo opposto della lista Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 29 Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 30 Esempio lista doppiamenta linkata Esempio lista doppiamenta linkata Struttura logica di una lista doppiamente linkata non circolare e i terminatori puntatori a 0xBA04 0xBA04 0xBAF4 0xBB32 0xBAF xBB xBA xBAF4 0xBB32 Una lista doppia può essere percorsa in due versi: In avanti, cioè dalla testa verso la coda Indietro, cioè dalla coda verso la testa È necessaria una variabile temporanea curr per puntare ad un generico elemento curr = ; curr = curr->next; // per scorrere in avanti la lista struct node { int data; struct node* next; struct node* prev; ; curr = ; curr = curr->prev; // per scorrere all indietro la lista Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 31 Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 32
9 Esempio lista doppia : inserimento Esempio lista doppia : inserimento Per inserire un nuovo elemento nella lista bisogna trovare la posizione giusta e poi aggiustare i puntatori. struct node* nuovo; nuovo = new node; nuovo->data = 1234; nuovo->next = ; nuovo->prev = ; nuovo->next = curr->next; nuovo->prev = curr; curr->next->prev = nuovo; curr->next = nuovo; Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 33 Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 34 Esempio lista doppia : rimozione Esempio lista doppia : rimozione Per rimuovere un nodo da una lista doppiamente linkata bisogna trovare la posizione giusta e poi aggiustare i puntatori. curr old struct node* old; old = curr->next; curr->next=old->next; old->next->prev=old->prev; delete old; curr curr old Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 35 Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 36
10 Riepilogo della lezione Fine della lezione Strutture di dati complesse Array di puntatori Pila Coda Liste linkate semplici Liste doppiamente linkate Domande? Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 37 Fondamenti di Informatica A.A a cura di Pascoschi Giovanni 38
Laboratorio di Informatica
Liste semplici (semplicemente linkate) Una lista semplice e costituita da nodi Laboratorio di Informatica 7. Strutture complesse di dati in C++ Ogni nodo e una struttura che contiene : Dati Un riferimento
DettagliLaboratorio di Informatica
Strutture di dati Laboratorio di Informatica 5. Strutture / Array di oggetti / Pila&Coda in C++ Una struttura è un insieme finito di variabili (dette campi) non necessariamente dello stesso tipo, ognuna
DettagliLaboratorio Informatica Classe 4A Serale Venerdì 18/02/2011. Gruppo. Cognome Riontino Nome Raffaele. Cognome Nome
Laboratorio Informatica Classe 4A Serale Venerdì 18/02/2011 Gruppo Cognome Riontino Nome Raffaele Cognome Nome TRACCIA 2 ARGOMENTO: LISTE TEMPO: 4h 1. Utilizzando Typedef definire un nuovo tipo di dato
DettagliGestione dinamica di una coda
Gestione dinamica di una coda Una coda o queue è una lista lineare a lunghezza variabile in cui l'inserimento di nuovi elementi (push) viene effettuato ad un estremo (fondo o rear) e l'estrazione degli
DettagliFondamenti di Informatica II
Università degli studi di Messina Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica e delle Telecomunicazioni Fondamenti di Informatica II Tipi di dati astratti(adt)- seconda parte Coda Struttura
DettagliEsercitazioni di Fondamenti di Informatica - Lez. 8 27/11/2018
Esercitazioni di Fondamenti di Informatica - Lez. 8 27/11/2018 Esercizi sull allocazione dinamica della memoria in C Il codice di questi esercizi é contenuto nella cartella parte1 1. Implementare una lista
Dettaglistruct costobiglietto { //struttura per prezzo float prezzo; float tasse; float prezzototale; };
/* Programma 12cppEse1.cpp Autore : Riontino Raffaele 4 informatici ITIS Molinari - Milano corso serale 2/11/2010 Testo : Si vuole realizzare un tipo struct, utilizzato per informazioni su biglietti per
DettagliGestione dinamica di una lista
Gestione dinamica di una lista La lista lineare è una struttura astratta di dati a lunghezza variabile in cui l'inserimento di un nuovo elemento e l'estrazione di un elemento può essere effettuata in una
DettagliAllocazione dinamica memoria
Allocazione dinamica memoria Marco Casazza 11/12/2017 1 Esercizio 1 1 /* 2 Creare una lista bidirezionale di interi, ovvero una lista 3 che permette lo scorrimento in entrambe le direzioni ( dal primo
DettagliCorso di Fondamenti di Informatica. Puntatori e Allocazione Dinamica
Corso di Fondamenti di Informatica Puntatori e Allocazione Dinamica I puntatori (Richiamo) Il C++ prevede puntatori a dati di qualsiasi natura, semplici o strutturati e puntatori a funzione. In particolare
DettagliClasse: vettore di interi
Classe: ettore di interi #include using namespace std; int main() { Oggetto VettoreInteri contenente 10 elementi di tipo intero VettoreInteri ett;... return 0; Se olessimo un ettore di 20 elementi?
DettagliListe concatenate. Violetta Lonati
Liste concatenate Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 2 novembre 2017 Violetta Lonati Liste
DettagliInformatica 3. LEZIONE 13: Liste doppie, pile e code. Modulo 1: Free list Modulo 2: Lista doppia Modulo 3: Pila Modulo 4: Coda
Informatica 3 LEZIONE 13: Liste doppie, pile e code Modulo 1: Free list Modulo 2: Lista doppia Modulo 3: Pila Modulo 4: Coda Informatica 3 Lezione 13 - Modulo 1 Free list Free list Le funzioni di sistema
DettagliLa struttura dati CODA
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 La struttura dati CODA Pietro Di Lena - pietro.dilena@unibo.it Introduzione Una coda (o queue) è una struttura dati astratta
DettagliInformatica 3. Informatica 3. LEZIONE 13: Liste doppie, pile e code. Lezione 13 - Modulo 1. Free list (2) Free list. Free list
LEZIONE 13: Liste doppie, pile e code Modulo 1: Free list Modulo 2: Lista doppia Modulo 3: Pila Modulo 4: Coda Lezione 13 - Modulo 1 Free list Politecnico di Milano - Prof. Sara Comai 1 Politecnico di
Dettagli#include <iostream> #include <cstring> #include <fstream> using namespace std; struct elem{ char parola[31]; elem *pun; };
#include #include #include using namespace std; struct elem{ char parola[31]; elem *pun; ; struct Dizionario{ elem *testa; ; void inizializzadizionario(dizionario &D){ D.testa
DettagliOggetti e classi. La classe è un modello (un contenitore) che definisce la forma di un oggetto, specificando:
Classi Oggetti e classi La classe è un modello (un contenitore) che definisce la forma di un oggetto, specificando: Come è fatto (i dati) Quali operazioni si possono fare con- e sull oggetto (le funzioni)
DettagliCorso di Fondamenti di Informatica Prof. Aldo Franco Dragoni Prova scritta del 21/06/2010. Avvertenze. Specifiche
Avvertenze Usare ESCLUSIVAMENTE penne ad inchiostro nero o blu (NO MATITE). Consegnare solo fogli formato A4 scritti da ambo le parti. In testa a ciascun foglio scrivere: cognome, nome, numero progressivo
DettagliPolitecnico di Milano. Strutture dati dinamiche
Politecnico di Milano Strutture dati dinamiche Strutture dati statiche e dinamiche In C le dimensioni di ogni dato sono note prima dell esecuzione Sarebbe utile avere contenitori la cui dimensione varia
DettagliCorso di Fondamenti di Informatica
Corso di Fondamenti di Informatica Il tipo puntatore; l allocazione dinamica della memoria Claudio De Stefano - Corso di Fondamenti di Informatica 1 puntatori una variabile di tipo puntatore al tipo x
DettagliLa Struttura Dati Pila
La Struttura Dati Pila La pila o stack è una particolare struttura dati in cui l'inserimento e la cancellazione sono consentite solo in una specifica posizione, chiamata cima (top) dello stack. La gestione
DettagliTipi strutturati - struct
Fondamenti di Programmazione A Appunti per le lezioni Gianfranco Rossi Tipi strutturati - struct Struttura dati (concreta) struct: sequenza di n elementi (n 0), rispettivamente di tipo t1,,tn (non necessariamente
DettagliLaboratorio di Programmazione
Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 21 Strutture dinamiche Gli array ci permettono di memorizzare un insieme di dati dello stesso tipo Deve essere noto staticamente il
DettagliImplementazione dell albero binario in linguaggio C++
Implementazione dell albero binario in linguaggio C++ Costruire il programma per gestire le operazioni su un albero binario. Ogni nodo dell albero contiene un codice e una descrizione; il programma deve
DettagliLinguaggio C: Strutture e Liste Concatenate Valeria Cardellini
Linguaggio C: Strutture e Liste Concatenate Valeria Cardellini Corso di Calcolatori Elettronici A.A. 2018/19 Università degli Studi di Roma Tor Vergata Dipartimento di Ingegneria Civile e Ingegneria Informatica
Dettaglitipi di dato astratti
tipi di dato astratti A. FERRARI ADT Un tipo di dato astratto o ADT (Abstract Data Type) è un tipo di dato le cui istanze possono essere manipolate con modalità che dipendono esclusivamente dalla semantica
DettagliLaboratorio di Programmazione
Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 25 Le liste in C struct nodo { int info; struct nodo *next; }; typedef struct nodo Nodo; typedef Nodo *PNodo; Inserimento in ordine
DettagliFondamenti di Informatica II 25. Laboratorio 7
Template di classi e regole per i file di include Fondamenti di Informatica II 25. Laboratorio 7 per le classi normali occorrono tipicamente due file: un file di er.h (p.e. pila.h) che contiene la definizione/specifica
Dettagli10/10/2016. Caratteristiche degli array. Il tipo RECORD. Il record. LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica
Caratteristiche degli array Principali caratteristiche degli array: LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica Marco Lapegna Dipartimento di Matematica e Applicazioni Universita degli
DettagliEsercizi Strutture dati di tipo astratto
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
DettagliStrutture Dinamiche. Fondamenti di Informatica
Strutture Dinamiche Fondamenti di Informatica 1 Indice Allocazione e de-allocazione di memoria Liste e loro gestione Companies, srl 2 Allocazione e cancellazione di memoria malloc (sizeof (TipoDato));
DettagliSommario. Collezioni. Collezioni: Liste: Pile (stack) Collezioni. Collezioni. Collezioni Struttura indicizzata (array) Nodi
Sommario : Array e liste. Nodi: dati e riferimenti. Liste: LinkedList: specifica e implementazione. Prestazioni. Pile (stack) Informatica Medica, I semestre, C++ 1 Una collezione (contenitore) è un oggetto
DettagliAllocazione dinamica della memoria
Università degli Studi di Milano Corso di Laurea in Informatica, A.A. 2017-2018 Allocazione dinamica della memoria Homepage del corso Turno A Nicola Basilico Dipartimento di Informatica Via Comelico 39/41-20135
DettagliStrutture Dinamiche. Strutture Dinamiche
Corso di Informatica A Vito Perrone 1 Indice Allocazione e de-allocazione di memoria Liste e loro gestione 2 Allocazione e cancellazione di memoria malloc (sizeof (TipoDato)); Crea in memoria una variabile
DettagliLinked Lists. Liste linkate (1) Progettazione: struct. Liste linkate (2)
Liste linkate () Linked Lists La combinazione di class/struct e puntatori porta alla creazioni di interessanti Abstract Data Type liste linkate ( stack, queues ), trees Liste linkate come strutture struct
DettagliSOMMARIO STACK. STACK: specifica STACK
SOMMARIO STACK Pila (stack): una struttura dati lineare a cui si può accedere soltanto mediante uno dei suoi capi per memorizzare e per estrarre dati. Specifica (descrizione). Implementazione (realizzazione).
DettagliLaboratorio di Programmazione
Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 33 Le liste in C struct nodo { int info; struct nodo *next; }; typedef struct nodo Nodo; typedef Nodo *PNodo; Pila (Stack ) La struttura
DettagliParte 4D. Liste doppie. R. Magritte Transfer, D.1
Parte 4D Liste doppie R. Magritte Transfer, 1966 4D.1 4D.2 Liste doppie Lista singolarmente concatenata o lineare: ciascun elemento contiene solo un puntatore al prossimo elemento Lista doppiamente concatenata
DettagliAlgoritmi e Programmazione Avanzata. Pile e code. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino
Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino Sommario ADT Pile Code. A.A. 2001/2002 APA - 2 1 Sommario ADT Pile Code. A.A. 2001/2002 APA - 3 ADT Le regole che
DettagliPile e code. Sommario. Algoritmi e Programmazione Avanzata. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino
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
DettagliFondamenti di Informatica
Programmazione modulare (top-down) Fondamenti di Informatica 15. Funzioni in C++ (parte 1) Problemi complessi Conviene suddividere il programma in sottoprogrammi piu semplici mediante la metodologia di
DettagliLinked Lists. Liste linkate (1) liste linkate ( stack, queues ), trees. Liste linkate come strutture
Linked Lists Liste linkate () La combinazione di class/struct e puntatori porta alla creazioni di interessanti Abstract Data Type liste linkate ( stack, queues ), trees Liste linkate come strutture struct
DettagliVector v1,v2; cout << max(v1,v2) << endl;} T max( max( T p1, p1, T p2 p2 ) { int main() { Per il tipo T deve essere
Programmazione generica Programmazione generica INFN, Sezione di Napoli Programmazione generica Programmazione generica Il C++ fornisce un metodo per creare un polimorfismo parametrico. E possibile utilizzare
DettagliListe. Una lista è una struttura dati (formata da elementi dello stesso tipo e collegati insieme) la cui lunghezza può variare dinamicamente.
Liste Una lista è una struttura dati (formata da elementi dello stesso tipo e collegati insieme) la cui lunghezza può variare dinamicamente. I suoi elementi sono variabili dinamiche che vengono creati
DettagliI PUNTATORI E LE STRUTTURE DATI DINAMICHE. Cosimo Laneve/Ivan Lanese
I PUNTATORI E LE STRUTTURE DATI DINAMICHE Cosimo Laneve/Ivan Lanese argomenti 1. dichiarazioni di puntatori 2. le operazione su puntatori (NULL, new, delete, &, *) 3. puntatori passati come parametri e
DettagliLa definizione del tipo di dato astratto lista è intrinsecamente ricorsiva, infatti una lista può essere:
LISTE DINAMICHE Liste semplicemente concatenate: La definizione del tipo di dato astratto lista è intrinsecamente ricorsiva, infatti una lista può essere: la lista vuota; oppure contiene un valore (di
DettagliSommario. Le strutture dati elementari per implementare sequenze: Vettori Liste
Sequenze Sommario Le strutture dati elementari per implementare sequenze: Vettori Liste Strutture dati elementari Le strutture dati vettore e lista sono fra le strutture dati più usate e semplici Il loro
DettagliIn questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi.
In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi. 1 strutture dati (astratte) Una struttura dati astratti consiste di uno o più insiemi con delle operazioni
DettagliLaboratorio di Programmazione
Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 25 ADT (Abstract Data Types) tipo di dato astratto Un ADT è un modello matematico con una collezione di operatori definiti su tale
DettagliListe concatenate e allocazione dinamica
Liste concatenate e allocazione dinamica Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2018/2019 Argomenti del Corso Ogni lezione consta di una spiegazione assistita da slide, e seguita
DettagliIMPLEMENTAZIONE CONCATENATE DELLE LISTE
IMPLEMENTAZIONE CONCATENATE DELLE LISTE Liste collegate Come già visto, la realizzazione sequenziale prevede che la sequenzialità degli elementi della lista venga rappresentata dalla adiacenza delle locazioni
DettagliLE STRUTTURE DATI DINAMICHE
LE TRUTTURE DTI DIMICHE Talvolta è necessario allocare spazio di memoria durante l esecuzione di un programma oppure creare variabili di durata temporanea. Esempio: Leggere e memorizzare dei numeri interi
DettagliAlgoritmi e Strutture Dati
Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 Il concetto di dato Il concetto di tipo di dato Insertion Sort for j 2 to lenght[a]
DettagliGestire le situazioni di errore
Gestire le situazioni di errore #include using namespace std; Classe VettoreDiInteri const int MAX = 10; class VettoreInteri { int v[max]; public: ; Gestire le situazioni di errore Ottenere
DettagliEsercitazione 11. Liste semplici
Esercitazione 11 Liste semplici Liste semplici (o lineari) Una lista semplice (o lineare) è una successione di elementi omogenei che occupano in memoria una posizione qualsiasi. Ciascun elemento contiene
Dettaglicons: L E L (...), e (e,...) Operatori tradizionali sulle liste car: (e,...) cdr: What s LISTE? null: () TRUE (...) FALSE Una lista e' una
What s LISTE? Una lista e' una ( es. λ = {4, 9, 1 E = dominio degli elementi di lista (persone, voli, interi, lettere...) L = {λ / λ e' una lista di elementi in E Bool = {TRUE, FALSE cons: L E L (...),
DettagliIntroduzione. Liste. Strutture ricorsive (2) Strutture ricorsive (1) DD p KP p
Introduzione Liste DD p. 449-474 KP p.397-424 Abbiamo fin ora studiato strutture dati con dimensione fissa: vettori e matrici strutture Introduciamo ora le strutture dati dinamiche (liste concatenate):
DettagliGestione di files Motivazioni
Gestione di files Motivazioni Un programma in esecuzione legge (sequenzialmente) una sequenza di caratteri prodotti "al volo" dall'utente (tramite tastiera) il programma in esecuzione scrive (sequenzialmente)
DettagliFondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati
Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati Paolo Torroni Dipartimento di Elettronica, Informatica e Sistemistica Università degli Studi di Bologna Anno Accademico 2008/2009 Sommario
DettagliEsercitazione: Implementazione in linguaggio C dell ADT. Stack con l utilizzo. di linked list
Esercitazione: Implementazione in linguaggio C dell ADT Stack con l utilizzo di linked list Laboratorio di Programmazione Introduzione un ADT (Abstract Data Type) è un modello (formale) che generalizza
DettagliCognome Domanda Nome Punteggio max
Fondamenti di Informatica - Proff. C. Bolchini, E. Di Nitto, F. Distante Corso di laurea in Ingegneria Meccanica e Aerospaziale Appello del 18 giugno 2002 Cognome Domanda 1 2 3 4 5 Nome Punteggio max 5
DettagliLaboratorio di Programmazione Lezione 3. Cristian Del Fabbro
Laboratorio di Programmazione Lezione 3 Cristian Del Fabbro Prossima lezione GIOVEDÌ 12 NOVEMBRE ORE 14:00 Array a.k.a. vettore Un array è una collezione ordinata di dati omogenei (cioé sono tutti dello
DettagliIn una coda gli inserimenti si fanno alla fine e le cancellazioni all inizio! First In First Out
In una coda gli inserimenti si fanno alla e e le cancellazioni all inizio! First In First Out Progr II - Coda 1 CODA: i requisiti Una coda (queue) è un ADT in cui le operazioni sono inserimenti e cancellazioni
DettagliAlgoritmi e Strutture Dati
Maria Rita Di Berardini 2, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 2 Polo di Scienze Università di Camerino ad Ascoli Piceno Il concetto di dato Il concetto
DettagliAlgoritmi e Strutture Dati
Strutture Elementari Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 29 ottobre 2008 Strutture Dati Astratte Il concetto di dato Il concetto
DettagliLaboratorio di Algoritmi e Strutture Dati. Pile
Laboratorio di Algoritmi e Strutture Dati Pile Teresa M.A. Basile basile@di.uniba.it Dipartimento di Informatica Università degli Studi di Bari Aldo Moro Materiale di base gentilmente concesso dal dott.
DettagliListe con sentinella. intlist *createlist(void){ intlist *q = malloc(sizeof(intlist)); if(!q) { exit(-1); } q->next = q->prev = q; return q; }
Liste con sentinella Un ulteriore semplificazione delle operazioni sulle liste si ottiene utilizzando un elemento sentinella (dummy) che non contiene informazione, ma serve a segnalare la fine e l inizio
DettagliAggiornamento : 21/11/2010 semplificate le funzioni per il calcolo delle medie.
/* Programma : cpp_medie_statistiche1.1.cpp Autore : Riontino Raffaele 4 informatici corso serale ITIS Molinari - Milano 8/11/2010 Funzionalità : programma che calcola le medie statistiche semplici e ponderate.
DettagliPILE E CODE. Pile (stack):
PILE E CODE Sono tipi di dato che consentono di rappresentare sequenze di elementi in cui gli inserimenti e le cancellazioni sono eseguiti con particolari modalita` (politiche o discipline). Pile (stack):
Dettagli#include <stdio.h> #include <stdlib.h> //necessaria per la malloc #include <string.h> // costante #define MAX_L 30
/* Dopo aver definito una lista in grado di contenere i dati di alcune persone (nome, genere e altezza in metri), scrivere un programma che consenta di verificare che inizialmente la lista sia vuota e
DettagliArray. Unità 7. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER
Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione prof. Domenico
DettagliProgrammazione 2. Liste Doppiamente Lincate. Prof. Sebastiano Battiato Prof.ssa Rosalba Giugno
Programmazione 2 Liste Doppiamente Lincate Prof. Sebastiano Battiato Prof.ssa Rosalba Giugno .. Liste doppiamente linkate Le liste linkate semplici consentono di scorrere gli elementi soltanto in una direzione,
DettagliTipi astratti pila e coda
Tipi astratti pila e coda Una pila è un tipo astratto che consente di rappresentare un insieme di elementi in cui ogni eliminazione ha per oggetto l elemento che è stato inserito per ultimo. Questa disciplina
DettagliEsercitazioni di Fondamenti di Informatica - Lez. 7 20/11/2018
Esercitazioni di Fondamenti di Informatica - Lez. 7 0/11/018 Esercizi sull allocazione dinamica della memoria in C 1. Cosa stampa il seguente programma? 1 #d e f i n e MAXLENGTH 0 4 typedef struct { char
DettagliStrutture dati dinamiche in C (II)
Strutture dati dinamiche in C (II) Laboratorio di Linguaggi di Programmazione a.a. 2001/2002 dott.ssa Francesca A. Lisi lisi@di.uniba.it Sommario Le liste concatenate (ancora ma in modo più formale) L
DettagliLa programmazione nel linguaggio C
Cancellazione : versione ricorsiva Sfruttiamo la visione ricorsiva della struttura dati per realizzare la cancellazione in modo ricorsivo 1. la cancellazione della vuota non richiede alcuna azione 2. la
DettagliESERCIZIO 1. AZ111 milano 12:34 23 AZ222 buenos-aires 12: BA333 toronto 4:15 20 KM444 madrid 10:12 100
ESERCIZIO 1 Scrivete un programma per la gestione delle informazioni relative ai voli giornalieri in partenza da un certo aeroporto. Il programma deve leggere da file le informazioni relative ai voli,
DettagliAlgoritmi e Strutture di Dati
Algoritmi e Strutture di Dati Capitolo 4 - Strutture di dati elementari This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. To view a copy of this license, visit
DettagliListe singolarmente linkate
liste Liste singolarmente linkate Una lista è una struttura dati costituita da un insieme di nodi collegati da puntatori 10 4 7 15 / In una lista singolarmente linkata ogni nodo è composto da : Il valore
DettagliStrutture dati dinamiche in C. Emilio Di Giacomo
Strutture dati dinamiche in C Emilio Di Giacomo Strutture dati Una struttura dati è un contenitore in cui i dati sono organizzati in maniera che possano essere recuperati e manipolati efficientemente Un
DettagliCorso di Fondamenti di Informatica Tipi strutturati: Stringhe
Corso di Fondamenti di Informatica Tipi strutturati: Stringhe Anno Accademico Francesco Tortorella Stringhe di caratteri La stringa è il tipo strutturato con cui vengono rappresentati gruppi di caratteri
Dettaglia.a Codice corso: 21012, La definizione del tipo di dato astratto lista è intrinsecamente ricorsiva, infatti una lista può essere:
LISTE DINAMICHE Liste semplicemente concatenate: La definizione del tipo di dato astratto lista è intrinsecamente ricorsiva, infatti una lista può essere: la lista vuota; oppure contiene un valore (di
DettagliTitolo presentazione INFORMATICA. sottotitolo A.A Milano, XX mese 20XX Laboratorio n 6 Ing. Gian Enrico Conti Dott.
Titolo presentazione INFORMATICA A sottotitolo A.A. 2017-18 Milano, XX mese 20XX Laboratorio n 6 Ing. Gian Enrico Conti Dott. Michele Zanella Info Logistiche (cont d) Calendario laboratori Data Orario
DettagliCorso di Fondamenti di Informatica II
Corso di Fondamenti di Informatica II Allocazione dinamica della memoria a.a. 2009/2010 Francesco Fontanella La Funzione Transfer void transfer(char in[], char voc[], char con[]) { char *pi, *pv, *pc;
DettagliRappresentazione di sequenze...
Liste Rappresentazione di sequenze... Ritorniamo al nostro problema di rappresentare le sequenze, se vi ricordate avevano sottolineato un paio di problemi della rappresentazione di sequenze usando array
Dettagli4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste
4 Le liste collegate 4.0 Le liste collegate c Diego Calvanese Fondamenti di Informatica Corso di Laurea in Ingegneria Elettronica A.A. 2001/2002 4.0 0 4 Le liste collegate Rappresentazione di liste 4.1
DettagliLa classe std::vector della Standard Template Library del C++
La classe std::vector della Standard Template Library del C++ Alberto Garfagnini Università degli studi di Padova 23 Ottobre 2013 Programmazione generica in C++ : i Template I templates sono probabilmente
DettagliCorso di Laurea Ingegneria Informatica Fondamenti di Informatica 2
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa E14 F. Gasparetti, C. Limongelli Maggio 2012 1 Verifica presenza di elementi comuni V1 - Date due liste di stringhe scrivere
DettagliAlgoritmo di ordinamento per sostituzione. Esempio : dato l array :
Algoritmo di ordinamento per sostituzione Per ottenere un ordinamento crescente con l algoritmo di ordinamento per Sostituzione si confronta l elemento nella prima posizione con gli elementi nelle posizioni
DettagliSommario. Tipo stringa: string. Tipo stringa: stile C. Tipo stringa Tipo booleano
Tipo stringa Tipo booleano Sommario Ricorsione: Definizione Chiamata di funzione Ricorsione in coda Ricorsione non in coda Ricorsionei eccessiva Esempio di ricorsione: ricerca binaria Tipo stringa Il C++
DettagliADT: Abstract Data Type. Quasi ADT. ADT per collezioni di dati (code generalizzate) 04 I tipi di dati astratti (I parte)
ADT: Abstract Data Type I tipi di dati astratti (I parte) Gianpiero Cabodi e Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino Scopo Livello di astrazione sui dati tale da mascherare completamente
DettagliCorso di Laurea Ingegneria Informatica Fondamenti di Informatica 2
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa 09 ADT: Lista, Pila, Coda A. Miola Marzo 2007 http://www.dia.uniroma3.it/~java/fondinf2/ ADT: Lista, Pila, Coda 1 Contenuti Tipo
DettagliPROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE
PROGRAMMAZIONE II canale A-D 2007-2008 14 luglio 2008 TRACCIA DI SOLUZIONE 1. Si vogliono realizzare mediante puntatori delle liste circolari, cioè delle liste tali che l ultimo elemento della lista punta
DettagliCesare Rota. Programmare con C++
Cesare Rota Programmare con C++ Questo fascicolo deve essere allegato al volume Programmare con C++ di Cesare Rota ISBN 978-88-203-4248-7, ne è parte integrante e non può essere venduto separatamente EDITORE
DettagliListe concatenate e allocazione dinamica
Liste concatenate e allocazione dinamica Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2017/2018 Calendario delle lezioni Ogni lezione consta di una spiegazione assistita da slide,
DettagliStrutture dati dinamiche
Strutture dati dinamiche - Liste concatenate - Pile -> LIFO (last in first out) - Code -> FIFO (first in first out) - Alberi binari: gestione dati in algoritmi complessi Liste Concatenate Formata da elementi
DettagliLezione 11: Liste a Puntatori e Input/Output
Lezione 11: Liste a Puntatori e Input/Output Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione Richiamo: strutture (struct)
DettagliClasse Squadra. #include <iostream> using namespace std;
Classe Squadra Si vuole scrivere un programma che gestisce la classifica di un campionato tra squadre di calcio, ognuna identificata dal proprio nome. Il programma deve essere in grado di assegnare un
Dettagli