mise en œuvre d'un TRIE de la structure de données
Hii ,
j'ai Été mise en œuvre d'un trie dans le C ... mais j'obtiens une erreur dans le insert_trie fonction .
Je ne pouvais pas comprendre pourquoi le nœud racine n'est pas mis à jour . Merci de m'aider avec cela.
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct
{
char value;
int level;
struct node *next;
struct node *list;
}node;
node *trie = NULL;
node *init_trie()
{
node *new = (node *)malloc(sizeof(node));
if(trie == NULL)
{
new->value = '$';
new->next = NULL;
new->list = NULL;
new->level = 0;
trie = new;
printf("\n Finished initializing the trie with the value %c",trie->value);
return trie;
}
printf("\n Trie is already initialized");
return trie;
}
node *insert_trie(char *s)
{
node *nodepointer = trie;
node *new = (node *)malloc(sizeof(node));
node *save = NULL;
int i=0;
while(s[i]!=NULL)
{
nodepointer = nodepointer->list;
while(nodepointer!=NULL)
{
if(s[i] == nodepointer->value)
{
printf("\n Found %c",nodepointer->value);
nodepointer = nodepointer->list;
i++;
}
save = nodepointer;
nodepointer = nodepointer->next;
}
new->value = s[i];
new->next = NULL;
new->list = NULL;
printf("\n Inserting %c",new->value);
save->next = new;
i++;
}
return trie;
}
int main()
{
int num;
char *s = (char *)malloc(sizeof(char)*10);
trie = init_trie();
printf("\n Enter the number of words to enter into the trie ");
scanf("%d",&num);
while(num>0)
{
scanf("%s",s);
//printf("%s",s);
trie = insert_trie(s);
printf("\n Finished inserting the word %s into the trie \n",s);
num --;
}
return 0;
}
J'obtiens une erreur de segmentation en raison de la ligne de nodepointer = nodepointer->liste en insert_trie fonction ... Pourquoi ????
P. S : Ce n'est pas de devoirs.Mais je suis en train de le mettre en œuvre. Je n'ai pas pu trouver l'erreur .
Quelle erreur avez-vous? Quelle ligne est-il se produire?
Consultez maintenant... j'ai édité la question
Consultez maintenant... j'ai édité la question
OriginalL'auteur Flash | 2010-10-25
Vous devez vous connecter pour publier un commentaire.
"Mettre en œuvre un trie avec d'insertion, de recherche, et startsWith méthodes.
Note:
Vous pouvez supposer que toutes les entrées sont constitués de minuscules a-z."
J'ai écrit cette solution très simple pour la question ci-dessus à partir de LeetCode. Il a passé tous les 16 cas de test à partir LeetCode. J'espère que cela aidera.
OriginalL'auteur Utsav Popli
Un trie est titulaire d'un nœud par personnage et vous êtes seulement à effectuer une
malloc
par chaîne. Vous devriez appelermalloc
pour chaque nœud. (Aussi,malloc.h
est obsolète.stdlib.h
contientmalloc
depuis le C ANSI standard de 1989.)OriginalL'auteur Fred Foo
Dans le test si vous l'avance nodepointer à nodepointer->liste. Une fois le test si complète que vous l'avance nodepointer à nodepointer->suivant sans vérifier si nodepointer est NULLE à partir de l'avancement qui s'est produite dans le bloc if.
OriginalL'auteur Bayou Bob