Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156

    [C] Albero crea elenco

    Salve a tutti, ho una strutturi BST definita nel modo seguente:
    codice:
    struct SKey{                               //CHIAVE
       char codice[11];
    };   
    typedef struct SKey TKey;
    
    struct SSat {                             //SATELLITE
       char razza[16];
       float peso;
       int croccantini;
    };
    typedef struct SSat TSat;
    
    struct SInfo{                            //INFO
          TKey key;
          TSat satellite;
    };
    
    typedef struct SInfo TInfo;
    
    struct SNode {                       //NODO
       TInfo info;
       struct SNode *left;
       struct SNode *right;
    };
    typedef struct SNode TNode;
    typedef TNode* TTree;
    Devo scrivere una funzione che riceve in ingresso l'albero e un array di stringhe e restiuisca l'array riempito con tutte le razze ( ripetute una volta sola ) e il numero delle razze. Il prototipo deve essere il seguente :
    codice:
     
    int crea_elenco_razze(TTree tree,char elenco [][MAX])
    e la funzione che ho scritto io è:
    codice:
     
    int crea_elenco_razze(TTree tree,char elenco [][MAX])
    {
        if(tree==NULL)
            return 0;
        else
        {
            int l,r,c;
            if(tree->right!=NULL && tree->left!=NULL)
            {
                 l=crea_elenco_razze(tree->left,elenco);
                 r=crea_elenco_razze(tree->right,elenco);
                 c=aggiungi(tree->info.satellite.razza, elenco,l+r);
                return c;
            }
            else
            {
                if(tree->right!=NULL)
                {
                    r=crea_elenco_razze(tree->right,elenco);
                    c=aggiungi(tree->info.satellite.razza, elenco,r);
                    return c;
                }
                else
                {
                    if(tree->left!=NULL)
                    {
                        l=crea_elenco_razze(tree->left,elenco);
                        c=aggiungi(tree->info.satellite.razza,elenco,l);
                        return c;
                    }
                    else
                    {
                        c=aggiungi(tree->info.satellite.razza,elenco,0);
                        return c;
                    }
                }
            }
        }
    }
    dove
    codice:
    int aggiungi(char razza[], char elenco [][MAX], int dim)
    {
        int i;
        for(i=0;i<dim;i++)
        {
            if(strcmp(razza,elenco[i])==0)
                return dim;
        }
        strcpy(elenco[i],razza);
        return dim+1;
    }
    purtroppo nell'elenco razze c'è una riga vuota, e quindi il numero di razze risulta essere più grande dell'effettivo numero di 1. Qualcuno può darmi una mano?
    La chiamata nel main è:
    codice:
    case 2:
                    n_razze=crea_elenco_razze(tree,elenco);
                    printf("Il numero delle razze presenti e': %d \n",n_razze);
                    printf("L'elenco delle razze e' il seguente\n");
                    stampa_elenco(elenco,n_razze);

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    Ho risolto in questa maniera (qualora qualcuno fosse interessato alla soluzione):
    codice:
    int crea_elenco_razze(TTree tree,char elenco [][MAX])
    {
        if(tree==NULL)
            return 0;
        else
        {
            if(tree->right==NULL && tree->left==NULL)
            {
                int c=aggiungi(tree->info.satellite.razza,elenco,0);
                return c;
            }
            else
            {
                if(tree->right!=NULL && tree->left==NULL)
                {
                    int c=crea_elenco_razze(tree->right,elenco);
                    int m= aggiungi(tree->info.satellite.razza,elenco,c);
                    return m;
                }
                else
                {
                    if(tree->right==NULL && tree->left!=NULL)
                    {
                        int c=crea_elenco_razze(tree->left,elenco);
                        int m= aggiungi(tree->info.satellite.razza,elenco,c);
                        return m;
                    }
                    else
                    {
                        int r=crea_elenco_razze(tree->right,elenco);
                        int l=crea_elenco_razze(tree->left,elenco);
                        int m=aggiungi(tree->info.satellite.razza,elenco,r+l);
                        return m;
                    }
                }
            }
        }
        
    }
    ...sbagliavo nell'analizzare i vari casi.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.