40 PROCÉDURES POUR LA GESTION D'UNE LISTE LINÉAIRE CHAÎNÉE ! C++4.52
cs_exar
Messages postés286Date d'inscriptionvendredi 5 décembre 2003StatutMembreDernière intervention22 avril 2012
-
7 déc. 2006 à 12:21
begueradj
Messages postés273Date d'inscriptiondimanche 4 octobre 2009StatutMembreDernière intervention24 juin 2014
-
28 avril 2011 à 12:57
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
begueradj
Messages postés273Date d'inscriptiondimanche 4 octobre 2009StatutMembreDernière intervention24 juin 20149 28 avril 2011 à 12:57
c'est le seul programme qui marche vraiment et sans bugs que je n'ai jamais trouvé sur le web
bregredj
Messages postés3Date d'inscriptiondimanche 23 octobre 2005StatutMembreDernière intervention25 décembre 2006 25 déc. 2006 à 16:40
Bonjour ;
Mes réponses, en vrac :
1 : [NitRic le 15/12/2006 20:27:55 ]
"il utilise des variables globals ...
aucun passage d'arguments ..."
C'est justement le piège à éviter : essayez de passer la variable globale head comme paramètre
aux procédures implémentées : rien ne puit fonctionner.
2 :
struct pointer
{
int field ; // Pour contenir une valeur entière
struct pointer *link; // Ce champ est pout pointer sur l'élément suivant de la liste
}; I <<<<<<<<<<<<<<<<< QU'EST-CE QU'IL FAIT LÀ CE « I » ??? (ligne 17)
C'est juste une erreur de frappe !
2 : Pour tout le monde : je n'ai pas fait du C++, certes, mais je veux juste dire que j'ai utilisé un
compilateur C++ 4.52. En effet, rares sont les codes que je télécharge et qui s'exécute
sur mon compilateur (il est utile de signaler votre compilateur, je trouve).
Merci pour vos critiques constructives.
NitRic
Messages postés402Date d'inscriptionmardi 1 mai 2001StatutMembreDernière intervention15 août 2011 16 déc. 2006 à 17:33
t'aurais dû faire quelque chose de dynamique(modulaire/...), au lieux de ca, t'as fait quelque chose que personne ne peut utiliser, on ne peut que le lire et peut-être, je dis bien « peut-être », apprendre quelque chose « d'utile »
le mieux serait encore d'en faire une lib(why not!), sans fonctions inutiles, comme add_an_integer_for_given_linked_list_element() par exemple ... rien à voir avec les listes chaînées
création d'une liste
destruction d'une liste
ajout d'un élément(une position quelconque)
modification d'un élément, pourquoi pas(modifier la donnée d'un lien)
suppression d'un élément(une position quelconque)
parcourir la liste, soit en simulant un foreach(avec pointeur de fonction) ou avec des routines genre: moveNext/movePrev/etc.
etc.
ca c'est lié aux listes chaînées et c'est simple à comprendre pour TOUT le monde
tu fais un fichier maliste.h et un autre maliste.c en C et t'implémente la liste, avec void* pour les données c'est mieux, sinon en C++ fais une classe template parce que là, t'as tout mélangé
typedef struct laListe
{
// ...
}laListe;
void laListeInitialise(laListe* liste);
void laListeDetruire(laListe* liste);
etc.
et dans le .c
void laListeInitialise(laListe* liste)
{
liste->membre = valeur;
etc.
}
void laListeDetruire(laListe* liste)
{
// détruit la liste
}
etc.
la liste d'arguments c'est très utile et les variables globals c'est très « môvès » ...
pour savoir créer/manipuler/... une liste chaîné, pas besoin de 40 fonctions, ca embrouille inutillement ...
j'aimerais bien avoir les réponses à mes questions s'il te plait
« cell*create_my_liked_list( ); » c'est beau quand même ... liked_list ... t'aimes bien ta liste, ca ce voit
j'ai remarqué que t'avais pas modifié tes #include ...
cs_exar
Messages postés286Date d'inscriptionvendredi 5 décembre 2003StatutMembreDernière intervention22 avril 20121 15 déc. 2006 à 21:00
Nitric >> " ridicule ... cette source devrait être supprimée ..."
La mienne que j'ai donnée en référence ?
Si oui, fais mieux, j'attends. Beaucoups semblent avoir du mal à développer une bête chose comme une liste chaînée. Je n'en voyait pas l'intérêt, et ayant souvent vu dans la newsletter des "pseudo" listes chainnées, qui servent surtout à des étudiants débutants (je ne vois pas à qui d'autre si on connait la STL), et je pensais que mon petit code permettrait à faire cesser ces posts inutiles.
Je ne me prends pas pouyr un champion de la prog (Brunews est bcp meilleur !), mais je voulais cesser ces posts inutiles dans la liste des sources transmises dans la newsletter.
Cependant, j'avais l'intention de poster un arbre binaire basé sur le même principe (je ne sais pas encore quand, je n'ai actuellement pas le temps de le faire).
Sois moins agressif, la paix dans le monde est la seule solution !
Mais développe tes arguments pour dire que ma LC est de la M......
Merci !
Bon courage à toi !
PS.S: Je ne poste pas souvent, parce que mes dévelloppements ne me semblent pas utiles pour des particuliers.
NitRic
Messages postés402Date d'inscriptionmardi 1 mai 2001StatutMembreDernière intervention15 août 2011 15 déc. 2006 à 20:27
ridicule ... cette source devrait être supprimée ...
il utilise cout/puts/printf/cin/scanf/... à la random >> sstream/string/etc. << penses y ...
il utilise malloc()/free() au lieux de new/delete
en C++ on utilise des classes(template encore mieux)
il utilise des variables globals ...
aucun passage d'arguments ...
etc.
il aurait dû faire un tutoriel avec exemples et non une bête source ridicule comme celle ci ...
40 fonctions pour une simple liste chaînée...
#include <stdio.h> << pas bon, c'est <cstdio> en C++
#include <stdlib.h> << pas bon, c'est <cstdlib> en C++
#include <conio.h> << on utilise plus cette « chose »
#include << pas bon, c'est , avec le .h c'est la vieille version(gardée pour compatibiliter avec les vieux softs), sans .h c'est la nouvelle(revisée) et ca ne date pas d'aujourd'hui, t'aurais dû le savoir ...
struct pointer
{
int field ; // Pour contenir une valeur entière
struct pointer *link; // Ce champ est pout pointer sur l'élément suivant de la liste
}; I <<<<<<<<<<<<<<<<< QU'EST-CE QU'IL FAIT LÀ CE « I » ??? (ligne 17)
tu peux m'expliquer cette phrase s'il te plait?
« Ce code marche bien sous >>> l'environnement C++ 4.52. <<< »
Je sais, j'ai été dur mais néanmoins réaliste ... @++;
cs_exar
Messages postés286Date d'inscriptionvendredi 5 décembre 2003StatutMembreDernière intervention22 avril 20121 7 déc. 2006 à 20:48
DECK_BSD: Bien ton code, mais il voulait faire du C++, apparemment...
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 7 déc. 2006 à 20:28
PS : lol le titre de la source, ça fait très publiciter mdr ;)
cs_exar
Messages postés286Date d'inscriptionvendredi 5 décembre 2003StatutMembreDernière intervention22 avril 20121 7 déc. 2006 à 14:13
YANN_LO_SAN: Merci !
J'étais juste en train de regarder ton blog. Tu as des idées bien arrêtées, dis-moi ! Ceci dit, je suis assez d'accord...
Bravo d'avoir le courage d'exprimer de telles opinions !
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 7 déc. 2006 à 14:08
>>EXAR : bonne initiative ! Bravo.
cs_exar
Messages postés286Date d'inscriptionvendredi 5 décembre 2003StatutMembreDernière intervention22 avril 20121 7 déc. 2006 à 14:02
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 7 déc. 2006 à 13:54
Tu dis toi même C++ 4.52, outre le fait de mélanger puts et cout ect...
Le c++ te permets de faire tout ce travail une seule fois avec les templates !
En effet ta liste ne marche que pour des entiers. Il faut tout refaire pour un autre type, alors qu'avec la généricité c'était fini pour de bon.
Sinon c'est complet.
Bonne continuation.
cs_exar
Messages postés286Date d'inscriptionvendredi 5 décembre 2003StatutMembreDernière intervention22 avril 20121 7 déc. 2006 à 12:21
Oui, une suggestion: tu remplaces les cin>> et cout<< par des scanf et des printf, et tu as un code en C !
Tu n'as pas fait du C++, mais du C compilé avec un compilo C++...
Le C est un langage procédural, alors que C++ est un langage orienté objet. Autant utiliser ces fonctionnalités !
En attendant, bon code en C.
Bon courage !
28 avril 2011 à 12:57
25 déc. 2006 à 16:40
Mes réponses, en vrac :
1 : [NitRic le 15/12/2006 20:27:55 ]
"il utilise des variables globals ...
aucun passage d'arguments ..."
C'est justement le piège à éviter : essayez de passer la variable globale head comme paramètre
aux procédures implémentées : rien ne puit fonctionner.
2 :
struct pointer
{
int field ; // Pour contenir une valeur entière
struct pointer *link; // Ce champ est pout pointer sur l'élément suivant de la liste
}; I <<<<<<<<<<<<<<<<< QU'EST-CE QU'IL FAIT LÀ CE « I » ??? (ligne 17)
C'est juste une erreur de frappe !
2 : Pour tout le monde : je n'ai pas fait du C++, certes, mais je veux juste dire que j'ai utilisé un
compilateur C++ 4.52. En effet, rares sont les codes que je télécharge et qui s'exécute
sur mon compilateur (il est utile de signaler votre compilateur, je trouve).
Merci pour vos critiques constructives.
16 déc. 2006 à 17:33
le mieux serait encore d'en faire une lib(why not!), sans fonctions inutiles, comme add_an_integer_for_given_linked_list_element() par exemple ... rien à voir avec les listes chaînées
création d'une liste
destruction d'une liste
ajout d'un élément(une position quelconque)
modification d'un élément, pourquoi pas(modifier la donnée d'un lien)
suppression d'un élément(une position quelconque)
parcourir la liste, soit en simulant un foreach(avec pointeur de fonction) ou avec des routines genre: moveNext/movePrev/etc.
etc.
ca c'est lié aux listes chaînées et c'est simple à comprendre pour TOUT le monde
tu fais un fichier maliste.h et un autre maliste.c en C et t'implémente la liste, avec void* pour les données c'est mieux, sinon en C++ fais une classe template parce que là, t'as tout mélangé
typedef struct laListe
{
// ...
}laListe;
void laListeInitialise(laListe* liste);
void laListeDetruire(laListe* liste);
etc.
et dans le .c
void laListeInitialise(laListe* liste)
{
liste->membre = valeur;
etc.
}
void laListeDetruire(laListe* liste)
{
// détruit la liste
}
etc.
la liste d'arguments c'est très utile et les variables globals c'est très « môvès » ...
pour savoir créer/manipuler/... une liste chaîné, pas besoin de 40 fonctions, ca embrouille inutillement ...
j'aimerais bien avoir les réponses à mes questions s'il te plait
« cell*create_my_liked_list( ); » c'est beau quand même ... liked_list ... t'aimes bien ta liste, ca ce voit
j'ai remarqué que t'avais pas modifié tes #include ...
15 déc. 2006 à 21:00
La mienne que j'ai donnée en référence ?
Si oui, fais mieux, j'attends. Beaucoups semblent avoir du mal à développer une bête chose comme une liste chaînée. Je n'en voyait pas l'intérêt, et ayant souvent vu dans la newsletter des "pseudo" listes chainnées, qui servent surtout à des étudiants débutants (je ne vois pas à qui d'autre si on connait la STL), et je pensais que mon petit code permettrait à faire cesser ces posts inutiles.
Je ne me prends pas pouyr un champion de la prog (Brunews est bcp meilleur !), mais je voulais cesser ces posts inutiles dans la liste des sources transmises dans la newsletter.
Cependant, j'avais l'intention de poster un arbre binaire basé sur le même principe (je ne sais pas encore quand, je n'ai actuellement pas le temps de le faire).
Sois moins agressif, la paix dans le monde est la seule solution !
Mais développe tes arguments pour dire que ma LC est de la M......
Merci !
Bon courage à toi !
PS.S: Je ne poste pas souvent, parce que mes dévelloppements ne me semblent pas utiles pour des particuliers.
15 déc. 2006 à 20:27
il utilise cout/puts/printf/cin/scanf/... à la random >> sstream/string/etc. << penses y ...
il utilise malloc()/free() au lieux de new/delete
en C++ on utilise des classes(template encore mieux)
il utilise des variables globals ...
aucun passage d'arguments ...
etc.
il aurait dû faire un tutoriel avec exemples et non une bête source ridicule comme celle ci ...
40 fonctions pour une simple liste chaînée...
#include <stdio.h> << pas bon, c'est <cstdio> en C++
#include <stdlib.h> << pas bon, c'est <cstdlib> en C++
#include <conio.h> << on utilise plus cette « chose »
#include << pas bon, c'est , avec le .h c'est la vieille version(gardée pour compatibiliter avec les vieux softs), sans .h c'est la nouvelle(revisée) et ca ne date pas d'aujourd'hui, t'aurais dû le savoir ...
struct pointer
{
int field ; // Pour contenir une valeur entière
struct pointer *link; // Ce champ est pout pointer sur l'élément suivant de la liste
}; I <<<<<<<<<<<<<<<<< QU'EST-CE QU'IL FAIT LÀ CE « I » ??? (ligne 17)
tu peux m'expliquer cette phrase s'il te plait?
« Ce code marche bien sous >>> l'environnement C++ 4.52. <<< »
Je sais, j'ai été dur mais néanmoins réaliste ... @++;
7 déc. 2006 à 20:48
7 déc. 2006 à 20:28
Pour palier à ton problème de généralisation, tu peux t'inspiré de ma source : http://www.cppfrance.com/codes/HEADER-POUR-GERER-PILE-DYNAMIQUEMENT_37798.aspx
PS : lol le titre de la source, ça fait très publiciter mdr ;)
7 déc. 2006 à 14:13
J'étais juste en train de regarder ton blog. Tu as des idées bien arrêtées, dis-moi ! Ceci dit, je suis assez d'accord...
Bravo d'avoir le courage d'exprimer de telles opinions !
7 déc. 2006 à 14:08
7 déc. 2006 à 14:02
Voir http://www.cppfrance.com/codes/LISTE-CHAINEE-ORIENTEE-OBJET-BASEE-SUR-TEMPLATES_40445.aspx
7 déc. 2006 à 13:54
Le c++ te permets de faire tout ce travail une seule fois avec les templates !
En effet ta liste ne marche que pour des entiers. Il faut tout refaire pour un autre type, alors qu'avec la généricité c'était fini pour de bon.
Sinon c'est complet.
Bonne continuation.
7 déc. 2006 à 12:21
Tu n'as pas fait du C++, mais du C compilé avec un compilo C++...
Le C est un langage procédural, alors que C++ est un langage orienté objet. Autant utiliser ces fonctionnalités !
En attendant, bon code en C.
Bon courage !