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:
codice:
typedef struct{
int N;
int Info[MAX];
}Heap;
e, nel mio main, voglio richiamare la funzione ExtractMax:
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);
}
}
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;
}
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....
Qualche consiglio o materiale specifico?
Grazie mille a tutti.