Rechercher : dans
Par :

Liste doublement chainée en C

Dernière réponse le 15 déc 2007 à 17:26:14 Jarod, le 15 nov 2004 à 00:45:31 
 Signaler ce message aux modérateurs

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.

Meilleures réponses pour « Liste doublement chainée en C » dans :
Liste doublement chaînée Voir LISTES DOUBLEMENT CHAINÉES Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la liste IV. Opérations sur les listes doublement chaînées A. Initialisation B. Insertion d'un élément dans la liste 1....
Liste simplement chaînée VoirLISTES SIMPLEMENT CHAINÉES Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la liste IV. Opérations sur les listes chaînées A. Initialisation B. Insertion d'un élément dans la liste 1. Insertion...
Les guillemets, apostrophes et les chaînes VoirComment jouer avec les guillemets et les apostrophes dans les chaînes 1. Préambule 2. Éviter une coupure dans la chaîne 3. Ajouter un guillemet dans la chaîne 3.1 Avec l'apostrophe 3.2 Avec l'ASCII 3.3 Directement 3.3.1 Méthode...
Télécharger Double Driver VoirDouble Driver est un outil qui vous permet de vérifier les pilotes installés sur votre système. Vous pouvez ainsi maintenir les pilotes que vous choisirez, les sauvegarder et imprimer une liste … Double Driver est un outil destiné à rechercher et...
Conteneurs de séquence - list Voirlist Pour utiliser un conteneur list, vous devez inclure le fichier en-tête au début du programme et travailler dans l’espace de noms std. Généralement, la classe list est implémentée sous la forme d’une liste doublement chaînée. Elle fournit...
Les chaînes de caractères en C++ VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...
Langage C - Les listes chaînées VoirLa notion de structure autoréferrentielle Une structure autoréferrentielle (parfois appelée structure récursive) correspond à une structure dont au moins un des champs contient un pointeur vers une structure de même type. De cette façon on crée...

1

maily, le 15 nov 2004 à 09:34:57

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

Répondre à maily

2

Jarod, le 15 nov 2004 à 12:35:52
  • +1

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

Répondre à Jarod

3

maily, le 15 nov 2004 à 21:51:03
  • +1

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

Répondre à maily

4

de passage..., le 16 nov 2004 à 01:34:43

#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);
}

Répondre à de passage...

6

rym, le 15 déc 2007 à 17:08:13

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.

Répondre à rym

7

 lami20j, le 15 déc 2007 à 17:26:14

Salut,

regarde ici cours file, piles, listes
lami20j

Répondre à lami20j