[C] Liste chainee

Liste chainee [C] - Programmation

Marsh Posté le 27-11-2001 à 16:35:39    

C'est koi le mieux pour faire une liste chainee:
 
-declarer 2 pointeurs (un de tete, un courant), et tester si la liste est vide pour soit ajouter le premier maillon, soit ajouter a la suite des autres maillons
 
-declarer une variable, un pointeur courant, faire pointer le pointeur courant sur la variable, et pas faire de test

Reply

Marsh Posté le 27-11-2001 à 16:35:39   

Reply

Marsh Posté le 27-11-2001 à 16:38:08    

Godbout a écrit a écrit :

C'est koi le mieux pour faire une liste chainee:
 
-declarer 2 pointeurs (un de tete, un courant), et tester si la liste est vide pour soit ajouter le premier maillon, soit ajouter a la suite des autres maillons
 
-declarer une variable, un pointeur courant, faire pointer le pointeur courant sur la variable, et pas faire de test  




 
vote pour la 2em solution seul hic pour aller chercher ton premier element inséré tu vas étre oblige de parcourir toute ta liste et ca c'est trop pouris (garder un pointeur sur le 1er elem insere)
 
koi ke le 1er exemple est nikel pour aller chercher rapidement un objet dans ta liste (reste a definir dans kel ordre la parcourir pour aller le chopper)  
 
rhha cette question est suivant ton aplication ....

 

[edtdd]--Message édité par koulip31--[/edtdd]

Reply

Marsh Posté le 27-11-2001 à 16:47:44    

tu sais, dans le fond, t pas oblige d'inserer les elements a la fin de la liste...

Reply

Marsh Posté le 27-11-2001 à 16:49:01    

ouais je sais qu'on peut les mettre en tete de liste aussi.
J'suis obsede par le fait de faire de la prog propre, faudrait peut etre que j'aille voir un psy :D
 
Surtout que je suis sur que ca change rien mais bon...

Reply

Marsh Posté le 27-11-2001 à 16:50:03    

sinon vu que g l'impression d'avoir ete un peu a cote de la plaque perso je garde tjs un ptr vers le premier element
donc ptet plus la premiere mais fait bien gaffe au ptr courant quand tu deleteras un element....

Reply

Marsh Posté le 27-11-2001 à 16:52:03    

dans ce cas t'es oblige de faire un if (pointeurTete == NULL) pour pouvoir faire le premier maillon nan ?
paske je suis retourne dans les sources du musee et la :vomi: je tombe sur un vieux booleen tout pourri.
 
Et je capte pas le pb du delete ? (free ??)

Reply

Marsh Posté le 27-11-2001 à 16:53:33    

non c t vis a vis de ton ptr courant (faire gaffe a ce qu'il ne pointe pas sur un element qui vient d'etre efface par ex), enfin g ptet pas bien tout compris comment tu veux organiser ca....

Reply

Marsh Posté le 27-11-2001 à 16:54:55    

Ben normalement pour faire joujou avec les chaines t'as besoin d'un pointeur de tete auquel on touche pas, un pointeur precedent, et un nouveau en fait.

Reply

Marsh Posté le 27-11-2001 à 17:00:14    

Il y a des moments ou il faut faire des choix, le choix en lui meme de determine pas forcement grand chose, mais il faut le faire...
 
pour ma part je prend le pointeur initial, car il me permet d'avoir une liste vide... et pour les fct recursives je trouve cela plus joli...
 
mais je te le demande Godbout... qui etait a l'origine :  
La poule, ou l'oeuf ?

Reply

Marsh Posté le 27-11-2001 à 17:03:17    

BENB a écrit a écrit :

Il y a des moments ou il faut faire des choix, le choix en lui meme de determine pas forcement grand chose, mais il faut le faire...
 
pour ma part je prend le pointeur initial, car il me permet d'avoir une liste vide... et pour les fct recursives je trouve cela plus joli...
 
mais je te le demande Godbout... qui etait a l'origine :  
La poule, ou l'oeuf ?  




 
Bonne question BENB, mais ca ne m'amuses pas de me torturer ainsi pour des broutilles.
Pour ce qui est de la liste vide, avec une variable du type de la structure, il suffit de faire var.next = NULL et ta liste vide est la aussi...

Reply

Marsh Posté le 27-11-2001 à 17:03:17   

Reply

Marsh Posté le 27-11-2001 à 17:04:46    

tu peux aussi avoir un objet liste qui encapsule tout ca
des fonctions de tris generiques
avec des pointeurs de fonction.
(le premier qui me dit qu'il n'y a pas d'objet en C,
ben je sais pas ce que je lui fais :D )
 
Ou alors programmer en Caml et la c'est le pied cote
utilisation des listes et fonctions recursives
mais la je saute dans le OT a pieds joints pieds joints
 
A+
LEGREG

Reply

Marsh Posté le 27-11-2001 à 17:07:45    

je met le code pour etre plus clair:
 
 
 
1ere sol:
 
sruct Liste
{
..}*depart, *noeud;
 
if (depart == NULL)
{
...}
 
2eme sol:
 
sruct Liste
{
..}depart, *noeud;
 
depart.suivant = NULL;
noeud = &depart;
 
noeud->suivant = (struct Liste *) malloc...
noeud = noeud -> suivant...

Reply

Marsh Posté le 27-11-2001 à 17:17:33    

Godbout a écrit a écrit :

 
 
Bonne question BENB, mais ca ne m'amuses pas de me torturer ainsi pour des broutilles.
Pour ce qui est de la liste vide, avec une variable du type de la structure, il suffit de faire var.next = NULL et ta liste vide est la aussi...  




elle n'est pas vide puisqu'il reste var dedans...

Reply

Marsh Posté le 27-11-2001 à 17:18:59    

legreg a écrit a écrit :

tu peux aussi avoir un objet liste qui encapsule tout ca
des fonctions de tris generiques
avec des pointeurs de fonction.
(le premier qui me dit qu'il n'y a pas d'objet en C,
ben je sais pas ce que je lui fais :D )
 
Ou alors programmer en Caml et la c'est le pied cote
utilisation des listes et fonctions recursives
mais la je saute dans le OT a pieds joints pieds joints
 
A+
LEGREG  




ben dans ce cas la j'utilise directement les list de la STL :D

Reply

Marsh Posté le 27-11-2001 à 17:23:07    

J'ai peche ca je sais pas ou :
 

Code :
  1. typedef struct _LINK *LPLINK;
  2. typedef struct _LINK
  3. {
  4.     LPLINK     PrevLink;
  5.     LPLINK     NextLink;
  6. } LINK;
  7. typedef struct _LIST
  8. {
  9.     LPLINK      Tail;
  10.     LPLINK      Head;
  11.     DWORD       Length;
  12. } LIST;
  13. typedef LIST *LPLIST;


 
evidemment il faut prevoir une fonction d'initialization
de ta liste
et des fonctions d'ajout, suppression d'elements.
 
A+
LEGREG

Reply

Marsh Posté le 27-11-2001 à 17:23:36    

BENB a écrit a écrit :

 
ben dans ce cas la j'utilise directement les list de la STL :D  




 
Ah non il a precise C pur cette fois ci :)
 
LEGREG

 

[edtdd]--Message édité par legreg--[/edtdd]

Reply

Marsh Posté le 27-11-2001 à 17:30:07    

legreg a écrit a écrit :

 
 
Ah non il a precise C pur cette fois ci :)
 
LEGREG  
 
 




C'est toi qui a ajoute des objets :D

Reply

Marsh Posté le 27-11-2001 à 18:04:59    

legreg a écrit a écrit :

 
 
Ah non il a precise C pur cette fois ci :)
 
LEGREG  
 
 




 
euh..ouaip mais c'etait pour pas partir dans des trucs trop dur pour moi :D

Reply

Marsh Posté le 27-11-2001 à 18:10:05    

legreg a écrit a écrit :

J'ai peche ca je sais pas ou :
 

Code :
  1. typedef struct _LINK *LPLINK;
  2. typedef struct _LINK
  3. {
  4.     LPLINK     PrevLink;
  5.     LPLINK     NextLink;
  6. } LINK;
  7. typedef struct _LIST
  8. {
  9.     LPLINK      Tail;
  10.     LPLINK      Head;
  11.     DWORD       Length;
  12. } LIST;
  13. typedef LIST *LPLIST;


 
evidemment il faut prevoir une fonction d'initialization
de ta liste
et des fonctions d'ajout, suppression d'elements.
 
A+
LEGREG  




Brrr, j'ai horreur de ce types qui ne sont que des pointeurs... j'en suis toute despointee...:D
ceci dit ce n'est pas une liste chainee, mais une liste doublement chainee...

Reply

Marsh Posté le 27-11-2001 à 19:02:05    

BENB a écrit a écrit :

 
Brrr, j'ai horreur de ce types qui ne sont que des pointeurs... j'en suis toute despointee...:D



 
Du C sans pointeur? mais comment fais-tu :) ?
 

BENB a écrit a écrit :

 
ceci dit ce n'est pas une liste chainee, mais une liste doublement chainee...  




 
Oops oui
Correction: tu supprimes

Code :
  1. LPLINK     PrevLink;


(faut pas non plus oublier
de mettre un pointeur vers l'objet
contenu)
 

BENB a écrit a écrit :

 
C'est toi qui a ajoute des objets




 
Qui a dit qu'on ne pouvait pas avoir d'objets en C?
Ma liste est un objet, certes un peu vide tant qu'on n'a pas
precise les methodes qui s'y appliquait:
genre AddItem(LIST ma_liste, MONTYPE mon_objet);  
(je n'ai pas pousse le vice jusqu'a definir
une vtable par objet..)
 
A+
LEGREG

Reply

Sujets relatifs:

Leave a Replay

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