Rajout d'une structure

Rajout d'une structure - C - Programmation

Marsh Posté le 20-10-2009 à 17:44:07    

Bonjour,
 
J'ai créé jusque là un code consistant à répertorier différents objets, chacun contenu dans un maillon. En clair, voici un petit schéma:
 
http://free0.hiboox.com/vignettes/4309/d5676691efc7f1755702435e5278e6cc.png
 
Jusque là, tout va bien, voici le code correspondant pour le moment:
 

Code :
  1. #include <stdio.h>
  2. typedef struct objet {
  3. int a;
  4. int b;
  5. } un_objet;
  6. typedef struct maillon {
  7. un_objet * infos;
  8. struct maillon * suivant;
  9. } un_maillon;
  10. un_maillon *ajouterElement(un_maillon *le_maillon, un_objet *l_objet) {
  11. un_maillon *nouveau_maillon = malloc(sizeof(un_maillon));
  12. nouveau_maillon->suivant = NULL;
  13. nouveau_maillon->infos = malloc(sizeof(un_objet));
  14. nouveau_maillon->infos->a = l_objet->a;
  15. nouveau_maillon->infos->b = l_objet->b;
  16. if (le_maillon == NULL)
  17.  return nouveau_maillon;
  18. else {
  19.  un_maillon *maillon_courant = le_maillon;
  20.  while (maillon_courant->suivant != NULL)
  21.   maillon_courant = maillon_courant->suivant;
  22.  maillon_courant->suivant = nouveau_maillon;
  23.  return le_maillon;
  24. }
  25. }
  26. int main(void)
  27. {
  28. un_maillon *le_maillon = NULL;
  29. un_objet l_objet = { 12, 56 };
  30. le_maillon = ajouterElement(le_maillon, &l_objet);
  31. printf("%d\t%d", le_maillon->infos->a, le_maillon->infos->b);
  32. return 0;
  33. }


 
Seulement, on m'impose d'inclure dans mon code une structure liste supplémentaire définie ainsi:
 

Code :
  1. struct liste{
  2. un_maillon * premier_maillon;
  3. un_maillon * dernier_maillon;
  4. un_maillon * maillon_courant; // pour se déplacer dans la liste sans perdre la place du premier maillon
  5. };


 
On aurait alors un schéma comme le suivant:
 
http://free0.hiboox.com/vignettes/4309/ab87159b1770f4f96461c764359d2f3d.png
 
J'ai essayé d'implanter au code ci-dessus cette structure et les changements que cela entraîne, mais curieusement, je n'y parvient pas... :(  Pouvez-vous me montrer svp?
 
Merci d'avance! :)  

Reply

Marsh Posté le 20-10-2009 à 17:44:07   

Reply

Marsh Posté le 20-10-2009 à 18:50:33    

dans la mesure où tu n'as la possibilité de parcourir ta liste que dans un sens, as-tu vraiment besoin d'un pointeur sur le dernier maillon ?
 
comment tu fais si tu veux parcourir la même liste deux fois en même temps ? Tu vas rajouter un maillon courant dans ta structure ?
 
Cette structure est obligatoire ? ca me parait vraiment douteux. Le pointeur de dernier maillon peut t'inviter à faire une liste doublement chaînée, mais le maillon courant, je doute vraiment que ce soit une bonne idée


Message édité par theshockwave le 20-10-2009 à 18:51:37

---------------
last.fm
Reply

Marsh Posté le 20-10-2009 à 19:08:08    

Il ne faut pas que je fasse de liste doublement chaînée. Concernant le maillon courant, voici ce que l'on m'incite à faire:
 
"Etant donné que l’on aura à parcourir la liste de façon itérative pour modifier chacun des objets, il s'agit d’inclure dans la structure liste un pointeur ”courant” permettant de se déplacer dans la liste et de conserver l'emplacement où l’on se trouve."
 
Est-ce plus clair?

Reply

Marsh Posté le 20-10-2009 à 23:26:50    

dj_titeuf a écrit :


Seulement, on m'impose d'inclure dans mon code une structure liste supplémentaire définie ainsi:
 

Code :
  1. struct liste{
  2. un_maillon * premier_maillon;
  3. un_maillon * dernier_maillon;
  4. un_maillon * maillon_courant; // pour se déplacer dans la liste sans perdre la place du premier maillon
  5. };



Tiens ? Tout comme je te l'avais conseillé dans ce topic http://forum.hardware.fr/hfr/Progr [...] 5696_1.htm


Message édité par Sve@r le 20-10-2009 à 23:27:03

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed