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 :

Les piles : implémentation sous forme de liste chaînée


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2019
    Messages : 6
    Par défaut Les piles : implémentation sous forme de liste chaînée
    salut tout le monde
    j'ai une question à vous demander
    je veux construire une pile et je ne sais pas la différence entre deux écritures ou bien si une d'entre eux et fausse
    voici le premier code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    typedef struct Element Element;
     
    struct Element
    {
        int nombre;
        Element *suivant;
    };
    typedef struct Pile Pile;
     
    struct Pile
    {
        Element *premier;
    };
    et le deuxième:
    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
     
    typedef struct Element Element;
     
    struct Element
    {
        int nombre;
        Element *suivant;
    };
     
    typedef struct Pile *Pile;*
     
    struct Pile
    {
        Element *premier;
    };
    alors mon problème est que je ne sais pas la différence entre avoir un étoile devant pile ou ne pas l'avoir...qu'est ce que ça change dans mon code.
    je suis débutante et nouvelle dans le forum,merci d'avance pour votre aide!!

  2. #2
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2012
    Messages : 7
    Par défaut
    Tout d'abord, il y a une * en trop en fin de ligne 10 du code 2.

    Dans le 1er code, le nouveau type Pile que tu crées est une structure qui te permettra de déclarer une variable de type Pile et faire les opérations suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Pile        maPile;
    Element  mon1erElement;
     
    mon1erElement.nombre = __LINE__;
    mon1erElement.suivant = NULL;
     
    maPile.premier = &mon1erElement;
    Dans le 2ème code, le nouveau type Pile que tu crées est un pointeur sur une structure. Ce qui veut dire que ta variable ne pourra contenir qu'un pointeur(ou l'adresse d'un emplacement mémoire).
    Pour faire les mêmes opérations que ci-dessus, il faudra passer par l'une des 2 possibilité suivantes
    2.1) Allocation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Pile           monPointeurDePile;
    Element     mon1erElement;
     
    mon1erElement.nombre = __LINE__;
    mon1erElement.suivant = NULL;
     
    monPointeurDePile = malloc(sizeof(*monPointeurDePile));
    monPointeurDePile->premier = &mon1erElement;
    2.2) Forcer à spécifier que tu veux utiliser la structure car le nom de ta structure a le même nom ici pour se retrouver dans le 1er code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    struct Pile  maPile;
    Element     mon1erElement;
     
    mon1erElement.nombre = __LINE__;
    mon1erElement.suivant = NULL;
     
    maPile.premier = &mon1erElement;

    Puisque tu es débutante, je te conseille d'utiliser des conventions de nommage et de minimiser le nombre de ligne comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    typedef struct Element_s  // _s pour structure
    {
        int nombre;
        struct Element_s *suivant;  // ici, utilisation d'un pointeur sur la structure en cours création
    }Element_t; //_t pour type
    Ou tout autre convention de ton choix, rien n'est imposé.

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 859
    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 859
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par eva100 Voir le message
    salut tout le monde
    Bonjour

    Citation Envoyé par eva100 Voir le message
    alors mon problème est que je ne sais pas la différence entre avoir un étoile devant pile ou ne pas l'avoir...qu'est ce que ça change dans mon code.
    Dans le premier cas tu définis un type "Pile" qui est un alias de la stucture "Pile" (super déjà de choisir le même nom) tandis que dans le second cas tu définis un type "Pile" qui est un alias d'un pointeur sur la structure "Pile". Autant dans le premier cas tu vas galérer mais tu peux t'en sortir, autant dans le second cas tu vas droit dans le mur. On ne masque jamais un pointeur derrière un nom de type. C'est le meileur moyen de se planter.

    Et concernant les noms, pp25770 t'as conseillé de respecter les règles de nommages conventionnelles ("t" pour "type" et "s" pour "structure"). Je rajouterai juste que le suffixe "_t" est réservé aux types intégrés dans les librairies officielles. Les types que toi tu définis doivent être préfixés par "t_" et non suffixés par "_t"
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    typedef struct s_element {
    	int nombre;
    	struct s_element *suivant;
    } t_element;
     
    typedef struct {
    	t_element *premier;
    } 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]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Retourner les éléments de la table sous forme de liste
    Par lhareen dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 09/09/2014, 11h51
  2. Recuperer les donnees d'une base de donnee sous forme de liste
    Par j-gat dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/11/2010, 03h45
  3. [MySQL] Récupérer les données sous forme de liste déroulante
    Par loopback dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 26/12/2007, 16h10
  4. Récupérer les paramètres "GET" sous forme de String
    Par vanitom dans le forum Langage
    Réponses: 2
    Dernier message: 22/02/2007, 15h00
  5. [PostgreSQL] [PostGreSQL] récupérer les champs booléens sous forme "false" au lieu de "f"
    Par novices dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 10/02/2007, 10h48

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