Programmazione Mod. B - prof. Burattini - Cap 17 1.

Slides:



Advertisements
Presentazioni simili
1 La Standard Template Library vettori, liste, mappe, …. find, replace, reverse, sort, …. puntatori intelligenti La libreria standard STL e una libreria.
Advertisements

PROGETTO MODULO B – a.a Possono scegliere questo progetto solo gli studenti che hanno superato la prova del progetto di intercorso. Siano dati.
Tipi di dato astratti Lista, Pila, Coda, Albero.
Estendere i linguaggi: i tipi di dato astratti
Strutture dati lineari
PROGRAMMARE IN PASCAL (le basi)
Le funzioni UD. 8 – Lorganizzazione dei programmi p. 309 LS Tron 4TC 06/07.
Lez. 11 (11/12) - PBElementi di Programmazione1 Lezione 11 Esercizi.
Type Checking (1° parte)
Generazione di Codice Intermedio
Algoritmi e Programmazione
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.
Lez. 91 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Alberi di ricerca.
Programmazione Concorrente
Sincronizzazione di processi
Strutture dati elementari
Alberi binari di ricerca
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
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2007/2008 Corso di Programmazione 1 a.a.2007/2008 Prof.ssa Chiara Petrioli Corso di Laurea.
File.
Interrogazioni su un albero binario di ricerca Search(S,k) – dato un insieme S ed un valore chiave k restituisce un puntatore x ad un elemento in S tale.
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
Algoritmi e Strutture Dati Alberi Binari di Ricerca.
Programmazione Mod. B - prof. Burattini - Cap 17 1.
Programmazione Mod. B - Alberi - prof. E. Burattini
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
1 Implementazione di Linguaggi 2 Implementazione di Linguaggi 2 Federico Bernardi Type checking 2° parte Type checking 2° parte - Equivalenza di type expressions.
Procedure e funzioni nei linguaggi di alto livello Lab Programmazione - turno /2006.
nome: sequenza di caratteri usata per denotare un oggetto
Algoritmi su Tipi Semplici
Puntatori - Cenni Nicola Fanizzi Corso di Programmazione C.d.L. in Informatica DIB - Università degli Studi di Bari.
1 Strutture Dinamiche Corso di Informatica A Vito Perrone.
Problema Ci sono 5 signore nel parco. Ognuna di loro ha 1 figlio. Ogni bambino ha 10 figurine di calciatori, per un totale quindi di 50 figurine. Questi.
OPERAZIONI CON STRINGHE Le operazioni più interessanti da fare, per ora, con le stringhe sono: determinare la lunghezza della stringa, cioè quanti caratteri.
CAPITOLO 7.
ESERCIZIO Date le seguenti definizioni TYPE nodoint=^tipoint tipoint=RECORD numero:integer; link:nodoint; END; ListaInt:Nodoint; Siano date 2 liste una.
I File.
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.
1 ListaDiElem Cancella( ListaDiElem lista, TipoElemento elem ) { ListaDiElem puntTemp; if( ! ListaVuota(lista) ) if( lista–>info == elem ) { puntTemp =
Corso di informatica Athena – Periti Informatici
Esercizi Liste.
Esercizi su alberi binari di ricerca
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
1 Un esempio con iteratore: le liste ordinate di interi.
Struttura di una lista legata Una lista legata è una variabile strutturata in cui ogni elemento mantiene l’indirizzo (mediante un puntatore) dell’elemento.
ESERCIZIO Assegnata una lista L di caratteri ed un carattere k, scrivere una procedura che cancelli tutte le occorrenze di k in L. PROGRAM Liste(output,input);
AlgoLab - Code unificabili Code unificabili con alberi binomiali Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.
4/5/2015E. Giovannetti -- OI09.1 Olimpiadi di Informatica 2010 Giornate preparatorie Dipartimento di Informatica Università di Torino marzo – Algoritmi.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Lez. 9 (13/14)Elementi di Programmazione1 Lezione 9 Valutazione di espressioni File di testo sequenziali.
PROVA INTERCORSO MOD.B a.a RICORSIONE ESERCIZI A1.1-A1.6.
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.
Lez.6 (13/14)Elementi di Programmazione1 Lezione 6 Funzioni Passaggio di parametri.
Nucleo di Java: Struttura e Semantica Espressioni Assegnamento Controllo di sequenza Dichiarazioni.
Liste di Interi Esercitazione. Una variante Liste concatenate di Integers Non modificabile Costruttori per creare la lista vuota o un nodo Metodi d’istanza.
Liste Concatenate 11 Aprile E’ una delle strutture dati fondamentali in tutti i linguaggi di programmazione di alto livello Una Lista Concatenata.
Liste Concatenate 28 Marzo Avviso Martedi’ 4 Aprile: Verifica di LIP Per iscriversi (obbligatorio) inviare un e- mail entro venerdi’ 31 Marzo a.
Grafi: rappresentazione e visita
APPUNTI SUL LINGUAGGIO C
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:

Programmazione Mod. B - prof. Burattini - Cap 17 1

2 LISTE E PUNTATORI Una lista può essere vista come un array. Una lista può anche essere vista come una serie di elementi gli uni collegati agli altri attraverso un sistema di puntatori. Le strutture a,b,…., possono essere di type integer, stringa, record, etc. abcde

Programmazione Mod. B - prof. Burattini - Cap 17 3 Una linear linked list ( o lista legata lineare) è una collezione di variabili dinamiche formate da un campo item e un campo puntatore. Ogni puntatore punta alla variabile successiva nellambito della struttura considerata. Pt P2 Luca P3Ugo ? P1 Emma nodo Variabile dinamicapuntatore itempuntatore Lista Ind. Mem Nome puntatore TypeNome Variabile valore PtrecPt^EmmaP P1recP1^LucaP P2recP2^UgoP3

Programmazione Mod. B - prof. Burattini - Cap 17 4 PxEmma ? Next Item Pt Stringa di 20 caratteri CONST NullItem= ' ' ;{controllo di eventuali errori } TYPE ItemType= STRING20[20] LNodeP=^LNodeType{puntatore a un nodo della lista} LNodeType = RECORD Item:ItemType; Next:LNodeP END; VAR Px:LNodeP; Questa è una eccezione rispetto allo standard del Pascal in cui si fa riferimento a un Type che precede e non che segue. Notare che lidentificatore LNodeP è definito prima del record dinamico LNodeType.

Programmazione Mod. B - prof. Burattini - Cap 17 5 Px P2 Luca P3Ugo NIL P1 Emma Item Next CONST NullItem= ' ' ;{controllo di eventuali errori } TYPE ItemType= STRING20[20] LNodeP=^LNodeType LNodeType = RECORD Item:ItemType; Next:LNodeP END; VAR Px:LNodeP; Px^.ItemEmma Px^.Next^.ItemLuca Px^.Next^.Next^.ItemUgo Px^.Next^.Next ^.Next^.NextNIL ItemNext

Programmazione Mod. B - prof. Burattini - Cap 17 6 ESERCIZIO Assegnata due liste legate L1 e L2 contenenti numeri interi, fondere le due liste in ununica lista in cui nella prima parte ci siano solo i numeri dispari e nella seconda parte solo i numeri pari. Es. L1=[2,5,1,6,8] L2=[12,3,10,7,9] L3=[5,1,3,7,9,2,6,8,12,10]

Programmazione Mod. B - prof. Burattini - Cap 17 7 LISTE GENERALIZZATE Vediamo come è possibile aggiungere o eliminare nodi dalla lista in un qualunque suo punto.

Programmazione Mod. B - prof. Burattini - Cap 17 8 CONST NullItem= ' ' ;{controllo di eventuali errori } TYPE ItemType= STRING[20] LNodeP=^LNodeType LNodeType = RECORD Item:ItemType; Next:LNodeP END; ListType = RECORD First:LNodeP END; VAR AList:ListType;

Programmazione Mod. B - prof. Burattini - Cap 17 9 PROCEDURE MakeList(VAR AList:ListType); {Crea una nuova lista vuota} PROCEDURE InsertNode(AnItem:ItemType; PrevNodeP:LNodeP; VAR AList:ListType); {Inserisce un Node con campo AnItem nella lista Alist. Il nodo è inserito subito dopo il nodo che ha come puntatore PrevNodeP. Se AListFirst=NIL allora il nodo sarà il primo della lista} PROCEDURE DeleteNode(PrevNodeP:LNodeP; VAR AList:ListType); {Cancella il Nodo che nella lista segue quello puntato da PrevNodeP. Se PrevNodeP è Alist.First, viene cancellato il primo nodo. Se la lista è vuota o PrevNodeP=NIL allora non succede nulla } CONST NullItem= ' ' ;{controllo di eventuali errori } TYPE ItemType= STRING[20] LNodeP=^LNodeType LNodeType = RECORD Item:ItemType; Next:LNodeP END; ListType = RECORD First:LNodeP END; VAR AList:ListType; NullItemNext First Alist ListType LNodeType Alist.First PROCEDURE KillNode(VAR Node:LNodeP); {Constructor :se Node non è NIL, dispose la memoria allocata per il Node e poi pone il Node a NIL. }

Programmazione Mod. B - prof. Burattini - Cap FUNCTION FirstNode(AList:ListType) :LNodeP; {ritorna il puntatore del primo nodo della lista } FUNCTION EmptyList(AList:ListType) :boolean; {ritorna TRUE se la lista è vuota } CONST NullItem= ' ' ;{controllo di eventuali errori } TYPE ItemType= STRING[20] LNodeP=^LNodeType LNodeType = RECORD Item:ItemType; Next:LNodeP END; ListType = RECORD First:LNodeP END; VAR AList:ListType; FUNCTION CercaPrevP(Px:LNodeP; AList:ListType):LNodeP; {dato il puntatore di un nodo Px fornisce il valore del puntatore del nodo che lo precede} FUNCTION Seleziona(AList:ListType;Index:integer):ItemType; {Fornisce il nome del nodo che si trova al posto Index} FUNCTION LPos(AList:ListType; SearchItem:ItemType):LNodeP; {Fornisce il puntatore di un preassegnato nodo SearchItem} NullItemNext First Alist ListType LNodeType Alist.First

Programmazione Mod. B - prof. Burattini - Cap CONST NullItem= ' ' ;{controllo di eventuali errori } TYPE ItemType= STRING[20] LNodeP=^LNodeType LNodeType = RECORD Item:ItemType; Next:LNodeP END; ListType = RECORD First:LNodeP END; VAR AList:ListType; PROCEDURE MakeList(VAR AList:ListType); {Crea una nuova lista vuota mettendo nei campi di First rispettivamente NullItem e NIL } BEGIN Alist.First:=NIL END; FUNCTION FirstNode(AList:ListType) :LNodeP; {ritorna il puntatore del primo nodo della lista } BEGIN FirstNode:=AList.First END; FUNCTION EmptyList(AList:ListType) :boolean; {ritorna TRUE se la lista è vuota } BEGIN EmptyList:=AList.First=NIL END; NullItemNext First Alist ListType LNodeType Alist.First PROCEDURE KillNode(VAR Node:LNodeP); BEGIN IF Node <> NIL THEN BEGIN dispose(Node); Node:=NIL END END;

Programmazione Mod. B - prof. Burattini - Cap AList.First NIL ItemNIL Temp AListFirst Item NextItem NextItem Next PrevNodeP Temp ItemNext PrevNodeP Item Next Item Next Item Next PrevNodeP ItemNext Temp PROCEDURE InsertNode(AnItem:ItemType;VAR PrevNodeP:LNodeP;VAR AList:ListType); {Inserisce un Node con campo AnItem nella lista Alist. Il nodo è inserito subito dopo il nodo che ha come puntatore PrevNodeP. Se PrevNodeP=NIL allora il nodo sarà il primo della lista} VAR Temp:LNodeP; BEGIN MakeNode(AnItem,Temp); IF PrevNodeP=NIL THEN BEGIN PrevNodeP:=Temp; Temp^.Next:=AList.First; AList.First:=Temp; END ELSE BEGIN Temp^.Next:=PrevNodeP^.Next; PrevNodeP^.Next:=Temp; PrevNodeP:=Temp; END;

Programmazione Mod. B - prof. Burattini - Cap Pseudo codice per cancellare un nodo Controllare se la lista è vuota. Controllare che non si cerchi di cancellare un puntatore che vale NIL. Cancellare il nodo indicato dal puntatore del nodo che lo precede, e far puntare questultimo sul nodo succesivo a quello da cancellare. AListFirst NullItem NextItem NextItem Next PrevNodeP Item Next

Programmazione Mod. B - prof. Burattini - Cap PROCEDURE DeleteNode(PrevNodeP:LNodeP;VAR AList:ListType); VAR Temp:LNodeP; BEGIN IF PrevNodeP<>NIL THEN Temp:=PrevNodeP^.Next { il nodo da cancellare non è il primo} ELSE Temp:=AList.First; { il nodo da cancellare è il primo} IF Temp<>NIL THEN IF PrevNodeP<>NIL THEN PrevNodeP^.Next:=Temp^.Next ELSE AList.First:=Temp^.Next; KillNode(Temp) END;

Programmazione Mod. B - prof. Burattini - Cap = <> AListFirst NullItem NextItem NextItem Next Item Next PrevNodeP <> NIL Temp= PrevNodeP^.Next Temp= Alist.First Potrebbe essere un qualunque nodo o lultimo nodo Temp <> NIL KillNode(Temp) = lista vuota Ultimo nodo PrevNodeP <> NIL <> Potrebbe essere un qualunque nodo o il primo della lista PrevNodeP.Next PrevNodeP^.Next:=Temp^.Next <> PrevNodeP E un nodo qualunque AList.First:=Temp^.Next = E il primo della lista

Programmazione Mod. B - prof. Burattini - Cap FUNCTION CercaPrevP(Px:LNodeP; VAR AList:ListType):LNodeP; {dato il puntatore di un nodo Px fornisce il valore del puntatore del nodo che lo precede} VAR CandP,Temp:LNodeP; BEGIN IF Px=AList.First THEN CercaPrevP:=NIL ELSE BEGIN CandP:=Alist.First; WHILE (CandP <> Px) AND (CandP<>NIL) DO BEGIN Temp:=CandP; CandP:=CandP^.Next END; CercaPrevP:=Temp END END;

Programmazione Mod. B - prof. Burattini - Cap Introduciamo due funzioni che permettono la gestione delle liste invece che attraverso i puntatori, attraverso la posizione dei singoli nodi nella lista. CONST NullItem= ' ' TYPE ItemType= STRING[20] LNodeP=^LNodeType LNodeType = RECORD Item:ItemType; Next:LNodeP END; ListType = RECORD First:LNodeP END; VAR AList:ListType; FUNCTION Ennesimo(P:LNodeP;n:integer):ItemType; {ricorsivamente cerca l'ennesimo elemento della lista} VAR AnItem:ItemType; BEGIN IF n=1 THEN BEGIN ItemValue(P,AnItem); Ennesimo:=AnItem; END ELSE Ennesimo:= Ennesimo(NextNode(P),n-1) {funzione ricorsiva} END; FUNCTION Seleziona(AList:ListType;Index:integer):ItemType; {Data una lista resituisce l'Item che si trova nella posizione Index} BEGIN IF Index<=0 THEN Seleziona:=NullItem ELSE Seleziona:=Ennesimo(AList.First^.Next,Index) END;

Programmazione Mod. B - prof. Burattini - Cap Introduciamo una funzione che permette la ricerca del puntatore di un nodo di cui è noto litem. FUNCTION LPos(List:ListType; SearchItem:ItemType):LNodeP; VAR CandNode: LNodeP; CandItem:ItemType; BEGIN CandNode:=FirstNode(List); {il primo item nella lista o NIL} ItemValue(CandNode,CandItem); WHILE (CandItem <> NullItem) AND (CandItem <> SearchItem) DO BEGIN CandNode:=NextNode(CandNode); ItemValue (CandNode,CandItem); END; IF CandItem=SearchItem THEN Lpos:=CandNode ELSE Lpos:=NIL ; END; Riscrivere questa funzione in forma ricorsiva

Programmazione Mod. B - prof. Burattini - Cap PROGRAM TestListe; VAR Lista:ListType; Nome,Nome2:ItemType; Indice:integer; Nodo,Nodo1, Px,PrevPx,LastNode:LNodeP; BEGIN writeln(' CREA LISTA'); MakeList(Lista); writeln; {Inserisci Dati} Nodo1:=Lista.First; writeln(' Dammi un nome'); readln(Nome); WHILE Nome<> NullItem DO BEGIN InsertNode(Nome,Nodo1,Lista); writeln(' Dammi un nome'); readln(Nome); END; writeln('Lista iniziale'); ShowList(FirstNode(Lista));

Programmazione Mod. B - prof. Burattini - Cap {CancellaNome} writeln(' Quale nome vuoi cancellare '); readln(Nome); writeln; Px:=Lpos(Lista,Nome); PrevPx:=CercaPrevP(Px,Lista); DeleteNode(PrevPx,Lista); writeln('Lista dopo la cancellazione'); ShowList(FirstNode(Lista)); readln; {InserisciRandom} writeln('Inserisci un nodo dopo l''item '); readln(Nome); writeln('Nuovo nodo '); readln(Nome2); Nodo1:=LPos(Lista,Nome); InsertNode(Nome2,Nodo1,Lista); writeln('Lista dopo inserimento di un nodo'); ShowList(FirstNode(Lista)); readln;

Programmazione Mod. B - prof. Burattini - Cap {CancellaPos} writeln('Cancella il nodo n. '); readln(Indice); Nome:=Seleziona(Lista,Indice); Px:=Lpos(Lista,Nome); PrevPx:=CercaPrevP(Px,Lista); DeleteNode(PrevPx,Lista); writeln('Lista dopo la cancellazione del nodo n. ',Indice); ShowList(FirstNode(Lista)); readln; END.

Programmazione Mod. B - prof. Burattini - Cap 17 22