40 PROCÉDURES POUR LA GESTION D'UNE LISTE LINÉAIRE CHAÎNÉE ! C++4.52

cs_exar Messages postés 286 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 22 avril 2012 - 7 déc. 2006 à 12:21
begueradj Messages postés 273 Date d'inscription dimanche 4 octobre 2009 Statut Membre Dernière intervention 24 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.

https://codes-sources.commentcamarche.net/source/40620-40-procedures-pour-la-gestion-d-une-liste-lineaire-chainee-c-4-52

begueradj Messages postés 273 Date d'inscription dimanche 4 octobre 2009 Statut Membre Dernière intervention 24 juin 2014 9
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és 3 Date d'inscription dimanche 23 octobre 2005 Statut Membre Dernière intervention 25 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és 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 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és 286 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 22 avril 2012 1
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és 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 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és 286 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 22 avril 2012 1
7 déc. 2006 à 20:48
DECK_BSD: Bien ton code, mais il voulait faire du C++, apparemment...
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
7 déc. 2006 à 20:28
Yop,

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 ;)
cs_exar Messages postés 286 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 22 avril 2012 1
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és 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
7 déc. 2006 à 14:08
>>EXAR : bonne initiative ! Bravo.
cs_exar Messages postés 286 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 22 avril 2012 1
7 déc. 2006 à 14:02
J'ai posté il y a peu un exemple de liste chaînée générique. Bon, il n'y a pas les 40 fonctions, mais il y a déjà une base... Je voulais juste montrer le principe.
Voir http://www.cppfrance.com/codes/LISTE-CHAINEE-ORIENTEE-OBJET-BASEE-SUR-TEMPLATES_40445.aspx
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
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és 286 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 22 avril 2012 1
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 !
Rejoignez-nous