Liste chainee [C] - Programmation
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]
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...
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
Surtout que je suis sur que ca change rien mais bon...
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....
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 je tombe sur un vieux booleen tout pourri.
Et je capte pas le pb du delete ? (free ??)
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....
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.
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 ?
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...
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 )
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
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...
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...
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 ) 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
Marsh Posté le 27-11-2001 à 17:23:07
J'ai peche ca je sais pas ou :
Code :
|
evidemment il faut prevoir une fonction d'initialization
de ta liste
et des fonctions d'ajout, suppression d'elements.
A+
LEGREG
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 |
Ah non il a precise C pur cette fois ci
LEGREG
[edtdd]--Message édité par legreg--[/edtdd]
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
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
Marsh Posté le 27-11-2001 à 18:10:05
legreg a écrit a écrit : J'ai peche ca je sais pas ou :
|
Brrr, j'ai horreur de ce types qui ne sont que des pointeurs... j'en suis toute despointee...
ceci dit ce n'est pas une liste chainee, mais une liste doublement chainee...
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 :
|
(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
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