Het combineren van twee afzonderlijke ADT in een

stemmen
0

Hey guys Ik probeer aan de slag op mijn CS opdracht (tweede jaar C papier).

In deze cursus hebben we een binaire zoekboom ADT en ook een Red Black Tree ADT gemaakt. We moeten ze te combineren in een meer algemene Tree ADT die ofwel zullen kiezen om een ​​Red Black Tree of A Binary Search Boom afhankelijk van de input van de gebruiker te zijn.

Ik ben begonnen met het definiëren van een nieuwe opgesomd type; treetype_t die ofwel kan worden ingesteld op RBT of BST ... mijn eerste vraag is hoe Ik verklaar de structuur, omdat ik weet niet welke ADT zal worden geselecteerd? bijvoorbeeld in mijn bst.c bestand dat ik heb:

struct bstnode {
   char *key;
   bst left;
   bst right;
};

en in mijn RBT bestand dat ik heb:

struct rbtnode {
   char *key;
   colour_t colour;
   rbt left;
   rbt right;
};

Mijn eerste idee was om een ​​if-statement zoals

  if (treetype_t == RBT){
           struct rbtnode {
       char *key;
       colour_t colour;
       rbt left;
       rbt right;
    };
   }
     else{

         struct bstnode {
       char *key;
       bst left;
       bst right;
    };
}

Maar ik denk niet dat dit zal werken ... Ik kan niet denken aan een andere benadering - even welke ideeën?

De vraag is gesteld op 29/09/2011 om 08:46
bron van user
In andere talen...                            


1 antwoorden

stemmen
0

Structuur definities kan niet worden gewijzigd tijdens de uitvoering als in de code. Je kunt ze alleen veranderen tijdens het compileren met behulp van de preprocessor's # if / # ifdef richtlijn, maar dat is nog te vroeg, omdat op dat moment dat je nog niet over de input van de gebruiker (tenzij de gebruiker de broncode direct kan wijzigen en opnieuw te compileren).

Wat je kunt doen is te combineren die structuren in een met behulp van de vakbond trefwoord:

struct rbtnode {
    char *key;
    colour_t colour;
    rbt left;
    rbt right;
};

struct bstnode {
    char *key;
    bst left;
    bst right;
};

union bst_or_rbt_node {
    struct bstnode bst_node;
    struct rbtnode rbt_node;
};

Dan ofwel de rbt_node lid van de Unie of de bst_node lid, afhankelijk van de input van de gebruiker gebruikt u.

Zorg ervoor dat je genoeg ruimte voor bst_or_rbt_node (veiligste zou worden met behulp sizeof (bst_or_rbt_node)) toe te wijzen.

Ook hoop ik dat RBT en bst zijn aanwijzer types.

Het is niet nodig om de vakbonden te gebruiken, maar op uw huidige niveau kan het een beetje makkelijker te gaan met hen dan met verwijzingen nietig bijvoorbeeld zijn, wijzer werpt.

antwoordde op 29/09/2011 om 09:06
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more