Esame Parziale Strutture Dati Del 26-04-01 - PowerPoint PPT Presentation

About This Presentation
Title:

Esame Parziale Strutture Dati Del 26-04-01

Description:

Title: Esame Parziale Strutture Dati Del 26-04-01 Author: Alessandro Last modified by: ZAND R Created Date: 11/28/2002 3:01:44 PM Document presentation format – PowerPoint PPT presentation

Number of Views:94
Avg rating:3.0/5.0
Slides: 21
Provided by: Ales117
Category:

less

Transcript and Presenter's Notes

Title: Esame Parziale Strutture Dati Del 26-04-01


1
STRUTTURE DATI e LABORATORIO II ESERCITAZIONE N14
albero di ricerca binario
2
TESTO ESERCITAZIONE
Scrivere un algoritmo C che implementi la
struttura albero di ricerca binario. Il programma
deve prevedere le funzioni di inserimento,
cancellazione, visualizzazione e ricerca. Il
campo chiave è costituito da una stringa.
Suggerimento. Per semplicità si supponga che
ogni dato sia una stringa che ne costituisce la
chiave. Per visualizzare i dati utilizzare gli
algoritmi che visitano lalbero. Implementare
inoltre sia lalgoritmo di ricerca ricorsivo che
quello iterativo.
3
ALBERI DI RICERCA BINARI
Un albero di ricerca binario offre delle
prestazioni migliori di quelle delle strutture
dati finora studiare, quando le operazioni da
svolgere sono linserimento, la cancellazione e
la ricerca di elementi arbitrari.
Definizione Un albero di ricerca binario è un
albero binario che soddisfa le seguenti
proprietà 1) Ogni elemento ha una chiave e le
chiavi sono uniche. 2) Le chiavi in un
sottoalbero sinistro non vuoto devono essere più
piccole della chiave nella radice del
sottoalbero. 3) Le chiavi in un sottoalbero
destro non vuoto devono essere più grandi della
chiave nella radice del sottoalbero. 4) Anche i
sottoalberi sinistro e destro sono alberi di
ricerca binari
4
ALBERI DI RICERCA BINARI
ESEMPIO DI ALBERO DI RICERCA BINARIO
30
40
5
2
5
INSERIMENTO
Per inserire un nuovo elemento dobbiamo prima
verificare che il valore di chiave sia diverso da
quelli degli elementi esistenti. Per fare questo
utilizziamo una funzione di ricerca
Se lalbero è vuoto o se il valore della chiave è
presente viene fornito NULL, in caso contrario la
funzione fornisce un puntatore allultimo
dellalbero che è stato incontrato durante la
ricerca. Il nuovo elemento deve essere inserito
come figlio di questo nodo.
6
INSERIMENTO
ESEMPIO DI INSERIMENTO
80
30
40
5
2
80
7
INSERIMENTO
ESEMPIO DI INSERIMENTO
35
30
40
5
2
35
80
8
INSERIMENTO
Algoritmo
9
CANCELLAZIONE
CANCELLAZIONE DI UN NODO TERMINALE
35
30
40
5
2
35
80
10
CANCELLAZIONE
CANCELLAZIONE DI UN NODO NON TERMINALE CON UN
SOLO FIGLIO
40
30
40
5
2
80
11
CANCELLAZIONE
CANCELLAZIONE DI UN NODO NON TERMINALE CON UN
SOLO FIGLIO
40
30
80
5
2
12
CANCELLAZIONE
CANCELLAZIONE DI UN NODO NON TERMINALE CON DUE
FIGLI
60
40
60
20
10
50
70
45
55
52
13
CANCELLAZIONE
CANCELLAZIONE DI UN NODO NON TERMINALE CON DUE
FIGLI
60
40
20
55
10
50
70
45
52
14
CANCELLAZIONE
Algoritmo
15
CANCELLAZIONE
10
CANCELLAZIONE DI UN NODO TERMINALE
if ( p!NULL strcmp(item, p-gtdati)0)
if (node-gtdestroNULL) node node-gtsinistro
else if (node-gtsinistroNULL) nodenode-gtdes
tro else tmp
node-gtsinistro previous node
while (tmp-gtdestro!NULL)
previous tmp
tmp tmp-gtdestro
strcpy(node-gtdati,
tmp-gtdati) if (previousnode) pr
evious-gtsinistro tmp-gtsinistro
else previous-gtdestro tmp-gtsinistro
if (proot) root node
else if (prev-gtsinistro p) prev-gtsinistro
node else prev-gtdestro node

40
prev?
20
? p
10
? node
node NULL
16
CANCELLAZIONE
CANCELLAZIONE DI UN NODO NON TERMINALE CON UN
SOLO FIGLIO
20
if ( p!NULL strcmp(item, p-gtdati)0)
if (node-gtdestroNULL) node node-gtsinistro
else if (node-gtsinistroNULL) nodenode-gtdes
tro else tmp
node-gtsinistro previous node
while (tmp-gtdestro!NULL)
previous tmp
tmp tmp-gtdestro
strcpy(node-gtdati,
tmp-gtdati) if (previousnode) pr
evious-gtsinistro tmp-gtsinistro
else previous-gtdestro tmp-gtsinistro
if (proot) root node
else if (prev-gtsinistro p) prev-gtsinistro
node else prev-gtdestro node

prev?
40
? p
20
? node
10
? node
17
CANCELLAZIONE
CANCELLAZIONE DI UN NODO NON TERMINALE CON DUE
FIGLI
20
if ( p!NULL strcmp(item, p-gtdati)0)
if (node-gtdestroNULL) node node-gtsinistro
else if (node-gtsinistroNULL) nodenode-gtdes
tro else tmp
node-gtsinistro previous node
while (tmp-gtdestro!NULL)
previous tmp
tmp tmp-gtdestro
strcpy(node-gtdati,
tmp-gtdati) if (previousnode)
previous-gtsinistro
tmp-gtsinistro else
previous-gtdestro tmp-gtsinistro
if (proot) root node else if
(prev-gtsinistro p) prev-gtsinistro node
else prev-gtdestro node
prev?
40
? p
20
previous?
? node
10
25
? tmp
18
RICERCA
La funzione di ricerca fornisce un puntatore al
nodo che contiene la chiave che stiamo cercando,
oppure se tale nodo non esiste fornisce NULL.
Algoritmo ricorsivo
Algoritmo iterattivo
19
VISUALIZZAZIONE
La visualizzazione può essere implementata con
vari algoritmi preorder, inorder, postorder,
level_order. La visualizzazione inorder ci
visualizzerà gli elementi con le chiavi ordinate.
eseguibile
20
SITO SLIDES
web.tiscali.it/ANDREAZ
Write a Comment
User Comments (0)
About PowerShow.com