Ciao Oregon, grazie mille per avermi risposto ancora una volta e, ancora una volta, con una certa celerità
Ho provato a seguire il tuo consiglio:
codice://ESTRAZIONE DEL MASSIMO IN UNA CODA A PRIORITA' void extractMax(Heap *PH){ int max; if(codaVuota(*PH)){ 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 = PH->Info[0]; PH->Info[0] = PH->Info[PH->N]; //DECREMENTO IL VETTORE PH->N--; //APPLICO LA HEAPIFY SUL PRIMO ELEMENTO, SAPENDO CHE SI RIPERCUOTE SU TUTTI I SOTTOALBERI Heapify(PH, 0); }codice://APPLICA LO HEAPIFY ALL'ALBERO BINARIo void Heapify(Heap *PPH, int i){ int l, r, m, comodo = 0, largest; l = Left(i); r = Right(i); if(PPH->Info[i] > comodo){ largest = i; comodo = PPH->Info[i]; } if(PPH->Info[l] > comodo){ largest = l; comodo = PPH->Info[l]; } if(PPH->Info[r] > comodo){ largest = r; comodo = PPH->Info[r]; } //SE IL VALORE DA SCAMBIARE NON E' IL NODO STESSO, SCAMBIO I VALORI if(largest != i){ Swap(&PPH->Info[i], &PPH->Info[largest]); Heapify(PPH, largest); } }Ho provato, inoltre, a lanciare un debug, e vedo che si blocca nel momento in cui esegue lo swap nella funzione Heapify:codice:int main(){ --CODE-- ExtractMax(&H); return 0; }
in particolare nell'istruzione: *b = *a;codice://FUNZIONE SWAP void Swap(int *a, int *b){ int temp; temp = *b; *b = *a; *a = temp; }


Rispondi quotando
