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 :

probleme de liste doublement chainée


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    ecole superieure de technologie
    Inscrit en
    Novembre 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Maroc

    Informations professionnelles :
    Activité : ecole superieure de technologie
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 34
    Points : 24
    Points
    24
    Par défaut probleme de liste doublement chainée
    j'ai un probleme
    au niveau de la fonction de la suppression quand je mets le *l dans la prototype de la fonction la suppression s'effectue d'un maniere parfaite .
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    element *suppression(element *l){
    mais quand je ne le mets pas dans le prototype
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    element *suppression(){

    le programme se bloque
    Code C : 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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    #include<stdio.h>
    #include<conio.h>
    #include<stdlib.h>
    #include<string.h>
    // declaration des structures ;
    typedef struct etudiant{
            char nom[30] ;
            char prenom[30] ;
            int age ;
            int note ;
            }etudiant ;
    typedef struct element{
            etudiant val ;
            struct element *next ;
            struct element *precedent ;
            }element ;
    // fonction d'ajout d'un seul element
    element *ajout(){
            element *l ;
            l=(element *)malloc(sizeof(element));
            printf("\n");
            printf("****..entrez le nom de cet etudiant..****");
            scanf("%s",l->val.nom) ;
            printf("\n");
            printf("****..entrez le prenom de cet etudiant..****");
            scanf("%s",l->val.prenom);
            printf("\n");
            printf("****..entrez l'age de cet etudiant..****");
            scanf("%d",&l->val.age);
            printf("\n");
            printf("****..entrez la note de cet etudiant..****");
            scanf("%d",&l->val.note);
            return l ;
            }
    // fonction de remplissage 
    element *remplissage(){
            element *l , *p , *s ;
            int i , n ;
            printf("\n");
            printf("****..entrez le nombre d'etudiants..****");
            scanf("%d",&n);
            l=ajout();
            l->precedent=NULL ;
            l->next=NULL ;
            s=l ;
            for(i=0 ; i<n-1 ; i++)
            {
                    p=ajout();
                    s->next=p ;
                    p->precedent=s ;
                    p->next=NULL ;
                    s=s->next ;
                    }
            return l ;
            }
    element *suppression(element *l){
              element *p , *s  ;
              int x ;
              char nnom[30] ;
              printf("\n");
              printf("press sur 1 pour supprimer le premier etudiant de la liste ");
              printf("\n");
              printf("press sur 2 pour supprimer un etudiant au milieu de la liste ");
              printf("\n");
              printf("press sur 3 pour supprimer un etudiant a la fin de la liste ");
              printf("\n");
              printf("****//entrez votre choix\\****");
              scanf("%d",&x);
              printf("\n");
     
              switch(x){
                       case 1:
                            s=l->next ;
                            free(l);
                            l=s ;
                            l->precedent=NULL ;
                            break ;
                       case 2:
                            printf("***// quel etudiant voulez vous supprimer (entrez son nom) \\***");
                            scanf("%s",nnom);
                            p=l ;
                            while(p!=NULL)
                            {
                                          if(strcmp(p->next->val.nom , nnom)==0)
                                          {
                                                               break ;
                                                               }
                                          p=p->next ;
                                          }
                            s=p->next->next ;
                            free(p->next);
                            p->next=s ;
                            s->precedent=p ;
     
                            break ;
                       case 3:
                            p=l ;
                            while(p->next!=NULL)
                            {
                                                p=p->next ;
                                                }
                            s=p->precedent ;
                            free(p);
                            s->next=NULL ;
     
                            break ;
     
                            }
                             return l ;
                            }
    //fonction pour l'affichage 
    void affichage (element *l){
         element *p ;
         p=l ;
         while(p!=NULL)
         {
                       printf("\n");
                       printf("le nom de l'etudiant est %s", p->val.nom);
                        printf("\n");
                       printf("le prenom de l'etudiant est %s", p->val.prenom);
                        printf("\n");
                       printf("l'age de l'etudiant est %d", p->val.age);
                        printf("\n");
                       printf("la note de l'etudiant est %d", p->val.note);
                       printf("\n");
                       p=p->next ;
                       }
                       }
    int main(){
        element *l ;
        l=remplissage();
        l=suppression(l);
        affichage(l);
        getch();
    }
    aidez moi s'ils vous plait et merci

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Pourquoi veux-tu enlever element *l du prototype de element *suppression(element *l) ?

    Il faut bien que ta fonction de suppression connaisse un élément de ta liste pour pouvoir la parcourir et supprimer l'élément à supprimer.

  3. #3
    Membre à l'essai
    Homme Profil pro
    ecole superieure de technologie
    Inscrit en
    Novembre 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Maroc

    Informations professionnelles :
    Activité : ecole superieure de technologie
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 34
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Pourquoi veux-tu enlever element *l du prototype de element *suppression(element *l) ?

    Il faut bien que ta fonction de suppression connaisse un élément de ta liste pour pouvoir la parcourir et supprimer l'élément à supprimer.
    pour moi le probleme ne rèside pas au niveau de volonté (je veux ou je ne veux pas) mais je veux juste comprendre pourquoi qand j'utilise un prototype vide ca se compile pas et merci d'avance

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    le programme se bloque
    ca se compile pas
    Si cela ne compile pas, tu as une erreur lors de la compilation, pas lors de l'exécution de ton programme, tu ne peux donc pas dire que ton "programme se bloque".

    Ensuite, si tu veux comprendre une erreur de compilation, il faudrait au moins nous donner cette erreur qu'on puisse te dire sa signification.

    Si tu enlève element *l du prototype, ta fonction ne connaît pas de variable element *l or tu en utilise une à l'intérieur même de cette fonction.

  5. #5
    Membre à l'essai
    Homme Profil pro
    ecole superieure de technologie
    Inscrit en
    Novembre 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Maroc

    Informations professionnelles :
    Activité : ecole superieure de technologie
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 34
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Si cela ne compile pas, tu as une erreur lors de la compilation, pas lors de l'exécution de ton programme, tu ne peux donc pas dire que ton "programme se bloque".

    Ensuite, si tu veux comprendre une erreur de compilation, il faudrait au moins nous donner cette erreur qu'on puisse te dire sa signification.

    Si tu enlève element *l du prototype, ta fonction ne connaît pas de variable element *l or tu en utilise une à l'intérieur même de cette fonction.
    pardon le probleme reside au niveau de l'execution

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Pour moi le problème est bien avant la compilation ou l'exécution..

    D'après le prototype, je dirais que tu veux supprimer un élément, et en retourner un autre
    - comment deviner l'élément à supprimer ?
    - comment deviner dans quelle liste le supprimer ?

    A part user de globale et faire un programme qui ne saura supprimer qu'un élément donné d'une liste donnée, définis à la compilation et extrêmement horrible comme solution, je ne vois pas comment on peut imaginer avoir une telle fonction sans argument, et je dirais même sans 2 arguments.
    Dans le cas où il s'agit de la suppression de la liste complète, 1 argument, mais je ne comprends pas ce que fait un élément en retour.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 13
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Oui je pense qu'on verrait un peu plus clair si tu donnais le code complet dans le cas où il y a blocage (ie l'utilisation de la fonction suppression sans argument).

    Cela paraît en effet un peu étrange

  8. #8
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2012
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 190
    Points : 380
    Points
    380
    Par défaut @Bousk
    salut !
    et je dirais même sans 2 arguments.
    la liste est doublement chaînée : il n'est pas indispensable de passer 2 paramètres à la fonction supprimer (mais on doit quand même avoir gardé un élément pour pouvoir utiliser la liste par la suite).
    mais ce n'est pas le problème de abdelghani666 qui veut une fonction interactive (et qui mélange tout : saisie, recherche, suppression) ! et je crois qu'il considère l comme une variable globale. mais bien sûr, ce n'est pas le cas du compilateur.

    A+
    Don't want money. Got money. Want admiration.
    (A tribute to SSG)

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Effectivement, bien vu
    A ce moment-là, j'imagine que la fonction supprimerait l'élément de la liste à laquelle il appartient et retournerait l'éventuelle nouvelle tête de liste
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  10. #10
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2012
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 190
    Points : 380
    Points
    380
    Par défaut
    oui, c'est ça.
    mais sur une liste doublement chaînée on peut faire encore mieux, ni queue ni tête, dans une liste circulaire en chaînant le premier avec le dernier (premier->prev = dernier er dernier->next = premier) le parcours de la liste se faisant à partir d'un quelconque élément.

    A+
    Don't want money. Got money. Want admiration.
    (A tribute to SSG)

Discussions similaires

  1. probleme liste doublement chaineés
    Par sba1990 dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 30/03/2008, 16h13
  2. Réponses: 2
    Dernier message: 24/03/2007, 12h48
  3. Problème sur les listes doublement chainée
    Par Traouspont dans le forum C
    Réponses: 5
    Dernier message: 05/01/2007, 12h02
  4. Pb Liste doublement chainée template
    Par ederf dans le forum Langage
    Réponses: 5
    Dernier message: 19/11/2006, 10h35
  5. Liste doublement chainée
    Par sorry60 dans le forum C
    Réponses: 23
    Dernier message: 03/12/2005, 17h12

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