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 chaine simple


Sujet :

C

  1. #1
    Membre averti
    Inscrit en
    Août 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 13
    Par défaut liste chaine simple
    voila j'ai un probleme en liste chaine en langage mon code cet comme suite.
    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
     
    typedef struct liste
    {
      int               id;
      int               pos;
      char  nom_prenom[20];
      struct  liste  *suiv;
    } list;
     
    ////////////////////////////////////
    // Ajoute un maillon en fin de liste
    ////////////////////////////////////
    void Add(list *s, char data[20])
    {
      list  *next;
      int pos;
      pos=0;
      next = s;
      while(next->suiv)
      {
        next = next->suiv;
      }
     
      next->suiv = malloc(sizeof(list));
     
      (next->suiv)->pos = 1;
      (next->suiv)->id = 0;
      strcpy( (next->suiv)->nom_prenom,data);
      (next->suiv)->suiv = NULL;
      pos++;
    }
     
     
     
    /////////////////////////////////
    // Detruit un maillon de la liste
    /////////////////////////////////
    int Delete(list *s, int pos)
    {
      list  *next, *sav;
      int   i;
     
     
      next = s;
      i = 0;
      while(next->suiv && i < pos-1)
      {
        next = next->suiv;
        i++;
      }
     
      if(i == pos-1)
      {
        sav = (next->suiv)->suiv;
        free(next->suiv);
        next->suiv = sav;
     
        return 1;
      }
      else
      {
        return 0;
      }
    }

    pour miux manupile mon application il faut que je trouve un truc pour
    -soit une fonction qui cherche dans la liste a pour parametre (nom_prenom ) et qui routerne un pointeur et son position .
    - soit avoir le tete de la liste pour rendre la recherche souple et simple.



    voila mon fonction de recherche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    pointeur  search( list*tete,char v[20])
     
    {list*p;
    p=tete;
       while ( p!=NULL &&  strcmp(v,p->nom_prenom)
    {
      p=p->suiv;
     
    }
     
    return p;
    }
    donc il faut que je puis avoir identifie le tete de la liste

    evite les erreur de frapp

    [-mod- ajout des balises code]

  2. #2
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut


    Et la question est... ?

  3. #3
    Membre averti
    Inscrit en
    Août 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 13
    Par défaut elbaz
    la question est comment je peu avoir le tete de ma liste ?
    la 2 eme comment avoir une fonction qui retourne le pos et le pointeur sur cette element en entrant la valeur nom_prenom et le tete ?

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par el baz
    la question est comment je peu avoir le tete de ma liste ?
    la 2 eme comment avoir une fonction qui retourne le pos et le pointeur sur cette element en entrant la valeur nom_prenom et le tete ?
    http://emmanuel-delahaye.developpez....s_chainees.htm

  5. #5
    Membre averti
    Inscrit en
    Août 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 13
    Par défaut elbaz
    merci..!!!!

  6. #6
    Membre averti
    Inscrit en
    Août 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 13
    Par défaut el baz
    slt c encore moi,

    voila mon code compli .

    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<stdio.h>
    #include<conio.h>
    #include<string.h>
    #include<malloc.h>
    #include <stdlib.h>
     
    typedef struct node
    {
       /* donnees */
       int x;
     char nom_prenom[20];
       /* chainage */
       struct node *p_next;
    }nodes;
     
    //fonction d'additition
     
    struct node *add_end (struct node *p_head, char v[20])
    {
       /* allocation du noeud */
       struct node *p_new = malloc (sizeof *p_new);
     
       /* si tout s'est bien passe : */
       if (p_new != NULL)
       {
          /* mise a jour des champs : */
     
          /* donnees */
          p_new->x = 10;
          strcpy(p_new->nom_prenom , v);
          /* chainage par defaut */
          p_new->p_next = NULL;
     
          /* chainage */
          if (p_head == NULL)
          {
             /* c'est le premier : */
             p_head = p_new;
          }
          else
          {
             /* on cherche le dernier noeud */
             struct node *p = p_head;
     
             while (p->p_next != NULL)
             {
                /* pointer sur le suivant */
                p = p->p_next;
             }
     
             /* modification du chainage */
             p->p_next = p_new;
          }
       }
       return p_head;
    }
    //fonction de print
     
    void display (struct node *p_head)
    {
       struct node *p = p_head;
     
       while (p != NULL)
       {
          /* afficher les données courantes */
          printf ("%s --> %d \n",p->nom_prenom ,p->x);
     
          /* pointer sur le suivant */
          p = p->p_next;
       }
       /* afficher la fin */
       printf ("NULL\n");
    }
    //fonction delete;
     
    int dellete(struct node*p_head,char v[20])
     
    { int pos;
         struct node*p=p_head;
         struct node*sav;
         struct node*tmp;
     
      while ( p->p_next!=NULL && !strcmp(p->nom_prenom,v)!=1)
      { 
        p=p->p_next;
        tmp=p;
      }
     
     
       sav = p->p_next;
       free(p->p_next);
       p->p_next = sav;
     
     
    }
     
     
     
     
    //fonction principale
    int main (void)
    {int l=0;
    char i[20];
       struct node *p_head = NULL;
    while( l <3 )
    { printf("entre element ");
    scanf("%s",&i);
       p_head = add_end (p_head, i);
    l++;}
    printf("le nom_prenom-->nombred'abcence\n");   
     display (p_head);
     
    dellete(p_head ,"aziz");
     display (p_head);
     
       getch();
       return 0;
    }


    mais apres compilation j'ai une resultat pas convenable !


    voila la resultat ...


    entre element az
    entre element aziz
    entre element azz
    le nom_prenom-->nombred'abcence
    az --> 10
    aziz --> 10
    azz --> 10
    NULL
    az --> 10
    aziz --> 10
    azz --> 0
    NULL

  7. #7
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921

  8. #8
    Membre averti
    Inscrit en
    Août 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 13
    Par défaut el baz
    mon probleme si lors ce ke je voulia supprime un maillon il ne se supprime pas
    je pense que j'ai un probleme avec la fonction free
    j'espire ke je mon probleme est assi clair

    ok

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par el baz
    mon probleme si lors ce ke je voulia supprime un maillon il ne se supprime pas
    je pense que j'ai un probleme avec la fonction free
    Pour la suppression, il faut réfléchir à la manière de modifier la chaine, puis de libérer le maillon. Au besoin faire un dessin avec des flèches étapes par étapes.

    Penser à ne pas libérer trop tôt, sinon les données ne sont plus accessibles.

Discussions similaires

  1. Liste chainée simple
    Par boula dans le forum C
    Réponses: 9
    Dernier message: 23/05/2008, 22h32
  2. Liste chaine simple
    Par boula dans le forum C
    Réponses: 6
    Dernier message: 21/05/2008, 11h10
  3. [Liste Chainée Simple]_Sentinelle_
    Par orfix dans le forum C
    Réponses: 28
    Dernier message: 04/03/2008, 22h21
  4. Liste chainée simple
    Par BatuBou dans le forum C
    Réponses: 6
    Dernier message: 21/01/2008, 11h35
  5. un probléme de liste chainé simple
    Par seifdev dans le forum C
    Réponses: 15
    Dernier message: 02/04/2007, 16h36

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