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 :

Fonction sur les files


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 130
    Par défaut Fonction sur les files
    Bonjour j'essaye de faire un programme qui utilise les listes mais voila un problème ce pose je n'arrive pas supprimer une valeur précise dans la liste voici mon code :
    Code C : 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
     
    //la définition de la liste 
    struct cellule
    {
        int valeur;
        struct cellule * suivant;
    };
    typedef struct cellule Cellule;
    typedef Cellule * Liste;
     
     
     
    fonctionListe Suppr_val(int val, Liste l)  
    //val est la valeur a supprimer et l la liste qui doit contenir cette valeur
    {
        Liste p=l->suivant,prec=l;
        if (Liste_Vide(l))
          l=NULL;
        else
    	{
    	  if (l->valeur==val)
    	    {
    	      prec=l;
    	      l=l->suivant;
    	      free(prec);
    	    }
    	  else
    	    {
    	      while (p)
    	      {
    	          if (p->valeur==val)
                    break;
                  else
                  {
                      prec=p;
                      p=p->suivant;
    		      }
                  if (p!=NULL)
    		      {
                    prec->suivant=p->suivant;
                    free(p);
                    p=NULL;
    		      }
    	      }
    	    }
    	}
          return p;
    }

    Pouvez vous m'aider ou se trouve mon erreur parce que là je suis complétement perdu

  2. #2
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    j' ai modifié quelque lignes dans le code. Je ne l' ai pas testé mais je pense que ça doit marcher.

    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
     
    //la définition de la liste 
    struct cellule
    {
        int valeur;
        struct cellule * suivant;
    };
    typedef struct cellule Cellule;
    typedef Cellule * Liste;
     
     
     
    void Suppr_val(int val, Liste l)  
    //val est la valeur a supprimer et l la liste qui doit contenir cette valeur
    {
     
        if (!Liste_Vide(l))
    	{
    	  if (l->valeur==val)
    	    {
    	      Liste prec=l;
    	      l=l->suivant;
    	      free(prec);
    	    }
    	  else
    	    {   Liste p=l->suivant, prec=l;
    	      while (p)
    	      {
    	          if (p->valeur==val)
                    {
                      prec->suivant=p->suivant;
                      free(p);
                      p=NULL;
                      break;
                    }
                else
                   {
                      prec=p;
                      p=p->suivant;
    		           }
     
    	      }
    	    }
    	}
     
    	// j' ai supprimé la valeur retournée puisque je ne sais pas à quoi ça sert
    }
    Le probleme viens surement du fait que tu as fais
    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
     
    while (p)
    {
       if (p->valeur==val)
          break;
       else
       {
          prec=p;
          p=p->suivant;
       }
       if (p!=NULL)
       {
          prec->suivant=p->suivant;
          free(p);
          p=NULL;
       }
    }
    Le break arrete la boucle et tu n' as pas eu le temps de supprimer l' element en question. Pour que ça puisse marcher, tu dois mettre le if (p!=NULL)... hors de la boucle.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 130
    Par défaut
    merci beaucoup de m'avoir aidé maintenant ça fonctionne

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

Discussions similaires

  1. Recherche fonction sur les listes
    Par becks dans le forum Général Python
    Réponses: 5
    Dernier message: 05/05/2006, 16h11
  2. Fonction sur les chaines
    Par joquetino dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 22/11/2005, 22h31
  3. Fonctions sur les dates
    Par Neuromancien2 dans le forum Oracle
    Réponses: 4
    Dernier message: 12/10/2005, 10h13
  4. Réponses: 2
    Dernier message: 01/05/2004, 21h15
  5. [LG]Symbole # (dièse) et fonctions sur les chaînes
    Par James64 dans le forum Langage
    Réponses: 6
    Dernier message: 24/03/2004, 14h19

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