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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 : 46
    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 : 68
    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

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