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

  FORUM HardWare.fr
  Programmation

  [C] Liste chainee

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Liste chainee

n°75989
godbout
Génial.
Posté le 27-11-2001 à 16:35:39  profilanswer
 

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

mood
Publicité
Posté le 27-11-2001 à 16:35:39  profilanswer
 

n°75990
koulip31
Posté le 27-11-2001 à 16:38:08  profilanswer
 

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]

n°75994
chrisbk
-
Posté le 27-11-2001 à 16:47:44  profilanswer
 

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

n°75996
godbout
Génial.
Posté le 27-11-2001 à 16:49:01  profilanswer
 

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...

n°75997
chrisbk
-
Posté le 27-11-2001 à 16:50:03  profilanswer
 

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....

n°75999
godbout
Génial.
Posté le 27-11-2001 à 16:52:03  profilanswer
 

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 ??)

n°76000
chrisbk
-
Posté le 27-11-2001 à 16:53:33  profilanswer
 

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....

n°76002
godbout
Génial.
Posté le 27-11-2001 à 16:54:55  profilanswer
 

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.

n°76008
BENB
100% Lux.
Posté le 27-11-2001 à 17:00:14  profilanswer
 

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 ?

n°76012
godbout
Génial.
Posté le 27-11-2001 à 17:03:17  profilanswer
 

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...

mood
Publicité
Posté le 27-11-2001 à 17:03:17  profilanswer
 

n°76015
LeGreg
Posté le 27-11-2001 à 17:04:46  profilanswer
 

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

n°76017
godbout
Génial.
Posté le 27-11-2001 à 17:07:45  profilanswer
 

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...

n°76024
BENB
100% Lux.
Posté le 27-11-2001 à 17:17:33  profilanswer
 

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...

n°76025
BENB
100% Lux.
Posté le 27-11-2001 à 17:18:59  profilanswer
 

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

n°76027
LeGreg
Posté le 27-11-2001 à 17:23:07  profilanswer
 

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

n°76028
LeGreg
Posté le 27-11-2001 à 17:23:36  profilanswer
 

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]

n°76030
BENB
100% Lux.
Posté le 27-11-2001 à 17:30:07  profilanswer
 

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

n°76037
godbout
Génial.
Posté le 27-11-2001 à 18:04:59  profilanswer
 

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

n°76041
BENB
100% Lux.
Posté le 27-11-2001 à 18:10:05  profilanswer
 

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...

n°76049
LeGreg
Posté le 27-11-2001 à 19:02:05  profilanswer
 

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


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

  [C] Liste chainee

 

Sujets relatifs
[D3D] Liste de sommets normales ou indexées?HTML - Comment réduire la taille d'une liste/menu ?
javascript: capter valeur de liste déroulante.Refaire une liste des dossiers type windows, comme le forum
Comment supprimer un élément d'une liste en javascript ?[???] Mettre liste de prix à jour a base de feuille Excel
Comment faire une mailing liste?Liste des fonctions javascript
Refresh d'une liste déroulante dans un formulaire Access[Swing] Lien entre un vector et une liste.
Plus de sujets relatifs à : [C] Liste chainee


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