Listes chainees

Fermé
flash109 Messages postés 90 Date d'inscription jeudi 27 février 2003 Statut Membre Dernière intervention 6 juillet 2005 - 21 déc. 2004 à 12:04
Ravachol Messages postés 560 Date d'inscription vendredi 5 mars 2004 Statut Membre Dernière intervention 30 octobre 2005 - 21 déc. 2004 à 21:43
Bonjour,

J’essaye de comprendre comment marche les listes chaînées en langage C. J’ai fait un petit programme mais il ne marche pas et je vois pas ou est l’erreur. Si elle saute aux yeux de l’un d’ente vous ça serait cool.

Merci.


//definition.h

typedef struct liste *ptr_liste;

typedef struct liste
{
double info;
ptr_liste suivant;
}liste;




//main.c

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

int main(void)
{
ptr_liste L1=NULL;
ptr_liste courant=NULL;
L1 = (ptr_liste)malloc (sizeof(liste));
courant=L1;
courant->suivant=NULL;
courant=courant->suivant;
courant=(ptr_liste)malloc (sizeof(liste));
courant->suivant=NULL;

}

3 réponses

maily Messages postés 7556 Date d'inscription lundi 26 juin 2000 Statut Contributeur Dernière intervention 23 juin 2023 453
21 déc. 2004 à 12:20
bonjour!!

typedef struct liste
{
double info;
ptr_liste * suivant;
}liste; 


Là, il faut que tu mettes un pointeur sur le suivant!! sinon, ce n'est pas une liste chainée!! ;-)

Maily :-))))
ragondin, va au coin!
0
flash109 Messages postés 90 Date d'inscription jeudi 27 février 2003 Statut Membre Dernière intervention 6 juillet 2005 7
21 déc. 2004 à 15:51
Merci de ton aide ça marche.
Bonne après midi.
0
flash109 Messages postés 90 Date d'inscription jeudi 27 février 2003 Statut Membre Dernière intervention 6 juillet 2005 7
21 déc. 2004 à 18:55
J'essaye maintenant de passer une liste chainée en paramétre d'entrée sortie mais la ça bug.
Si vous voyez encore un petite erreur ça serais cool.
Merci.


//definition.h

typedef struct liste *ptr_liste;

typedef struct liste
{
long info;
ptr_liste *suivant;
}liste;


//main.c

#include <stdio.h>
#include <stdlib.h>
#include "definition.h"
#include "fonction1.h"


int main(void)
{
ptr_liste L1=NULL;
ptr_liste courant=NULL;
fonction1(&L1);
courant=L1;
printf("%ld\n",courant->info);

}


//fonction1.c
#include <stdio.h>
#include "definition.h"


void fonction1 (ptr_liste *L1)
{
ptr_liste courant=NULL;
texte = (ptr_liste)malloc (sizeof(liste));
courant=L1;
courant->suivant=NULL;
courant->info=1;
courant->suivant=(ptr_liste)malloc (sizeof(liste));
courant=courant->suivant;
courant->info=2;
courant->suivant=NULL;
}
0
Ravachol Messages postés 560 Date d'inscription vendredi 5 mars 2004 Statut Membre Dernière intervention 30 octobre 2005 120
21 déc. 2004 à 21:43
Salut,
ptr_liste étant un pointeur sur une liste, par rapport à la suite de ton code suivant ne doit pas être déclaré avec un * car dans ce cas tu te retrouves avec un pointeur de pointeur sur une liste.
typedef struct liste
{
  long info;
  ptr_liste suivant;
}liste;

D'où sort texte ? ;-)
Tu as, à juste raison, déclaré L1 comme une adresse d'adresse de liste mais tu ne lui affectes jamais l'adresse de la structure que tu créer dans la fonction.
void fonction1 (ptr_liste *L1)
{
  ptr_liste courant=NULL;
  courant = (ptr_liste)malloc (sizeof(liste));
  *L1=courant;
  courant->suivant=NULL;
  courant->info=1;
  courant->suivant=(ptr_liste)malloc (sizeof(liste));
  courant=courant->suivant;
  courant->info=2;
  courant->suivant=NULL;

}

La petite modif dans le printf devrais permettre de constater le bon fonctionnement.
int main(void)
{
  ptr_liste L1=NULL;
  ptr_liste courant=NULL;
  fonction1(&L1);
  courant=L1;
  printf("%ld : %ld\n",courant->info, courant->suivant->info);
}

A++

C'est pas parce qu'ils sont nombreux à avoir tort
qu'ils ont raison! (COLUCHE)
0