Donc je suis en train d'implémenter un trie pour stocker des mots dans un fichier dictionnaire. J'ai implémenté l'opération d'insertion; Maintenant, j'essaie d'imprimer lexicographiquement. Je suis proche de l'obtenir, mais j'ai un petit problème que je ne suis pas sûr de savoir comment résoudre. J'essaie également de garder à l'esprit la rapidité de mon programme, c'est pourquoi j'ai opté pour un trie sur un tableau ou une liste chaînée. Voici ce qu'un seul nœud ressemble:Impression trie lexicographiquement dans c
struct node {
int end;
int occurrences;
int superwords;
struct node* child[26];
};
« fin » indique l'achèvement d'un mot (par exemple, à la fin == 1 à la lettre « k » dans le livre de mot, ce qui évite la confusion à vérifier si ou pas un mot a été réellement inséré dans l'arbre).
est ici la méthode:
void preorder(struct node *follow, char hold[200], int s){
int i = 0;
if(follow == NULL){
return;
}
for(i = 0; i < 26; i++){
if(follow->child[i] == NULL){
continue;
}
else{
printf("%c",'a'+i);
hold[s] = 'a'+i;
s++;
if(follow->child[i]->end == 1){
printf("\n");
hold[s] = '\0';
printf("%s", hold);
}
preorder(follow->child[i], hold, s);
}
}
return;
}
Les mots que j'ai inséré sont: boo, livre, réservation, john, tex, texte. Ils devraient être imprimés dans cet ordre et séparés par une ligne. Ma sortie ressemble:
boo
book
booking
bookingjohn
bjohntex
bjtext
bjtext
Je sais que cela a probablement quelque chose à voir avec mon tableau « hold », qui stocke les préfixes de mots afin qu'ils ne se perdent pas. J'ai besoin de remettre l'index à zéro quelque part pour indiquer l'achèvement d'un préfixe et tous ses mots associés (boo, book, booking étant un bon exemple) mais n'ont pas été couronnés de succès. Toute aide serait très appréciée et je serais heureux de clarifier davantage mon processus de pensée.
comment vous sont familiers avec le concept de variables statiques? comme cette fonction est récursive, il peut être utile d'utiliser une ou deux variables statiques pour garder une trace des informations qui doivent être mémorisées entre les appels de fonction. –
Pas très familier. Je suis nouveau à c. S'il vous plaît élaborer. – Sara
Je pense plutôt que d'utiliser 's ++', vous pourriez avoir besoin de passer 's + 1' à l'appel récursif de 'preorder'. C'est généralement la façon dont vous géreriez la descente, tout en vous permettant de sauvegarder lorsque vous revenez. Vous devrez également terminer à "s + 1" avant d'imprimer. –