Flux rss
Collection CommentÇaMarche.net
Rechercher : dans
Par :

Liste doublement chainée en C

Jarod, le lundi 15 novembre 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.

1

maily, le lundi 15 novembre 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 lundi 15 novembre 2004 à 12:35:52

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 lundi 15 novembre 2004 à 21:51:03

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 mardi 16 novembre 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 samedi 15 décembre 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 samedi 15 décembre 2007 à 17:26:14

Salut,

regarde ici cours file, piles, listes
lami20j

Répondre à lami20j
Liste doublement chaînée 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... www.commentcamarche.net/faq/sujet-7636-liste-doublement-chainee
Enregistrement d'une liste chainee C++ bonjour, j'ai envie d'enregistrer une liste doublement chainee dans un fichier mais je ne sait comment faire. svp quelqu'un pourrait-il me venir en aide ? Merci . www.commentcamarche.net/forum/affich-461087-enregistrement-d-une-liste-chainee-c
Obtenir une liste de chaine tv numérique bonjour, Ce message pour vous demander comment obtenir une liste de chaine tv numérique. winamp ne fonctionnant pas sous mac, j'utilise vlc. Le problème étant que je ne recois que les chines nationale du neuftv car je n'ai pas de flux réseau pour... www.commentcamarche.net/forum/affich-3130002-obtenir-une-liste-de-chaine-tv-numerique
Liste simplement chaînéeLISTES 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... www.commentcamarche.net/faq/sujet-7444-liste-simplement-chainee
Liste doublement chainée en pascalbonsoir ,svp je veux effectuer l'insertion dans une liste doublement chainee en pascal.cette liste contient un enreigistrement de 3 champs (priorite,identificateur et temp) et on doit inserer selon la priorité en premiere:si elles sont egales on... www.commentcamarche.net/forum/affich-6483378-liste-doublement-chainee-en-pascal
[VS C++ .Net] Liste chaînée (linked list) (Résolu)bonjour, dans un exercice je dois creer une liste chainée d'une classe (acteurs) les classes que j'ai créé sont les suivantes : liste - element - acteurs - listacteurs mon probleme est que je bloque au niveau de la classe listacteurs. Pourriez vous... www.commentcamarche.net/forum/affich-1497421-vs-c-net-liste-chainee-linked-list
LIste circulaire doublement chainee (Résolu)Bonjour, Besoin d'aide pour une demonstration, voila sur le net j'ai trouvé plus d'infos sur la liste doublement chainee, simple.. sauf pour la circulaire qui un peu plus delicate a manier. Le probleme c'est que pour la circulaire on n'a pas de repere... www.commentcamarche.net/forum/affich-4151901-liste-circulaire-doublement-chainee
Les chaînes de caractères en C++Qu'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... www.commentcamarche.net/contents/cpp/cppstring.php3
Langage C - Les chaînes de caractèresQu'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 chaîne... www.commentcamarche.net/contents/c/cstring.php3
Langage C - Les types de donnéesLes types de données Les données manipulées en langage C sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître l'occupation mémoire (le... www.commentcamarche.net/contents/c/ctype.php3