Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    213

    [c] Esercizio albero con array

    Salve ragazzi, sono alle prese col C, precisamente l'argomento è quello degli alberi mediante array. Non sono sicuro di aver compreso bene l'argomento ma impegnandomi son riuscito a completare un esercizio e vorrei sapere se potrebbe andare. La traccia è presente nel codice...
    Naturalmente so che molte parti potrebbero essere migliorate, il mio dubbio sta solo nel fatto di vedere se ho capito in un certo modo l'argomento...
    Spero possiate aiutarmi, ecco il codice!

    codice:
    /*
                                TRACCIA
    Scrivere function C per la costruzione e visita per livelli di un albero qualsiasi rappresentato mediante array.
    [Suggerimento: la struct che definisce il generico nodo dell'albero, come nella figura sotto deve contenere i seguenti campi:
    l'informazione, il suo grado ed un array di puntatori (ai nodi figli) di dimentisione pari al massimo grado dei nodi che si suppone noto]
    */
    
    #include <stdio.h>
    
    #define MAXGRADO 4
    #define MAXNODI 11
    
    struct NODO
    {
        char c;
        int grado;
        int g[MAXGRADO];
    } nodi[MAXNODI];
    
    void enqueue ();
    
    int main()
    {
        int i, j, conta=1, next_level=0;
        printf("Costruzione di un albero\nOgni nodo puo' avere come informazioni un carattere\nMassimo %d nodi e ogni nodo massimo %d figli\n", MAXNODI, MAXGRADO);
        printf("\nInserisci il nodo radice -> ");
        nodi[0].c = getchar();
        printf("Inserisci il grado della radice -> ");
        scanf("%d", &nodi[0].grado);
    
        enqueue();
    
        for(i=0;i<MAXNODI;i++)
        {
            conta += nodi[i].grado;
        }
        printf("\n\nVisita albero per livelli\n");
        j = 0;
        for(i=0;i<conta;i++)
        {
            printf("\t%c ", nodi[i].c);
            next_level += nodi[i].grado;
            if(i == j)
            {
                printf("\n");
                j += next_level;
                next_level = 0;
            }
        }
    
        return 0;
    }
    void enqueue ()
    {
        int k, i=0, j=1;
        while (i != MAXNODI)
        {
            for(k=0;k<nodi[i].grado;k++)
            {
                fflush(stdin);
                printf("\nInserisci il %d figlio del nodo %c -> ", k+1, nodi[i].c);
                nodi[i+j+k].c = getchar();
                printf("Inserisci grado del %d figlio -> ", k+1);
                scanf("%d", &nodi[i+j+k].grado);
                nodi[i].g[k] = i+j+k;
            }
            j += k-1;
            i++;
        }
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    213
    Nessun aiuto?

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.