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++ Discussion :

Problème avec les listes chainées


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Futur Ingenieur en Informatique
    Inscrit en
    Décembre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Futur Ingenieur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2014
    Messages : 20
    Par défaut Problème avec les listes chainées
    Bonjour !!

    je veut supprimer un element d'une liste chainée en demandant a l'utilisateur de donner la valeur qu'il veut supprimer .
    mon probleme est dans la fonction de suppression de l'element .

    Merci pour votre aide .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    void supp_elt(element *&debut,int val)
    {
         element *c1,*c2;
         c1=debut;
         c2=debut;
         while(c1 != NULL){
                  if(c1->info==val){
                                   c2=c2->svt;
                                   debut=c2->svt;
                                   delete c1 ; c1=0;
                                   }
                                   else{
                                        c1=c1->svt;
                                        c2=c2->svt;
                                        }
       } 
     
    }

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 114
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    Je vous conseille vivement d'utiliser un débogueur lorsque vous avez ce genre de soucis.

    Moi, je ferai le parcours, tant que while(c1->svt != NULL) et non juste c1 != NULL.
    Ce truc element *&debut avoir une référence d'un pointeur, c'est ultra étrange, donc certainement faux.

    Si on enlève juste le dixième élément, pourquoi début pointerai sur le onzième : debut=c2->svt;N'hésitez pas à prendre une feuille de papier et un crayon pour mieux voir ce que fait l'algorithme et ce qu'il faut faire lors de la suppression d'un élément.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre averti
    Homme Profil pro
    Futur Ingenieur en Informatique
    Inscrit en
    Décembre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Futur Ingenieur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2014
    Messages : 20
    Par défaut
    Bonsoir

    concernant le debogueur ,je ne l'ai jamais utilisé ..pouvez-vous m'envoyer un tuto S.V.P .

    pourquoi la référence d'un pointeur element *&debut est fausse pourtant on a resolu pas mal d'exo dans le TD avec
    Pouvez vous m'expliquer ??

    et concernant debut=c2->svt oui j'ai fait une trés grande erreur je l'ai pas remarqué .

    voici mon nouveau code source mais le probleme persiste !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    void supp_elt(element *&debut,int val)
    {
         element * c1,*c2;
         c1 =debut;
         c2=debut;
         while(c1->svt != NULL){
                  if(c1->info==val){
                                   c2=c2->svt;
                                   c1->svt=c2->svt;
     
                                   }
                                   else{
                                        c1=c1->svt;
                                        c2=c2->svt;
                                        }
      } 
     
    }

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 5
    Par défaut
    salam
    je te remarque que vous avez dans votre fonction un seul cas c'est la superssion dans le mileu de la liste
    pense si la tete,dernier element ==valeure entree
    merci

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 114
    Billets dans le blog
    148
    Par défaut
    Oui, il y a (enfin) un tutoriel sur le débogage : http://alexandre-laurent.developpez....e-application/
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Membre chevronné Avatar de pascalCH
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Juillet 2006
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 188
    Par défaut
    Citation Envoyé par Naswd_94 Voir le message
    pourquoi la référence d'un pointeur element *&debut est fausse pourtant on a resolu pas mal d'exo dans le TD avec
    J'avoue que j'aimerai bien voir un exemple (corrigé ... ) qui justifie ce *&debut ....

  7. #7
    Membre averti
    Homme Profil pro
    Futur Ingenieur en Informatique
    Inscrit en
    Décembre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Futur Ingenieur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2014
    Messages : 20
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Oui, il y a (enfin) un tutoriel sur le débogage : http://alexandre-laurent.developpez....e-application/
    je vous remercie , je vais l'essayer et concernant la fonction de suppression le probleme persiste !!!! je suis vraiment perdu O.o

    Citation Envoyé par pascalCH Voir le message
    J'avoue que j'aimerai bien voir un exemple (corrigé ... ) qui justifie ce *&debut ....
    voici un exemple :
    il s'agit de concatener 2 listes chainées sans sacrifier les listes originales .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    #include<iostream>
     
    using namespace std;
     
    struct element 
    {
           int info;
           element *svt;
     
    };
    void cree_liste(element *&D);
    void inser_debut(element*&debut, int x);
    void afficher(element *D);
    void inser_fin(element*&debut, int x);
    void concatener(element *D1,element *D2 ,element *&D3);
     
    int main ()
    {
        element *D1=0,*D2=0,*D3=0;
        cree_liste(D1);
        cout<<"\n";
        afficher(D1);
        cout<<"\n";
        cree_liste(D2); 
        cout<<"\n";
        afficher(D2);
        concatener(D1,D2,D3);
        afficher(D3);
     
     system("pause");
     return 0;
     
     
    } 
     
     
     
     
     
    void inser_debut(element*&debut, int x)
    {
          element *nouveau ;
          nouveau = new element ;
          nouveau->info=x;
     
          debut=nouveau;
    }      
     
     
     void cree_liste(element *&D)
    {
         int i,n,x;
     
         cout <<"donner la taille de votre liste :  \n \t";
         cin >> n;
         for(i=0;i<n;i++)
         {
           cout<<"entrer la valeur: \0.5t ";    
           cin >> x;        
           inser_fin(D,x);
     
         }  
     
    }
     
    void afficher(element *D) 
    {
         element *courant;
         courant =D;
         cout<<"votre liste : \t ";
         while(courant!=NULL)
         {
     
                   cout<< courant->info <<"\t";
     
                   courant=courant->svt;
         }
      cout<<"\n";   
    }  
     
    void inser_fin(element *&debut ,int x)
    {
         element *courant;
         element *nouveau;
         nouveau = new element;
         nouveau->info=x;
         nouveau->svt=0;
         if (debut==0){
                       debut= nouveau;
                       }
         else
         {
          courant = debut ;
                while(courant->svt!=NULL)
                {
                    courant=courant->svt;
                }                                            
           courant->svt = nouveau;
         }  
    }                                
     
    void concatener(element *D1,element *D2 ,element *&D3)
    {
         element *courant;
         courant =D1;
     
         cout <<"\napres la concatenation : " << endl;
         while(courant != NULL)
         {
     
                             inser_fin(D3,courant->info);
                             courant = courant->svt;
         }                    
         courant =D2;
         while (courant != NULL)
         {
               inser_fin(D3,courant->info);
               courant=courant->svt;
         }  
    }

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par pascalCH Voir le message
    J'avoue que j'aimerai bien voir un exemple (corrigé ... ) qui justifie ce *&debut ....
    Parce que c'est le seul moyen de modifier la tête de liste si tu la modifies.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  9. #9
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Parce que si tu avais un type nommé liste, tu voudrais, tu aurais tout à fait envie d'avoir void supp_elt(liste & liste, int index).
    Et que ce liste serait ici typedef element* liste;.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. un problème avec les listes chainées
    Par chmek firas dans le forum Débuter
    Réponses: 4
    Dernier message: 05/05/2012, 06h55
  2. Problème avec les listes chainées
    Par t-mac06 dans le forum Débuter
    Réponses: 12
    Dernier message: 26/01/2012, 20h57
  3. petit problème avec les listes chainées
    Par djinpark1 dans le forum Débuter
    Réponses: 4
    Dernier message: 30/06/2009, 17h11
  4. Problème avec les listes chainées
    Par reeda dans le forum C++
    Réponses: 10
    Dernier message: 23/04/2008, 16h21

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