Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Puntatori e funzioni

Visualizzazione discussione

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2013
    residenza
    Bologna
    Messaggi
    31

    Puntatori e funzioni

    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.
    Ultima modifica di gmac; 16-06-2016 a 22:06

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.