bonjour,
J'ai un petit problème dans ma liste chainée.
j'ai crée un tableau de liste chainée est dans chaque case du tableau je dois mettre ma liste principale et une liste secondaire dans la liste principale:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
typedef struct Thash{     //liste principale
  	char* id;
	char* kmer;
	pos_id_chained_t * positions;
	struct Thash * next;
}Thash_t;
 
typedef struct pos_id_chained
{
   unsigned int pos;
    struct pos_id_chained * next;
} pos_id_chained_t;
Je veux faire un ajout dans ma liste principale et si il trouve la meme id et le meme kmer donc il ajoute dans la liste secondaire.

voici ma fonction ajout:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
Thash_t * ajoute(Thash_t *pListe,char* id,char* kmer,unsigned int pos)
{	
  Thash_t * newelem= malloc(sizeof(Thash_t));
		if(pListe==NULL)   //si la liste est vide
		{
			newelem->kmer=malloc(sizeof(newelem));
                        strcpy(newelem->kmer,kmer);
			newelem->id=malloc(sizeof(newelem));
			strcpy(newelem->id,id);
                        newelem->positions=ajoutefinlistpos(newelem->positions,pos);
		       newelem->next = NULL;
                       return newelem;			
		}
		else                  //si la liste n'est pas vide
		{		int verif=0;		
			while(pListe!=NULL)  //ici je vérifie s'il y a un nœud qui correspond à id et au kmer donc il ajoute au noeud secondaire
			{	
				if((strcmp(pListe->id,id)==0) && (strcmp(pListe->kmer,kmer)==0))
				{	
					pListe->positions=ajoutefinlistpos(listepos,pos); //ajout dans la liste secondaire
					verif=1;
					return pListe;
				}
				pListe=pListe->next;
			}
						
			if (verif==0)   //s'il n'y a pas de id et de kmer donc on ajoute un nouveau noeud dans la liste principale
			{
				newelem->kmer=malloc(sizeof(newelem));
				strcpy(newelem->kmer,kmer);
				newelem->id=malloc(sizeof(newelem));
				strcpy(newelem->id,id);
				newelem->positions=ajoutefinlistpos(newelem->positions,pos);
				newelem->next = NULL;
				if(pListe == NULL)
					{
						return newelem;
					}
					else
					{
						Thash_t * temp=pListe;
						while(temp->next != NULL)
						{
							temp= temp->next;
						}
				temp->next=newelem;
				return pListe;
					}
			}
		}
}

Thash_t ** CreerTable(unsigned int nbEntrees)  //creation table de liste chainée
{
    unsigned int i=0;
	Thash_t **TThash = (Thash_t**)malloc(nbEntrees * sizeof(Thash_t*));
	for(i=0;i<nbEntrees;i++)
	{
		TThash[i]=NULL;
	}
	return TThash;
}

int main()  //le main
{
Thash_t** TThash=CreerTable(lenght);
TThash[Value]=ajoute(TThash[Value],sequence1,Kmer,i);  //voici l'ajout

}
j'ai exécute ce programme mais il n'y a pas un ajout. il n'y a qu'un seul ajout c'est à dire un seul noeud.

est-ce que vous pouvez m'aider?
Merci