Creation de liste monodirectionelle

debaby -  
nar6du14 Messages postés 506 Statut Membre -
Bonjour, aidez mw les ga

creation d'une liste mono de 10 entiers:
-affichage des elements de la liste;
-trier la liste;
-inserer une valeur VAL de façon que la liste reste trié;
-supprimer tous les enregistrements de valeurs paire;
-afficher la liste trouvée;

1 réponse

  1. nar6du14 Messages postés 506 Statut Membre 64
     
    typedef struct mono mono_t;

    struct mono // une liste monodirectionnelle
    {
    int val;
    struct mono *next;
    };

    void affiche( mono_t *mo ) // affiche les valeurs de la liste
    {
    int i = 1;
    mono_t *tmp = mo;
    for( tmp; tmp != NULL; tmp = tmp->next )
    {
    printf( "mono%d: %d", i, tmp->val );
    i++;
    }
    }

    mono_t *create( int n_elements ) // cree n elements mono_t
    {
    int i = n_elements;
    mono_t *t;
    for( i = 0; i < n_elements; i++ )
    {
    t = ( mono_t * )malloc( sizeof( mono_t ) );
    memset( t, 0, sizeof( mono_t ) );
    t = t->next;
    }
    return t;
    }

    mono_t *t trier_la_liste( mono_t *t )
    {
    mono_t *t_previous = t, *t_next = t, *tmp = NULL;
    while( t_previous != NULL )
    {
    t_next = t_previous->next;
    if( t_previous->val > t_next->val )
    {
    tmp = t_next->next;
    t_previous->next = tmp;
    t_next->next = t_previous;
    }
    if( t_previous->val < t_next->val || t_previous->val == t_next->val )
    {
    t_previous = t_previous->next;
    }
    }
    }

    void add_element( mono_t *t, mono_t *add )
    {
    mono_t *t1 = t, *t2 = NULL;
    for( t1; t1 != NULL; t1 = t1->next )
    {
    if( t1->next = NULL ) t2 = t1;
    }
    t2->next = add;
    trier_la_liste( t );
    }

    void supp_pair( mono_t *t )
    {
    mono_t *t1 = t, *tmp = NULL, t_previous = t;
    for( t1; t1 != NULL; t1 = t1->next )
    {
    if( ( t1->val % 2 ) == 0 )
    {
    tmp = t1->next;
    t_previous->next = tmp;
    free( t1 );
    t1 = t_previous;
    }
    }
    }
    0
    1. nar6du14 Messages postés 506 Statut Membre 64
       
      void supp_pair( mono_t *t )
      {
      mono_t *t1 = t, *tmp = NULL, t_previous = t;
      for( t1; t1 != NULL; t1 = t1->next )
      {
      if( ( t1->val % 2 ) == 0 )
      {
      if( t1 != t_previous )
      {
      tmp = t1->next;
      t_previous->next = tmp;
      free( t1 );
      t1 = t_previous;
      }
      else
      {
      tmp = t1->next;
      free( t1 );
      t1 = t_previous = tmp;
      }
      }
      }
      }


      celle ci est la bone version de la fonction void supp_pair( mono_t * t );
      0