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 :

Liste chainée suppression


Sujet :

C

  1. #1
    Invité
    Invité(e)
    Par défaut Liste chainée suppression
    Bonjour,
    Je travaille actuellement sur les listes chainées en C, cependant je n'arrive pas à supprimer un élément en milieu de liste. Lorsque j'appelle ma fonction, seul un champ de la structure à l'air de disparaitre.
    Voici mon code :
    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
    t_compte* supprimerElement(t_compte *liste, int val)
    {
     
        if(liste == NULL)
            return NULL;
     
     
        if(liste->numeroCompte == val)
        {
            t_compte *tmp = liste->suivant;
            free(liste);
            tmp = supprimerElement(tmp, val);
            return tmp;
        }
        else
        {
            liste->suivant = supprimerElement(liste->suivant, val);
            return liste;
        }
    }
    Quelqu'un pourrait-il me guider ?
    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    Dans le code conditionnel if(liste->numeroCompte == val) il y a un free(liste); qui fait peur .

    Il te faut avant toute élimination du maillon incriminé faire pointer le maillon précédent avec le suivant. Une fois fait tu peux alors supprimer le maillon.
    Tu dois donc te débrouiller pour mémoriser le pointeur du maillon précédemment lu.

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    Utiliser la récursivité pour supprimer un élément de liste est pour le moins original.
    Après suppression de la ligne 12 tout devrait fonctionner.

  4. #4
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 748
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 748
    Par défaut
    Citation Envoyé par dalfab Voir le message
    Utiliser la récursivité pour supprimer un élément de liste est pour le moins original.
    Pas tant que cela : cela me rappelle (ou pas ) les premiers exercices algorithmiques que je faisais à la fac


    Citation Envoyé par dalfab Voir le message
    Après suppression de la ligne 12 tout devrait fonctionner.
    Non , il veut relancer la recherche sur le reste de la liste

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 801
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par foetus Voir le message
    Non , il veut relancer la recherche sur le reste de la liste
    Même comme ça, il y a une espèce de répétition que je ne m'explique pas.
    En effet, si le numéro de compte est égal à val il supprime le maillon puis il relance la recherche dans le reste de la liste ok... mais si le numéro de compte n'est pas égal à val il relance la recherche dans le reste de la liste => dans ce cas, alors si le numéro de compte est égal à val on supprime le maillon puis, dans tous les cas, on relance la recherche dans le reste de la liste quoi.

    Bref un truc de ce style
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (liste->numeroCompte == val) {
    	... (faire tout ce qu'il faut pour raccorder le maillon avant avec le maillon après)...
    	free(liste);
    }
    supprimerElement(liste->suivant, val);
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 10
    Dernier message: 18/09/2007, 14h00
  2. suppression dans une liste chainée
    Par tomtom421 dans le forum C
    Réponses: 8
    Dernier message: 21/04/2007, 16h29
  3. Réponses: 8
    Dernier message: 01/04/2006, 10h10
  4. Réponses: 4
    Dernier message: 26/09/2005, 22h36
  5. liste chainée :suppression milieu par rapport à un caractère
    Par Pouyou le caribou dans le forum C++
    Réponses: 4
    Dernier message: 06/06/2005, 18h49

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