Listes doublement chaînées
Bonjour,
en fait j'ai trouvé un exercice sur internet qui demandait d'inverser une liste doublement chaînée en se servant des adresses et non pas des contenus des cellules
voici le programme que j'ai proposé mais je ne sais pourquoi ça ne marche pas quand je fais l'exécution du programme . j'ai vraiment besoin d'aide
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
typedef struct circulaire{
int contenu;
circulaire *pcd;
circulaire *suiv;
};
void inverse(circulaire *d)
{
int m=0; circulaire *c;
while(d!=NULL)
{m++;}
while(d!=NULL)
{d=d->suiv;
}
if(d==NULL)
{ c=d;
int i=0;
while(i!=m)
{
c->suiv=d->pcd;
d->pcd=(d->pcd)->pcd;
c=c->suiv;
printf("%d\t",c->contenu);
i++;
}
}
}
main()
{
circulaire *p,*d;
int i;
for(i=0;i<8;i++)
{
p=(circulaire*) malloc(sizeof(circulaire));
p->contenu=i;
p->suiv=NULL;
p->pcd=(p->pcd)->suiv;
printf("%d\t",p->contenu);
}
inverse(d);
getch();
}
en fait j'ai trouvé un exercice sur internet qui demandait d'inverser une liste doublement chaînée en se servant des adresses et non pas des contenus des cellules
voici le programme que j'ai proposé mais je ne sais pourquoi ça ne marche pas quand je fais l'exécution du programme . j'ai vraiment besoin d'aide
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
typedef struct circulaire{
int contenu;
circulaire *pcd;
circulaire *suiv;
};
void inverse(circulaire *d)
{
int m=0; circulaire *c;
while(d!=NULL)
{m++;}
while(d!=NULL)
{d=d->suiv;
}
if(d==NULL)
{ c=d;
int i=0;
while(i!=m)
{
c->suiv=d->pcd;
d->pcd=(d->pcd)->pcd;
c=c->suiv;
printf("%d\t",c->contenu);
i++;
}
}
}
main()
{
circulaire *p,*d;
int i;
for(i=0;i<8;i++)
{
p=(circulaire*) malloc(sizeof(circulaire));
p->contenu=i;
p->suiv=NULL;
p->pcd=(p->pcd)->suiv;
printf("%d\t",p->contenu);
}
inverse(d);
getch();
}
2 réponses
-
Bonjour,
Tu as du te perdre quelquepart...
Il me paraît évident que cette boucle n'a aucun sens, qu'as tu voulu faire ?
while(d!=NULL)
{m++;}
Je suppose que pour inverser la liste doublement chaînée, il suffit de la parcourir en inversant le précédent et suivant de chaque cellule. Non ? -
au fait je voulais compter le nombre de cellule dont je disposait par cette boucle mais ça me parait logique ce que vous dîtes merci