IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Liste chainée


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 43
    Par défaut Liste chainée
    Salut à tous !


    J'essaie d'écrire un programme qui écrit une phrase à l'envers quand on lui en donne une à l'endroit.
    J'ai décidé d'utiliser les piles implantées par des listes chaînées en C. (Peu importe si ce n'est pas optimale, je veux juste savoir le faire).

    Mon programme comporte une erreur marqué en gras mais je n'arrive pas à la comprendre, pouvez vous m'aider s'il vous plait.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    #include <stdio.h>
    /* Ce programme effectue l'inversion d'une chaîne de caractères.*/
    /* Version liste chainé */
    
    void initialiser_pile();
    int pile_est_vide();
    void empile(char objet);
    char depile();
    int nb_element;
    
    typedef struct{
        char element;
        struct PILE* suiv;
        struct PILE* prec;
    }PILE;
    
    void initialiser_PILE(PILE* l);
    
    struct PILE *pile, *fin_pile;
    
    main(){
        initialiser_pile();
        char caractere = ' ';
        printf("Entrer une chaine de caractere(s) : ");
        while(caractere != '\n'){
            scanf("%c", &caractere);
            empile(caractere);
        }
        while(!pile_est_vide()){
            printf("%c",depile());
        }
    }
    
    void initialiser_PILE(PILE* l){
        l->element = '\n';
        l->prec = NULL;
        l->suiv = NULL;
    }
    
    void initialiser_pile(){
        pile = NULL;
        fin_pile = NULL;
    }
    
    int pile_est_vide(){return !pile;}
    
    void empile(char objet){
            struct PILE *new_maillon;
            new_maillon = (struct PILE *) malloc(sizeof(struct PILE));
    
            initialiser_PILE(new_maillon);
            new_maillon->element = objet;
    
            if(pile == NULL){
                pile = new_maillon;
                fin_pile = new_maillon;
            }
            else{
                    fin_pile->suiv = new_maillon;
    
                    new_maillon->prec = fin_pile;
                    new_maillon->suiv = NULL;
                    new_maillon = fin_pile;
            }
    }

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    Il n'existe aucune struct PILE dans ton code, je suis étonné qu'il n'y ait pas d'erreur avant.
    Si on fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct{
        char element;
        struct PILE* suiv;
        struct PILE* prec;
    }PILE;
    on défini une struct anonyme dont un alias est PILE.
    Il faut faire plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct PILE{
        char element;
        struct PILE* suiv;
        struct PILE* prec;
    }PILE;
    On a alors PILE qui est un alias de struct PILE.

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Suite à l'explication de dalfab, je te dirai aussi qu'il est plus conventionnel de nommer ses structures "s_xxx" et ses types "t_xxx" ; et de laisser les identificateurs "tout majuscule" (c'est à dire que t'as le droit de nommer une variable "nbDeLignes" avec une (ou plusieurs) majuscules mais pas "NB_LIGNES" tout en majuscule) aux macros.

    Ce qui donnerait alors
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct s_pile{
        char element;
        struct s_pile* suiv;
        struct s_pile* prec;
    }t_pile;
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 43
    Par défaut
    Je vous remercie, mon programme avance.

    Je pense que je me suis trompé dans les notations, en effet je voulais bien créer une structure Pile.

    Par contre que signifie une aléa de structure ? Il me semble l'avoir déjà vu en Caml, si je me souviens bien c'était donner un autre nom à un type qui existe déjà mais je peux être à côté de la plaque .

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Citation Envoyé par CechD Voir le message
    Par contre que signifie une aléa de structure ? Il me semble l'avoir déjà vu en Caml, si je me souviens bien c'était donner un autre nom à un type qui existe déjà mais je peux être à côté de la plaque .
    Je pense que tu veux dire un alias de structure. Un alias est créé à l'aide du mot-clef typedef, il permet entre autre de :
    * nommer les types en un seul mot, comme ici pile_t pour struct s_pile
    * définir des types complexes, comme des pointeurs de fonction
    * ou des types plus simples, comme des pointeurs, admissible selon moi pour désigner des Handle.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 28
    Par défaut
    n'oubliez pas de marquer vos problème comme résolu un fois le problème résolu.

Discussions similaires

  1. Réponses: 12
    Dernier message: 08/02/2005, 23h42
  2. Bibliothèque de listes chainées
    Par gege2061 dans le forum C
    Réponses: 29
    Dernier message: 17/12/2004, 20h15
  3. copie de liste chainée
    Par tomsoyer dans le forum C++
    Réponses: 15
    Dernier message: 31/08/2004, 18h20
  4. Trie liste chaine
    Par Congru dans le forum C
    Réponses: 2
    Dernier message: 30/03/2004, 19h05
  5. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 20h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo