Création liste chainée en C

Fermé
hamsam2000 Messages postés 1 Date d'inscription mercredi 2 novembre 2022 Statut Membre Dernière intervention 2 novembre 2022 - Modifié le 1 déc. 2022 à 11:33
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 2 nov. 2022 à 18:46

Bonjour,

Pouvez-vous m'aider car mon programme ne crée pas la Liste

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

typedef struct _cellule{
    int a;
    struct _cellule * suiv;
} Cellule;

Cellule *creer_cellule(int a) {
    Cellule *ca = (Cellule *) malloc(sizeof(Cellule));
    ca->a = a;
    ca->suiv = NULL;
}

Cellule *ajouter_en_tete_cellule(Cellule *liste, Cellule *cellule) {
    cellule->suiv = liste;
    return cellule;
}
Cellule *ajouter_en_fin_cellule(Cellule *liste, Cellule *cellule) {
    Cellule *temp = liste;
    if (liste == NULL){
        return cellule;
    }

    temp = cellule;
    while (temp->suiv) {
        temp=temp->suiv;
    }
    temp->suiv = cellule;
    return liste;
}

void ajouter_cellule(int a, Cellule **liste_cellule) {
    /*A Completer*/
    Cellule *cellule = creer_cellule(a);
    *liste_cellule = ajouter_en_fin_cellule(*liste_cellule, cellule);
}

void affiche_cellule(Cellule *cellule) {
    Cellule *temp;
    temp = cellule;
    if (cellule == NULL) {
        printf("la liste est vide");
    } else {
        while(temp != NULL){
            printf("%d-->", temp->a);
            temp = temp->suiv;
        }
    }
}

int main() {
    Cellule*list_cellule = NULL;
    int a;
    for (int i = 0; i < 5; i++) {
        printf("donner une valeur");
        scanf("%d", &a);
        ajouter_cellule(a, &list_cellule);
    }
    affiche_cellule(list_cellule);
    printf("\n");
    return 0;
}
A voir également:

2 réponses

Et comment crée-t'on une liste ?
N'aurais-tu rien oublié dans la fonction qui crée une cellule ?

0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 2 nov. 2022 à 18:47

Comme le suggère Pierrot, il manque return ca; dans la fonction creer_cellule() car elle ne retourne rien en dépit de son prototype.

Ce n'est pas la seule erreur.

Dans cette fonction :

Cellule *ajouter_en_fin_cellule(Cellule *liste, Cellule *cellule) {
    Cellule *temp = liste;
    if (liste==NULL){
        return cellule;
    }
    
    temp= cellule;
    while(temp->suiv){
        temp=temp->suiv;
    }
    temp->suiv=cellule;
    
      return liste;
}

En ligne 7 ci-dessus tu écrases le début de la liste que tu avais mis dans temp, avec la nouvelle cellule, ce qui fait que tu ne parcours jamais la liste en réalité. Tu dois retirer cette ligne.

0