Bonjour,
comment faire une copie d'une telle liste :
http://nicolasj.developpez.com/articles/listesimple/
merci.
Bonjour,
comment faire une copie d'une telle liste :
http://nicolasj.developpez.com/articles/listesimple/
merci.
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Oui c'est l'idée, naturellement. Mais comment l'écrire en C, concrètement ?
Je veux une 'vraie' copie, pas un simple lien.
Je ne vois pas ce qui t'ennuie. Si tu sais déjà créer une liste chaînée, alors tu en crées une seconde. Ça fonctionne exactement de la même façon.
Si cela vous semble si simple à tous les deux (je ne parle pas de l'algo mais de l'écriture effective du programme en C), est-ce que vous pouvez me montrer comment faire s'il vous plait, car je n'y arrive pas ?
Je parle d'ajouter une fonction à la bibliothèque, pour pouvoir faire une copie d'une liste quelconque, et je n'y arrive pas. Si vous savez comment faire, merci de partager.
Merci d'avance
Mais c'est bien là le problème, je ne sais pas comment écrire cela en C. Voilà le squelette de la fonction, merci de me montrer comment faire ce qui est commenté.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 sll_s* sll_copy(sll_s* source_list) { sll_s* list_copy = sll_new (); sll_first (source_list); while (source_list->list != NULL) { //copier le contenu de sll_data(source_list) dans data_copy. sll_insert (list_copy, data_copy); sll_next (source_list); } }
Pourquoi ne pas copier une à une les structures de ta liste initiale à l'aide de memcpy, puis remettre les pointeurs en place une fois la copie faite :
exemple :
dans la fonction (pt_dest est le pointeur vers le premier item de la liste2 et pt source celui de la liste1) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 struct item_liste { ... item_liste*next; };
Ceci devrait déjà te donner une idée. A priori si tu maitrise bien les listes tu ne devrais plus avoir de problème. Je ne t'ai pas tout fait (les mallocs par exemple)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 memcpy(pt_dest, pt_source, sizeof(item_liste)); pt1=pt_source->next; pt2=pt_dest; while(pt1!=NULL) { memcpy(pt2->next,pt1,sizeof(item_liste)); pt2=pt2->next; pt1=pt1->next; }
Cela me parait compliqué, je préfère suivre l'algorithme plus logique défini plus haut.
Je suis sur que Svear ou Obsidian ont une réponse bien plus simple étant donné la simplicité qu'ils voient dans cette question.
J'ai oublié de retourner la liste pour ma fonction.
Mais je ne vois toujours pas comment implémenter ce qui est en commentaires, merci de m'y aider.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 sll_s* sll_copy(sll_s* source_list) { sll_s* copy_list = sll_new (); sll_first (source_list); while (source_list->list != NULL) { //copier le contenu de sll_data(source_list) dans data_copy. sll_insert (copy_list, data_copy); sll_next (source_list); } return copy_list; }
Partager