Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoSylvana Di carlo Modificato 10 anni fa
1
15 maggio 2002 Avvisi: Ultima lezione: mercoledì 29 maggio II Esonero: mercoledì 5 giugno, ora da stabilire
2
Strutture dati dinamiche La dimensione cresce e diminuisce durante lesecuzione Liste linkate - inserimenti e cancellazioni in qualunque punto Pile (Stacks) – inserimenti e cancellazioni solo alla testa della pila Code (Queue) – inserimenti solo alla fine e cancellazioni solo allinizio Alberi binari – efficienti operazioni di ricerca e ordinamento, eliminazione di chiavi duplicate
3
Strutture auto-referenzianti (ricorsive) –Le strutture possono contenere come membro un puntatore ad una struttura dello stesso tipo –Possono essere collegate (linkate) insieme per formare strutture dati molto importanti: liste, pile, code e alberi –Terminano con un puntatore NULL ( 0 ) Due strutture ricorsive linkate insieme 1015 puntatore NULL (punta a niente) Membri: dati e puntatore
4
Strutture auto-referenzianti (ricorsive) struct node { int data; struct node *nextPtr; } nextPtr – punta ad un oggetto del tipo node –Si chiama link : collega un node ad un altro node
5
Allocazione dinamica della memoria malloc –Prende il numero di byte da allocare –Usa sizeof per determinare la size di un oggetto –Restituisce un puntatore di tipo void * Un puntatore void * puo essere assegnato a qualunque puntatore Se non ce memoria disponibile, restituisce NULL –newPtr = malloc( sizeof( struct node ) ); free –De-alloca la memoria allocata con malloc –Prende un puntatore come argomento –free (newPtr);
6
Liste linkate (concatenate) –Collezione lineare di strutture ricorsive, chiamate nodi, connesse da puntatori chiamati links –Si accede ad una lista tramite un puntatore al primo nodo della lista –I nodi successivi sono raggiunti via i membri puntatori-link. –Il puntatore link dellultimo nodo e settato a null per indicare la fine della lista Si usa una lista linkata invece che un array quando: –Il numero degli elementi non e predicibile –La lista ha bisogno di essere ordinata
7
Liste linkate –Lista singolarmente linkata Comincia con un puntatore al primo nodo Termina con un puntatore null Si attraversa solo in una direzione –Lista circolare singolarmente linkata Il puntatore dellultimo nodo punta al primo nodo –Lista doppiamente linkata Due puntatori start: il primo e lultimo elemento Ogni nodo ha un puntatore in avanti e uno allindietro Consente attraversamenti sia in avanti che allindietro –Lista circolare doppiamente linkata Il puntatore in avanti dellultimo nodo punta al primo nodo, mentre il puntatore allindietro dellultimo nodo punta allultimo nodo
8
Manipolazione e manutenzione di una lista Analizziamo il codice lista.c direttamente sul compilatore…
9
Esercizi Integrare il programma lista.c con le seguenti funzioni: Funzione search che ricerca un dato valore allinterno di una lista concatenata. La funzione dovra restituire il puntatore a quel valore o null nel caso che tale valore non sia presente nella lista. Funzione r_search : come la precedente, ma ricorsiva Riscrivere la funzione delete in modo che utilizzi esplicitamente la funzione search ( o r_search) Funzione inverse che restituisce la liste con gli elementi in ordine inverso
10
Esercizi Funzione count che restituisce il numero di elementi di una lista Funzione buildlist che prende in input una sequenza di valori e restituisce una lista in cui tali valori sono ordinati (la funzione utilizza insert ) Funzione concatenate che prende due liste e restituisce una lista ottenuta concatenando la seconda alla fine della prima
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.