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 :

Question sur les liste doublement chainée


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 10
    Points : 13
    Points
    13
    Par défaut Question sur les liste doublement chainée
    Bonjour tt le monde alors j'ai besoin d'aide pour repondre a la question suivante :

    Ecrire la fonction inserer_avant qui insere dans une liste doublement chainée LD , un entier e avant un noeud d'adresse pN

    avec cette definition pour une liste doublement chainée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    typedef struct celluleD {
    	struct celluleD *precedent;
    	struct celluleD *suivant;
    	Element valeur;
    } CelluleD;
     
    typedef CelluleD *ListeD;

    Voici la fonction que j'ai rédiger et j'aimerais savoir si il est correcte :

    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
     
     
    ListeD inserer_avant(ListeD LD, Element e,ListeD pN){
    	ListeD LDE=(ListeD*)malloc(sizeof(CelluleD));
     
            //intialisation de la cellule a inserer
    	lde->valeur=e;
    	lde->suivant=NULL;
    	lde->precedent=NULL;
     
    	ListeD temp=pN;
     
            //traitement pour inserer avant pN
    	temp=pN->precedent;
    	pN->precedent=lde;
    	lde->suivant=pN;
    	lde->precedent=temp;
     
            return LD;
    }
    Merci d'avance pour vos réponse !

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    Plusieurs remarques :
    • Cacher un pointeur avec un typedef bonjour les ennuis typedef CelluleD *ListeD;
    • Il n'est pas nécessaire de caster avec la fonction malloc (ListeD LDE=(ListeD*)malloc(sizeof(CelluleD))
    • Il y a une erreur de typographie. Tu initialises un pointeur LDE et tu utilises un pointeur lde !
    • Tu initialises temp=pN; puis dans la foulée tu fais temp=pN->precedent;. Quel intérêt ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 10
    Points : 13
    Points
    13
    Par défaut
    C'est vrai je viens de remarquer oui le deuxieme LDE doit etre en majiscule et oui comme tu dis la premiere initialisation et inutile , cependant est ce que le traitement que j'ai fais repond a la question ?

    Et pour le typedef pour cacher un pointeur dois je ne pas le faire et utiliser CelluleD *pointeur ?

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Oui ton traitement semble correcte.

    Pour les typedef effectivement ne cache pas les pointeurs.

    Imagine toi reprendre le code d’un autre codeur avec plusieurs milliers de lignes de code. Tu vas vite t'arracher Les cheveux si les pointeurs sont cachés. Quand je vois CellluleD *cell; je sais exactement ce que je manipule.

    Ceci étant dit je précise qu’il n’y a rien d’interdit, du moins tant que le compilateur est d’accord . Ce n’est qu’une règle de bonne pratique.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 10
    Points : 13
    Points
    13
    Par défaut
    D'accord je prend en compte, merci beaucoup pour votre réponse et conseil !

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

Discussions similaires

  1. Question sur les listes doublement chainées.
    Par entropie67 dans le forum C
    Réponses: 2
    Dernier message: 09/02/2015, 15h12
  2. Question sur les listes chainées.
    Par deubelte dans le forum C++
    Réponses: 15
    Dernier message: 18/03/2010, 13h29
  3. Butte sur un code sur les listes doublement chainées
    Par minibus dans le forum Débuter
    Réponses: 2
    Dernier message: 05/08/2009, 11h35
  4. Problème sur les listes doublement chainée
    Par Traouspont dans le forum C
    Réponses: 5
    Dernier message: 05/01/2007, 12h02
  5. des questions sur les listes chainées
    Par hunter99 dans le forum C
    Réponses: 13
    Dernier message: 05/12/2006, 22h51

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