1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a. 2001-2002 - 4° Ciclo Strutture Dati.

Slides:



Advertisements
Presentazioni simili
Uso avanzato di C.
Advertisements

Tipi di dato astratti Lista, Pila, Coda, Albero.
Estendere i linguaggi: i tipi di dato astratti
Strutture dati lineari
Type Checking (1° parte)
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
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.
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 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Liste.
Tail recursion: esempio
Introduzione alla Object Oriented Programming, OOP E.Mumolo. DEEI
E.Mumolo. DEEI Introduzione alla programmazione ad oggetti in C++ Object Oriented Programming, OOP E.Mumolo. DEEI
Allocazione dinamica della memoria
Specifiche senza JML: uso delle asserzioni. 2 Asserzioni in Java Dal jdk 1.4 (da Febbraio 2002) cè meccanismo per gestire asserzioni Asserzione: espressione.
CORSO DI PROGRAMMAZIONE II
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
1 Implementazione di Linguaggi 2 Implementazione di Linguaggi 2 Federico Bernardi Type checking 2° parte Type checking 2° parte - Equivalenza di type expressions.
nome: sequenza di caratteri usata per denotare un oggetto
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
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.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
1.Scrivere una funzione per cercare un numero x in una lista circolare di interi. La funzione deve restituire NULL se il numero non esiste. 2.Scrivere.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 12 (Deitel) Le strutture dati dinamiche Sommario Introduzione Allocazione dinamica.
Strutture dati per insiemi disgiunti
15 maggio 2002 Avvisi: Ultima lezione: mercoledì 29 maggio II Esonero: mercoledì 5 giugno, ora da stabilire.
Corso di informatica Athena – Periti Informatici
2000 Prentice Hall, Inc. All rights reserved. Capitolo 10 (Deitel) Strutture, unioni ed enumerazioni Sommario Introduzione Definire le strutture.
Tipi di dati elementari
void binario(int n); …………………
C. Gaibisso Programmazione di Calcolatori Lezione XXII La struttura di dati lista di variabili strutturate Programmazione di Calcolatori: le liste di.
Esercizi Liste.
Appunti di Java (J2SDK 1.4.2, JDK 1.6.0) prof. Antonella Schiavon settembre 2009.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 9 Tipi parametrici Collezioni generiche. Strutture matematiche parametriche.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Approfondimenti sulle Classi.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Polimorfismo.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 5 Le strutture informative Corso di Informatica 2 a.a. 2003/04 Lezione 5.
CORSO DI PROGRAMMAZIONE II Lezione 22
Esercitazioni su liste
Struttura di una lista legata Una lista legata è una variabile strutturata in cui ogni elemento mantiene l’indirizzo (mediante un puntatore) dell’elemento.
Esercizio Si legga una sequenza di numeri interi da tastiera (terminatore: 0), quindi: Creare lista L1 con inserimento in testa; cons Creare lista L2 con.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Pile e Code.
Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Capitolo 6 Iterazione Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Allievi Elettrici - AA Le funzioni ricorsive in C
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 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Alberi.
CORSO DI PROGRAMMAZIONE II
MODULO STRUTTURE DATI FONDAMENTALI: Strutture dinamiche
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Liste Concatenate 11 Aprile E’ una delle strutture dati fondamentali in tutti i linguaggi di programmazione di alto livello Una Lista Concatenata.
Copyright © Istituto Italiano Edizioni Atlas
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Strutture e Classi.
1 Tipi di dato modificabili §a livello semantico, riconduciamo la modificabilità alla nozione di variabile l lo stato “modificabile” corrispondente sarà.
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo Strutture dati di tipo astratto 19 Strutture dati,
 2000 Prentice Hall, Inc. All rights reserved. STRUTTURE Sommario Introduzione Definizione di strutture Inizializzazione di strutture Accesso ai membri.
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:

1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Strutture Dati

2 Le strutture Dati Per strutture dati s’intendono generalmente insiemi di dati caratterizzati dalla modalità d’accesso e dalla dimensione. Strutture Dati Statiche Sono caratterizzate dalla dimensione fissa. Tipici esempi sono gli array e i record implementati attraverso le struct. Strutture Dati Dinamiche Sono quelle la cui dimensione può crescere o decrescere durante l’esecuzione del programma. Esempi di strutture dati dinamiche sono le liste concatenate in cui i dati sono suddivisi in sottoinsiemi (nodi) ciascuno dei quali è collegato ad uno o più altri sottoinsiemi per mezzo di puntatori. Una lista concatenata può crescere o decrescere aggiungendo o togliendo nodi.

3 Strutture Dati Classi ricorsive Una classe ricorsiva contiene un membro di tipo puntatore che punta ad una struttura dello stesso tipo di quella in cui è contenuto. In sostanza ricorre una situazione del tipo sotto indicato: class Nome_Classe { ………….. ………………………………….. Nome_Classe *Nome_Puntatore; …………………………………}; Gli oggetti istanziati da una classe ricorsiva costituiscono perciò la naturale implementazione dei nodi di una lista concatenata.

4 Strutture Dati Esempio di classe ricorsiva. Class Node { public: Node (int); void setData (int); int getData ( ) const; void setNextPtr (const Node *); const Node *getNextPtr ( ) const; private: int data; Node *nextptr;// Puntatore di tipo Node };

5 Strutture Dati Liste concatenate Una lista concatenata può quindi definirsi come una sequenza di oggetti di una classe ricorsiva, chiamati nodi, connessi attraverso i puntatori della classe. Se la sequenza è unica, ossia se ogni oggetto può puntare solo all’oggetto che lo precede e/o lo segue in sequenza, la lista viene detta lineare. Esempi di liste lineari, che differiscono tra loro solo per le modalità di accesso, sono le pile (stack) e le code. Esempi di liste non lineari, ossia con più di un puntatore per ogni nodo che puntano a nodi non strettamente sequenziali, sono gli alberi. Nel caso di liste lineari il primo oggetto della sequenza, che viene detto testa della sequenza, è individuato da un puntatore. L’ultimo oggetto della sequenza, o coda, ha il suo puntatore convenzionalmente inizializzato a 0. Anche la coda può essere individuata da un puntatore.

6 Strutture Dati Rappresentazione grafica La rappresentazione grafica di una lista lineare può quindi essere fatta come segue: Oggetto B Puntatore Puntatore di testa Oggetto A Puntatore Oggetto C Puntatore Oggetto x 0 Puntatore di coda

7 Strutture Dati Ancora sulle liste concatenate lineari Le liste concatenate lineari possono essere ulteriormente caratterizzate come segue: Liste concatenate semplici Ogni nodo contiene un puntatore al successivo nodo, formando una sequenza che termina con un nodo il cui puntatore è 0. Liste concatenate semplici circolari Come sopra, tranne che il puntatore dell’ultimo nodo punta al primo nodo. Liste concatenate doppie Ogni nodo ha un puntatore sia al nodo precedente che al successivo, tranne l’ultimo che ha il puntatore al successivo uguale a 0 e il primo che ha il puntatore al precedente uguale a 0. Liste concatenate doppie circolari Come sopra tranne che il puntatore al successivo dell’ultimo nodo punta al primo nodo, mentre il puntatore al precedente del primo nodo punta all’ultimo nodo.

8 Strutture Dati Programma di manipolazione liste lineari semplici Il programma che ora consideriamo è un template di classe (di nome List), che manipola quindi liste con valori di un tipo da specificare, per mezzo delle seguenti opzioni selezionabili: 1 - Inserire un valore ad inizio lista (funzione insertAtFront) 2 - Inserire un valore alla fine della lista (funzione insertAtBack) 3 - Eliminare un valore dall’inizio della lista (funzione removeFromFront) 4 - Eliminare un valore dalla fine della lista (funzione removeFromBack) 5 - Terminare l’elaborazione eliminando tutti i nodi residui (funzione Distruttore)

9 Strutture Dati - Esempio // ListNode template definition #ifndef LISTND_H #define LISTND_H template class List; // forward declaration template class ListNode { friend class List ; // make List a friend public: ListNode( const NODETYPE & ); // constructor NODETYPE getData() const; // return data in the node private: NODETYPE data; // data ListNode *nextPtr; // next node in the list };

10 Strutture Dati - Esempio // Constructor template ListNode ::ListNode( const NODETYPE &info ) : data( info ), nextPtr( 0 ) { } // Return a copy of the data in the node template NODETYPE ListNode ::getData() const { return data; } #endif

11 Strutture Dati - Esempio // Template List class definition #ifndef LIST_H #define LIST_H #include #include "listnd.h" using std::cout; template class List { public: List(); // constructor ~List(); // destructor void insertAtFront( const NODETYPE & ); void insertAtBack( const NODETYPE & ); bool removeFromFront( NODETYPE & ); bool removeFromBack( NODETYPE & ); bool isEmpty() const; void print() const;

12 Strutture Dati - Esempio private: ListNode *firstPtr; // pointer to first node ListNode *lastPtr; // pointer to last node // Utility function to allocate a new node ListNode *getNewNode( const NODETYPE & ); }; // Default constructor template List ::List() : firstPtr( 0 ), lastPtr( 0 ) { }

13 Strutture Dati - Esempio // Is the List empty? template bool List ::isEmpty() const { return firstPtr == 0; } // Return a pointer to a newly allocated node template ListNode *List ::getNewNode ( const NODETYPE &value ) { ListNode *ptr = new ListNode ( value ); assert( ptr != 0 ); return ptr; }

14 Strutture Dati - Esempio 12 newPtr 711 firstPtrb) 12 newPtr firstPtra) 711

15 Strutture Dati - Esempio // Insert a node at the front of the list template void List :: insertAtFront( const NODETYPE &value) { ListNode *newPtr = getNewNode( value ); if ( isEmpty() ) // List is empty firstPtr = lastPtr = newPtr; else { // List is not empty newPtr->nextPtr = firstPtr; firstPtr = newPtr; }

16 Strutture Dati - Esempio 5 a) newPtrlastPtrfirstPtr lastPtrb) newPtrfirstPtr 5

17 Strutture Dati - Esempio // Insert a node at the back of the list template void List :: insertAtBack( const NODETYPE &value ) { ListNode *newPtr = getNewNode( value ); if ( isEmpty() ) // List is empty firstPtr = lastPtr = newPtr; else { // List is not empty lastPtr->nextPtr = newPtr; lastPtr = newPtr; }

18 Strutture Dati - Esempio a) firstPtrlastPtr 5 b) firstPtrlastPtr 5 tempPtr

19 Strutture Dati - Esempio // Delete a node from the front of the list template bool List ::removeFromFront( NODETYPE &value ) { if ( isEmpty() ) // List is empty return false; // delete unsuccessful else { ListNode *tempPtr = firstPtr; if ( firstPtr == lastPtr ) firstPtr = lastPtr = 0; else firstPtr = firstPtr->nextPtr; value = tempPtr->data; // data being removed delete tempPtr; return true; // delete successful }

20 Strutture Dati - Esempio a) firstPtrlastPtr 5 b) firstPtrlastPtr 5 currentPtr tempPtr

21 Strutture Dati - Esempio // Delete a node from the back of the list template bool List ::removeFromBack( NODETYPE &value ) {if ( isEmpty() ) return false; // delete unsuccessful else {ListNode *tempPtr = lastPtr; if ( firstPtr == lastPtr ) firstPtr = lastPtr = 0; else {ListNode *currentPtr = firstPtr; while ( currentPtr->nextPtr != lastPtr ) currentPtr = currentPtr->nextPtr; lastPtr = currentPtr; currentPtr->nextPtr = 0;} value = tempPtr->data; delete tempPtr; return true; // delete successful }

22 Strutture Dati - Esempio // Destructor template List ::~List() { if ( !isEmpty() ) { // List is not empty cout << "Destroying nodes...\n"; ListNode *currentPtr = firstPtr, *tempPtr; while ( currentPtr != 0 ) { // delete remaining nodes tempPtr = currentPtr; cout data << '\n'; currentPtr = currentPtr->nextPtr; delete tempPtr; } cout << "All nodes destroyed\n\n"; }

23 Strutture Dati - Esempio // Display the contents of the List template void List ::print() const { if ( isEmpty() ) { cout << "The list is empty\n\n"; return; } ListNode *currentPtr = firstPtr; cout << "The list is: "; while ( currentPtr != 0 ) { cout data << ' '; currentPtr = currentPtr->nextPtr; } cout << "\n\n"; } #endif

24 Strutture Dati - Esempio // List class test #include #include "list.h" using std::cin; using std::endl; // Function to test an integer List template void testList( List &listObject, const char *type ) { cout << "Testing a List of " << type << " values\n"; instructions( ); int choice; T value;

25 Strutture Dati - Esempio do { cout << "? "; cin >> choice; switch ( choice ) { case 1: cout << "Enter " << type << ": "; cin >> value; listObject.insertAtFront( value ); listObject.print(); break; case 2: cout << "Enter " << type << ": "; cin >> value; listObject.insertAtBack( value ); listObject.print(); break;

26 Strutture Dati - Esempio case 3: if ( listObject.removeFromFront( value ) ) cout << value << " removed from list\n"; listObject.print(); break; case 4: if ( listObject.removeFromBack( value ) ) cout << value << " removed from list\n"; listObject.print(); break; } } while ( choice != 5 ); cout << "End list test\n\n"; }

27 Strutture Dati - Esempio void instructions() { cout << "Enter one of the following:\n" << " 1 to insert at beginning of list\n" << " 2 to insert at end of list\n" << " 3 to delete from beginning of list\n" << " 4 to delete from end of list\n" << " 5 to end list processing\n"; } int main() { List integerList; testList( integerList, "integer" ); // test integerList List doubleList; testList( doubleList, "double" ); // test doubleList return 0;}

28 Strutture Dati - Esempio Testing a List of integer values Enter one of the following: 1 to insert at beginning of list 2 to insert at end of list 3 to delete from beginning of list 4 to delete from end of list 5 to end list processing ? 1 Enter integer: 1 The list is: 1 ? 1 Enter integer: 2 The list is: 2 1 ? 2 Enter integer: 3 The list is: ? 2 Enter integer: 4 The list is:

29 Strutture Dati - Esempio ? 3 2 removed from list The list is: ? 3 1 removed from list The list is: 3 4 ? 4 4 removed from list The list is: 3 ? 4 3 removed from list The list is empty ? 5 End list test

30 Strutture Dati - Esempio Testing a List of float values Enter one of the following: 1 to insert at beginning of list 2 to insert at end of list 3 to delete from beginning of list 4 to delete from end of list 5 to end list processing ? 1 Enter float: 1.1 The list is: 1.1 ? 1 Enter float: 2.2 The list is: ? 2 Enter float: 3.3 The list is: ? 2 Enter float: 4.4 The list is:

31 Strutture Dati - Esempio ? removed from list The list is: ? removed from list The list is: ? removed from list The list is: 3.3 ? removed from list The list is empty ? 5 End list test All nodes destroyed All nodesd destroyed