Liste doublement chainée en C
Jarod
-
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
Bonjour à tous,
j'ai défini une liste chainée bidirectionnelle avc
typedef struct liste
{
struct liste *suivant;
struct liste *precedent;
int valeur;
}LISTE;
g une fonction insertion() ki insert des valeurs au fur et a mesure ds ma liste chainée, avc une allocation dynamique.
Puis apres je voudrai afficher ma liste ds l'ordre inverse(c'est a dire afficher la derniere valeur entrer jusqu'a la premiere) en me servant de *precedent. mais je n'y arrive pas.
Pouvez-vous m'aider svp à écrire la fonction insertion et d'affichage afin de permettre d'afficher dans l'ordre inverse?
Merci d'avance.
Cordialement.
j'ai défini une liste chainée bidirectionnelle avc
typedef struct liste
{
struct liste *suivant;
struct liste *precedent;
int valeur;
}LISTE;
g une fonction insertion() ki insert des valeurs au fur et a mesure ds ma liste chainée, avc une allocation dynamique.
Puis apres je voudrai afficher ma liste ds l'ordre inverse(c'est a dire afficher la derniere valeur entrer jusqu'a la premiere) en me servant de *precedent. mais je n'y arrive pas.
Pouvez-vous m'aider svp à écrire la fonction insertion et d'affichage afin de permettre d'afficher dans l'ordre inverse?
Merci d'avance.
Cordialement.
A voir également:
- Listes doublement chainees en c
- Liste déroulante en cascade - Guide
- Listes déroulantes excel - Guide
- Comment mettre sa liste d'amis en privé sur facebook - Guide
- Photo en double - Guide
- Gertrude a préparé la liste des affaires à prendre pour l'excursion. juliette a modifié cette liste en utilisant le mode suivi des modifications proposé par le traitement de texte. - Guide
5 réponses
Je dirais qu'il faut parcourir 2 fois la liste chainée... ce n'est pas très pratique, mais bon, il n'y a que ça à mon avis!
Maily :-))))
Boumj'chtattrape
void affichageFin (LISTE *fin) { LISTE *p; LISTE * q; p=fin; while (p != NULL) { q=p; p = p->suivant; } while(q!=NULL){ p=q; q=q->precedent; printf("%d\n", p->valeur); } }
Maily :-))))
Boumj'chtattrape
voila le code ki me permet d'inserer des valeur en queue de chaine, et de les afficherdu debut à la fin. Pouvez vous m'aider a les afficher de la fin de la chine jusqu'au debut merci.
#include <stdio.h> #include <stdlib.h> typedef struct liste { struct liste *suivant; struct liste *precedent; int valeur; }LISTE; void affichage (LISTE *fin) { LISTE *p; p=fin; while (p != NULL) { printf ("%d\n", p->valeur); p = p->suivant; } } LISTE *insertion (int valeur, LISTE *p) { LISTE *nouveau; p->precedent = p->suivant; nouveau = malloc(sizeof(LISTE)); // printf("%d,%d",p->precedent,p->suivant); p->suivant = nouveau; nouveau->suivant=NULL; nouveau->valeur = valeur; return nouveau; } int main () { int i, n; LISTE *tete, *p; printf ("Taille de la liste:"); scanf ("%d", &n); p = (LISTE*) &tete; for (i=1; i<=n; i++) { p = insertion (i*i, p); } affichage(tete); }
#include <stdio.h> #include <stdlib.h> typedef struct liste
{
struct liste *suivant;
struct liste *precedent;
int valeur;
}LISTE;
// tu peux utiliser le paramètre "alafin" dans la procédure
// car tu ne modifies que la valeur locale (une copie sur la
// pile du pointeur "p" passé en paramètre)
void affichageFin (LISTE *alafin)
{
while (alafin != NULL)
{
printf("%d\n",alafin->valeur);
alafin=alafin->precedent;
}
}
void affichage (LISTE *fin)
{
LISTE *p;
p=fin;
while (p != NULL)
{
printf ("%d\n", p->valeur);
p = p->suivant;
}
}
LISTE *insertion (int valeur, LISTE *p)
{
LISTE *nouveau;
p->precedent = p->suivant;
nouveau = malloc(sizeof(LISTE));
if (nouveau != NULL)
{
// on vérifie tjs un pointeur alloué!!!!
// printf("%d,%d",p->precedent,p->suivant);
p->suivant = nouveau;
nouveau->suivant=NULL;
nouveau->valeur = valeur;
}
return nouveau;
}
int main ()
{
int i, n;
LISTE *tete, *p; /* *p est en fait ta fin de liste */
printf ("Taille de la liste:");
scanf ("%d", &n);
p = (LISTE*) &tete; for (i=1; i<=n; i++)
{
p = insertion (i*i, p);
}
affichage(tete);
affichagefin(p);
}
{
struct liste *suivant;
struct liste *precedent;
int valeur;
}LISTE;
// tu peux utiliser le paramètre "alafin" dans la procédure
// car tu ne modifies que la valeur locale (une copie sur la
// pile du pointeur "p" passé en paramètre)
void affichageFin (LISTE *alafin)
{
while (alafin != NULL)
{
printf("%d\n",alafin->valeur);
alafin=alafin->precedent;
}
}
void affichage (LISTE *fin)
{
LISTE *p;
p=fin;
while (p != NULL)
{
printf ("%d\n", p->valeur);
p = p->suivant;
}
}
LISTE *insertion (int valeur, LISTE *p)
{
LISTE *nouveau;
p->precedent = p->suivant;
nouveau = malloc(sizeof(LISTE));
if (nouveau != NULL)
{
// on vérifie tjs un pointeur alloué!!!!
// printf("%d,%d",p->precedent,p->suivant);
p->suivant = nouveau;
nouveau->suivant=NULL;
nouveau->valeur = valeur;
}
return nouveau;
}
int main ()
{
int i, n;
LISTE *tete, *p; /* *p est en fait ta fin de liste */
printf ("Taille de la liste:");
scanf ("%d", &n);
p = (LISTE*) &tete; for (i=1; i<=n; i++)
{
p = insertion (i*i, p);
}
affichage(tete);
affichagefin(p);
}
Bonjour!
Pourrais tu mettre le code déjà écrit qu'on puisse partir d'une base s'il te plait? Comme ça, on ira plus vite pour t'aider!
;-)
Maily :-))))
Boumj'chtattrape
Pourrais tu mettre le code déjà écrit qu'on puisse partir d'une base s'il te plait? Comme ça, on ira plus vite pour t'aider!
;-)
Maily :-))))
Boumj'chtattrape
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question