Problème ordre d'une liste
Bonsoir,
Voila j'ai un soucis lors de l'ordre de lecture d'une liste que j'ai écrite dans un fichier. Par exemple j'écris la liste suivante dans mon fichier:
('c', 2) ('u', 2) ('o', 2)
Puis lors de la lecture la liste que je lis est:
('c', 2), ('o', 2), ('u', 2)
Pourtant je lis dans le bon ordre je ne comprend vraiment pas pourquoi...
Voici les 3 fonctions que j'utilise pour ceci:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| void ecrireLst(FILE *f, liste l)
{
while (l != NULL)
{
if (fwrite(&l->data.element->data, sizeof l->data.element->data, 1, f) != 1)
{
fputs("ecrireLst: Echec d'ecriture du char", stderr);
exit(1);
}
if (fwrite(&l->data.poids, sizeof l->data.poids, 1, f) != 1)
{
fputs("ecrireLst: Echec d'ecriture du int", stderr);
exit(1);
}
l = l->suivant;
}
return;
} |
Code:
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
| liste lireLst(FILE *f, size_t n)
{
liste res = NULL;
size_t i = 0;
char c;
int nb;
arbre a;
arbrepoids ap;
for ( ; i < n; i++)
{
if (fread(&c, sizeof c, 1, f) != 1)
{
libere_listeEntiere(&res);
fputs("lireLst: Echec de lecture du char", stderr);
exit(1);
}
if (fread(&nb, sizeof nb, 1, f) != 1)
{
libere_listeEntiere(&res);
fputs("lireLst: Echec de lecture du int", stderr);
exit(1);
}
a = feuille(c);
ap.element = a;
ap.poids = nb;
res = creer_liste(ap, res);
}
return res;
} |
Code:
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
| liste creer_liste (arbrepoids e, liste l)
{
/* Allocation memoire */
liste ma_liste = malloc (sizeof (*ma_liste));
if (ma_liste)
{
liste ptr_l = l;
ma_liste->data = e;
ma_liste->suivant = NULL;
/* Cas de l'insertion dans une liste nulle */
if (l == NULL)
{
return ma_liste;
}
/* Cas de l'insertion en tete de liste */
if (ma_liste->data.poids < ptr_l->data.poids)
{
ma_liste->suivant = ptr_l;
return ma_liste;
}
/* Cas autres */
while (ptr_l->suivant != NULL && ptr_l->suivant->data.poids < ma_liste->data.poids)
{
ptr_l = ptr_l->suivant;
}
/* Insertion apres */
ma_liste->suivant = ptr_l->suivant;
ptr_l->suivant = ma_liste;
return l;
}
else
{
fprintf (stderr, "creer_liste : erreur, probleme d'allocation memoire.\n");
exit (1);
}
return NULL;
} |
N'hésitez pas à me demander d'autre partie de code si cela peut mieux vous aider;) Merci :)