Ciao a tutti ragazzi, sto avendo un po' di difficoltà con l'utilizzo dei puntatori.
In particolare, non riesco a capire bene come fare il passaggio dei dati; mi spiego meglio:
Ho un ADT così definito:
e, nel mio main, voglio richiamare la funzione ExtractMax:codice:typedef struct{ int N; int Info[MAX]; }Heap;
codice://ESTRAZIONE DEL MASSIMO IN UNA CODA A PRIORITA' void extractMax(Heap *H){ int max; if(codaVuota(*H)){ printf("CODA VUOTA\n"); } //ESTRAGGO IL MASSIMO, SAPPIAMO CHE IN UN MAXHEAP E' SEMPRE IL PRIMO ELEMENTO //N.B. NOI RAPPRESENTIAMO L'ALBERO PARTENDO DA 0 E NON DA 1 max = H->Info[0]; H->Info[0] = H->Info[H->N]; //DECREMENTO IL VETTORE H->N--; //APPLICO LA HEAPIFY SUL PRIMO ELEMENTO, SAPENDO CHE SI RIPERCUOTE SU TUTTI I SOTTOALBERI Heapify(H, 0); }
codice:/APPLICA LO HEAPIFY ALL'ALBERO BINARIO void Heapify(Heap *H, int i){ int l, r, m, comodo = 0, largest; l = Left(i); r = Right(i); if(H->Info[i] > comodo){ largest = i; comodo = H->Info[i]; } if(H->Info[l] > comodo){ largest = l; comodo = H->Info[l]; } if(H->Info[r] > comodo){ largest = r; comodo = H->Info[r]; } //SE IL VALORE DA SCAMBIARE NON E' IL NODO STESSO, SCAMBIO I VALORI if(largest != i){ Swap(&H->Info[i], &H->Info[largest]); Heapify(H, largest); } }Ora, ovviamente, quando devo passare un array ad una funzione, devo farlo per parametro, quindi gli passo l'indirizzo di memoria &H e la funzione dichiara il suo bel puntatore void extractMax(Heap *H){ --CODICE--} però, quello che non capisco è, al suo interno, quando richiama la funzione Heapify, come dovrebbe fare la chiamata? Per parametro? Dovrei fare un Heapify(*H, i)????? Mi sto perdendo....codice:int main(){ //DICHIARO LO HEAP Heap H; //INIZIALIZZA Heap inizializzaHeap(&H); //ESTRAGGO IL VALORE CON MASSIMA PRIORITA' extractMax(&H); //STAMPO ALBERO BINARIO - HEAP stampaHeap(H); return 0; }
Qualche consiglio o materiale specifico?
Grazie mille a tutti.

Rispondi quotando
