2012-11-24 11 views
1

Donc j'essaye de faire un arbre de préfixe, mais je ne suis pas sûr si ceci causerait une certaine erreur logique de quelque sorte?Est-il possible de créer un tableau de pointeurs sur struct (node)?

typedef struct TreeTag 
{ 
    char letter; 
    struct TreeTag *links[26]; /* Is this advisable? */ 
    int fullword; 
    int linknum; 
}TreeNode; 
+3

Il est le code juridique 'links' est un tableau de' 'struct TreeTag *, pas' TreeTag' struct qui n'a pas encore été défini. Il est courant que les membres de 'struct's soient des pointeurs vers eux-mêmes (pensez à une liste chaînée). – hmjd

+0

Reportez-vous à un livre sur les structures de données. Cela rendra les choses plus claires. – asheeshr

Répondre

1

Oui, tableau de pointeurs vers le noeud struct est autorisé

Si vous faites ceci:

struct node * p; //it's allowed 

donc il n'y a pas de problème à déclarer tableau de pointeurs.

Lorsque vous avez besoin de plus d'un pointeurs vers struct vous le faites

struct node * left; 
strcut node * right; 

alors pourquoi ne pouvez-vous le faire

struct node *child[2]; 

De même struct node *p[26] est également possible, mais tout dépend votre exigence et mise en œuvre.

Une exigence, Comme je pense pense à d-ary tree (où chaque nœud a d nœuds) Et vous voulez directement nevigate à ses enfants du nœud parent.

si struct node *child[d] est légal (où d est #defined)

+0

Est-ce une pratique courante? ou cela semble-t-il étrange? – latenightcode

+0

vous pouvez le faire selon vos besoins, mais ce n'est pas si commun – Omkant

+0

@vincentbelkin: j'espère que vous l'avez. – Omkant

0

C'est bon. Vous pouvez utiliser des pointeurs sur la structure dans la structure. La structure est considérée comme déclarée, mais non définie, au moment où vous déclarez le membre, et les pointeurs vers des types déclarés, mais pas encore définis, sont communs. Comment, par exemple, pourriez-vous définir les nœuds d'un arbre binaire ou d'une liste chaînée? Pour une liste, vous le feriez normalement quelque chose comme

typedef struct ListItem { 
    struct ListItem * next; 
    SomeType data; 
} ListItem; 
Questions connexes