Menu

Liste chaînée [Fermé]

-
boujour!

J'ai commence à compiler une programme avec Dev-C++ en liste chaînée ça ne marche pas, je ne sais pas si mon test code à une erreur de syntaxe ou bien que j'ai oublié quelque bibliothèque standard dans mon code. J'attends vos réponses. Voi le code :

#include <stdio.h>
#include <stdlib.h>
/*#include "list.h"*/

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main (void)
{
struct node *p_head = NULL;

p_head= add_end (p_head, 1);
p_head = add_end (p_head, 2);
p_head = add_end (p_head, 3);
display (p_head);
return 0;

}

Merci
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
8067
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 juillet 2019
397
1
Merci
bonjour, je te suggère de d'abord maîtriser les outils, et donc de pouvoir discerner si tu as une erreur de syntaxe ou pas. peut-être en commençant par des exercices plus simples?

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 54870 internautes nous ont dit merci ce mois-ci

Messages postés
5169
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
18 juillet 2019
785
0
Merci
Bonjour matinot,

On dirait que ton code est tiré de ce tutoriel d'Emmanuel Delahaye, mais sans la définition de la
struct node
et sans les fonctions
add_end()
et
display()
, dont tu trouveras le code là :

https://emmanuel-delahaye.developpez.com/tutoriels/c/listes-chainees-c/

Il suffit d'ajouter le code de ces éléments avant la définition de la fonction
main()
pour que ton exemple simple fonctionne.

Comme indiqué sur cette page, il faudrait ensuite au moins réaliser une fonction s'occupant de libérer la mémoire allouée avec malloc.

Dal
> Pinzou76
Messages postés
727
Date d'inscription
dimanche 17 septembre 2017
Statut
Membre
Dernière intervention
25 février 2019
-
Oui je suis programmer en PHP mais j'ai fait de la structures de données en algorithmique depuis en 2011 maintenant je envie de reprendre la notion de structures de données en langage C. Merci d'avance pour le support que tu vas me donner sur la syntaxe, la structure et aussi le fonctionnement.
Pinzou76
Messages postés
727
Date d'inscription
dimanche 17 septembre 2017
Statut
Membre
Dernière intervention
25 février 2019
68 -
> Pinzou76
Messages postés
727
Date d'inscription
dimanche 17 septembre 2017
Statut
Membre
Dernière intervention
25 février 2019
-
Mille merci!
[Dal]
Messages postés
5169
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
18 juillet 2019
785 -
@Pinzou76: les classes, c'est du C++, les
struct
du C ... ce sont deux langages différents.

A mon sens, les "structures de données" c'est encore autre chose, c'est une façon d'organiser les données. Un tableau en C est une forme de structuration, les listes chaînées en sont une autre, et l'une ou l'autre peuvent utiliser des
struct
.

@matinot: Comme indiqué dans mon message précédent, il suffit d'ajouter à ton code la définition de la
struct node
et des fonctions
add_end()
et
display()
proposées par Emmanuel Delahaye , avant la définition de la fonction
main()
pour que ton exemple simple fonctionne.

Au total, cela donne cela :

#include <stdio.h>
#include <stdlib.h>

struct node
{
    /* données */
    int x;

    /* chainage */
    struct node *p_next;
};

struct node *add_end (struct node *p_head, int value)
{
    /* allocation du nœud */
    struct node *p_new = malloc (sizeof *p_new);

    /* si tout s'est bien passé : */
    if (p_new != NULL)
    {
        /* mise a jour des champs : */

        /* données */
        p_new->x = value;

        /* chaînage par défaut */
        p_new->p_next = NULL;

        /* chaînage */
        if (p_head == NULL)
        {
            /* c'est le premier : */
            p_head = p_new;
        }
        else
        {
            /* on cherche le dernier nœud */
            struct node *p = p_head;

            while (p->p_next != NULL)
            {
                /* pointer sur le suivant */
                p = p->p_next;
            }

            /* modification du chaînage */
            p->p_next = p_new;
        }
    }
    return p_head;
}

void display (struct node *p_head)
{
    struct node *p = p_head;

    while (p != NULL)
    {
        /* afficher les données courantes */
        printf ("%d > ", p->x);

        /* pointer sur le suivant */
        p = p->p_next;
    }
    /* afficher la fin */
    printf ("NIL\n");
}

int main (void)
{
    struct node *p_head = NULL;

    p_head= add_end (p_head, 1);
    p_head = add_end (p_head, 2);
    p_head = add_end (p_head, 3);
    display (p_head);
    return 0;

}

L'exemple est très simplifié et peut t'aider, avec les explications très claires de l'auteur, à comprendre le principe des listes chaînées, puisque c'est ce que tu cherches à mettre en oeuvre.

Sur CCM, tu as :

https://www.commentcamarche.com/faq/7444-liste-simplement-chainee

c'est écrit par lami20j, qui entre d'avantage dans le détail des explications, avec des schémas, des explications progressives et qui récapitule le code complet de l'ensemble à la fin, lequel gère les insertions, retraits, avec la gestion de la mémoire qui va avec, etc.

Les listes chaînées sont un sujet relativement avancé du C. Tu devrais maîtriser la déclaration et l'utilisation des
struct
, des fonctions, des pointeurs et l'allocation mémoire, et les bases du C de façon générale, avant de te lancer là dedans.

Dal
> [Dal]
Messages postés
5169
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
18 juillet 2019
-
Mille merci Mr Dal!