Ajout d'un element à la fin d'une liste chainée

cs_beatkof Messages postés 1 Date d'inscription dimanche 5 avril 2009 Statut Membre Dernière intervention 24 avril 2009 - 24 avril 2009 à 00:29
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 - 24 avril 2009 à 09:50
bonsoir je voudrai faire une fonction qui ajout un element à la fion d'une liste chainée et je n'y arrive pas voila ma fonction:
#include <stdio.h>
#include <stdlib.h>
struct chaine {
int valeur;
struct chaine*suivant;
};
typedef struct chaine*liste;
void inserer_fin (liste l, int b);
main ()
{liste l; liste p; int a;
do{
printf ("Entrer 1 entier \n");
scanf ("%d ", &a);
p=(liste)malloc(sizeof(struct chaine));
p->valeur =a;
p-> suivant = l;
l=p;
}
while (a!=0);
free (p);
inserer_fin (l,3);
}
void inserer_fin (liste l, int b)
{liste h;
liste g;
h-> valeur = b;
g=l;
while (g!=NULL){
g=g->suivant;
}
h=(liste) malloc (sizeof (struct chaine));
g=(liste) malloc (sizeof (struct chaine));
g=h;
g->suivant = h->suivant;
l=g;
free(h);
free(g);
}

merci pour votre aide


beatkof

1 réponse

TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
24 avril 2009 à 09:50
Salut,

Voici une petite version corrigée de ton code, en espérant que tu comprenne tes erreurs et que ça t'aide a mieux comprendre le principe des listes chaînées.

#include <stdio.h>
#include <stdlib.h>

typedef struct          s_liste
{
  int                   valeur;
  struct s_liste        *suivant;
}                       t_liste;

t_liste         *inserer_fin(t_liste *debut, int valeur)
{
  t_liste       *nouveau;
  t_liste       *elem;
  if ((nouveau malloc(sizeof(*nouveau))) NULL)
    return debut;
  nouveau->valeur = valeur;
  nouveau->suivant = NULL;
  if (debut == NULL)
    return nouveau;
  elem = debut;
  while (elem->suivant != NULL)
    elem = elem->suivant;
  elem->suivant = nouveau;
  return debut;
}

void            free_liste(t_liste *debut)
{
  if (debut != NULL)
    {
      free_liste(debut->suivant);
      free(debut);
    }
}

void            affiche_liste(t_liste *debut)
{
  int           cnt = 1;

  if (debut != NULL)
    {
      while (debut != NULL)
        {
          printf("Element %d : %d\n", cnt++, debut->valeur);
          debut = debut->suivant;
        }
    }
}

int             main(void)
{
  t_liste       *liste = NULL;
  int           a;

  do
    {
      printf ("Entrez un entier\n");
      scanf ("%d", &a);
      if (a != 0)
    liste = inserer_fin(liste, a);
    }
  while (a != 0);
  affiche_liste(liste);
  free_liste(liste);
  return 0;
}
0
Rejoignez-nous