IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Recursivité en listes chaînées, comment?


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    bruce-willis
    Invité(e)
    Par défaut Recursivité en listes chaînées, comment?
    J'utilise C++ Builder depuis quelques mois, j'ai utilisé Delphi depuis que j'ai appris à programmer.
    Je sais créer une fonction de création de liste chaînée FIFO en Delphi:
    procedure createfile(var L:axe;elt:string);
    begin
    if L=nil then
    begin
    new(L);L^.value:=elt;
    L^.next:=nil;
    end
    else createfile(L^.next,elt);
    end;

    J'ai essayé la même chose en C++ Builder et ça ne se compile même pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void createfile(axe ** L,AnsiString elt){
    if (L==NULL){
    	L=(axe*) malloc(sizeof(axe));
    	L->value=elt;L->next=NULL;
    }
    else createfile(L->next,elt);
    }

  2. #2
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonsoir,

    Ch'tite question ... dans le code en C++Builder, 'axe' est de quel type ?
    (c'est peut être idiot, mais je vois pas ...)

    @ +

  3. #3
    bruce-willis
    Invité(e)
    Par défaut
    axe est une structure (liste chaînée).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    struct axe{
          AnsiString value;
          struct axe * next;
    };
    Je voudrais savoir les erreurs de * ou de -> que j'ai omises dans cette fonction recursive.

  4. #4
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    bonjour
    simplement comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void __fastcall  TForm1::createfile(axe *L,AnsiString elt)
    {
    	if (L==NULL)
    	{
    	 L=new axe;
    	 L->value=elt;
    	 L->next=NULL;
    	}
    else createfile(L->next,elt);
    }
    cordialement
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  5. #5
    bruce-willis
    Invité(e)
    Par défaut
    Une question:

    DjmSoftware,tu as mis un seul *
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void __fastcall  TForm1::createfile(axe *L,AnsiString elt)
    Est-ce que ce n'est pas 2 * => axe **L?
    Car le contenu de la liste chaînée risque de rester inchangé!

    Ou je me trompe?

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    En effet :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void __fastcall TForm1::createfile(axe **pL, AnsiString elt)
    {
    	if(*pL==NULL)
    	{
    		axe *L = new axe;
    		L->value=elt;
    		L->next=NULL;
    		*pL = L;
    	}
    	else 
    		createfile((*pL)->next,elt);
    }
    PS: Penser à renvoyer une erreur si pL est NULL...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/11/2010, 15h54
  2. [Liste simplement chaînée] comment passer d'un élément à un autre ?
    Par beegees dans le forum Algorithmes et structures de données
    Réponses: 21
    Dernier message: 18/02/2008, 22h32
  3. Construction de liste chaînées
    Par fomblardo dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 15/03/2005, 21h19
  4. Insertion d'un noeud dans une liste chaînée
    Par habib106 dans le forum Assembleur
    Réponses: 8
    Dernier message: 07/04/2004, 22h34
  5. [MFC] list box : comment ça marche
    Par runn2 dans le forum MFC
    Réponses: 4
    Dernier message: 28/01/2004, 12h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo