Liste doublement chainée en C

Jarod -  
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.

5 réponses

maily Messages postés 7556 Date d'inscription   Statut Contributeur Dernière intervention   453
 
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!

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
3
Jarod
 
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); 
}

1
de passage...
 
#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);
}
1
maily Messages postés 7556 Date d'inscription   Statut Contributeur Dernière intervention   453
 
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rym
 
bnjr j' besion de documentaton sur les listes en algorithmique soit cerculaire et bidirectionnelle et chainnée es ce que vous pouvez m'aidée.
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

regarde ici cours file, piles, listes
0