probleme avec une liste chainée
bonjour a tous j'ai un probléme avec une liste chainée. ma liste contient un champs de type char et un pointeur vers l'element suivant, a chaque fois que je veux inserer une chaine je dois controller si cette chaine existe deja dans la liste. si elle existe je ne l'ajoute pas et je passe au mot suivant. les mots a inserer sont de longueur 7 et sont deja memorisés dans une matrice statique contenant par exemple l ligne. voici ce que j'ai ecrit mais ca donne rien. a la fin quand j'affiche ma liste, j'obtien juste le premier element.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
// declaration de la chaine
typedef struct lista
{
char stringa[9];
struct lista *next;
}list;
// les mots sont memorisés dans une matrice mat
}
int main(int agrc, char *argv[])
{
list *tete;
tete=NULL;
list *nouveau,*courant;
int i,trouver=0//variable d'aide;
for(i=0;i<l;i++)
{
if(tete==NULL)
{
nouveau=(list *)malloc(sizeof(list));
if(nouveau==NULL)
{// ajout en tete de la liste
printf(stderr,"erreur allocation memoire");
return EXIT_FAILURE;
}
strcpy(nouveau->stringa,mat[i]);
nouveau->next=tete;
tete=nouveau;
}
else
{
courant= tete;
if(strcmp(courant->stringa,mot[i])==0)
trouver=1;
while(courant->next!=null)
{
courant=courant->next;
if(strcmp(courant->stringa,mot[i])==0)
trouver=1;
}
if(trouver==0)
{ /*ca veut dire qu'on n'a pas trouve un elemetn qui se repetent donc on peut inserer mat[i]*/
strcpy(nouveau->stringa,mat[i]);
nouveau->next=null;
courant->next=nouveau;
}
}
}
} |
NB: je n'obtient aucun probleme de compilation la partie de code je l'ai inseré manuellement.
ou ai je commis l'erreur. s vous avez une idée faites moi savoir svp
copier le contenu d'une liste dans une matrice dinamique
aprés avoir rempli ma liste. je dois copier son contenu dans une matrice char dinamique.
ma liste est defini ainsi.
Code:
1 2 3 4 5
|
typedef struct lista{
char stringa[8];
struct lista *next;
}list; |
pour copier le contenu dans une matrice vett j'ai implementé la fonction copia
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| void copia(char **vett,list **testa){
int i=0;
list *lis;
lis=(*testa);
vett[i]=(char *)malloc(sizeof(char));
if(vett[i]==NULL){
printf("erreur allocatione memoire");
exit(EXIT_FAILURE);
}
while(lis!=NULL){
strcpy(vett[i],lis->stringa);
i++;
vett[i]=(char *)malloc(sizeof(char));
lis=lis->next;
}
return;
} |
dans la fonction main je definie la matrice **vett et j'appelle la fonction
copia(vett, &testa); // testa est le pointeur sur le premier element de la liste.
je n'obtient aucun probleme de compilation, mais a l'execution le programme se bloque. une aide svp