Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1056 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Copier une partie d'une liste doublement chaînée

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Copier une partie d'une liste doublement chaînée

n°2212268
chrisnilso​n
Posté le 30-11-2013 à 22:07:58  profilanswer
 

Bonjour,
 
Je travaille actuellement sur un projet et je dois copier une partie d'une liste de structure doublement chaînée. Cette manipulation doit forcément être possible mais je ne vois pas comment y arriver...
 
Admettons la structure suivante
 

Code :
  1. typedef struct e
  2. {
  3.     char* name;
  4.     int nbr;
  5. } ELEMENT;
  6. typedef struct node
  7. {
  8.     ELEMENT data;
  9.     struct node* prev;
  10.     struct node* next;
  11. }*Liste


 
 
Je cherche à copier à partir d'un noeud de la liste, le reste de la liste, puis de mettre cette copie en bout de liste. Schématiquement ça donnerait :
 
A <-> Z <-> E <-> R <-> T <-> Y -> NULL , copie à partir de T, A <-> Z <-> E <-> R <-> T <-> Y <-> T <-> Y -> NULL
 
 
d'après ce que j'ai pu voir, je ne pense pas que la fonction memecop puisse réaliser ceci.
 
Et la fonction suivante ne marche pas :
 

Code :
  1. void coy_part(Liste l, ELEMENT source)
  2. {
  3.     Liste buffer = calloc(1,sizeof(source));
  4.     while(strcmp(l->data.name,source.name) !=0) //source.name = T
  5.     {
  6.         l = l->suiv;
  7.     }
  8.     buffer = l;
  9.     while(l->suiv ! = NULL)
  10.     {
  11.         l = l->suiv;
  12.     }
  13.     l->suiv = buffer;
  14. }


 
Dans ce cas là, le 2ème élement "T" aura pour prev toujours "R" et non "Y"
 
Je cherche donc ) me placer en "T", copier tout ce qui suit, et remplacer le "prev" du nouveau "T". Je sens que c'est un truc bête mais je ne le vois pas...
 
Auriez vous une solution ?


Message édité par chrisnilson le 30-11-2013 à 22:09:43
mood
Publicité
Posté le 30-11-2013 à 22:07:58  profilanswer
 

n°2212272
Farian
Posté le 30-11-2013 à 23:02:56  profilanswer
 

Bonjour !
 
Comme indiqué, il "suffit" de copier les éléments à dupliquer et "refaire les branchements, en nommant T(1) et Y(1) les éléments actuels et T(2) et Y(2) les éléments copiés :  
 
modification de la fin de la liste :  Y(1) -> T(2)  
 
On recâble tous les éléments copiés :  
 
 Y(1) <- T(2) -> Y(2)
 T(2) <- Y(2) -> NULL  
 
(le Y(2) -> NULL devrait déjà être bon ...
 
Et on obtient logiquement ce que vous cherchez.
 
 
Pour le faire, le mieux est de faire toutes les copies au départ et de les ajouter au fur et à mesure, par exemple en ayant un pointeur "élément avant", au départ initialisé à "Y(1)", puis en récupérant chaque nouvel élément copié C : élément avant <- C -> NULL, puis élément avant = C, et cela s'arrête tout seul. Ce n'est pas optimisé (puisqu'on fait deux affectations du suivant pour chaque élément sauf le dernier, mais cela a le mérite d'être simple).
 
Bonne continuation !


Message édité par Farian le 30-11-2013 à 23:07:00

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Copier une partie d'une liste doublement chaînée

 

Sujets relatifs
Liste de puces sur un blog : personnalisationGarder en mémoire une liste déroulante
[Résolu] Détecter le sens de parcours d'une liste de coordonnéesAfficher une Liste.
Problème Scrit qui liste les fichiers[Java] Liste chaînée - Pile
copier des lignes sous condition vers autre feuilleVBA - Copier données entre deux feuilles et restructuration
[Excel] Copier le contenu de plusieurs fichier Excel dans un seul 
Plus de sujets relatifs à : Copier une partie d'une liste doublement chaînée


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR