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 chaine simple


Sujet :

C

  1. #1
    Membre confirmé
    Homme Profil pro
    Cycles en Informatique
    Inscrit en
    Juin 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Cycles en Informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2007
    Messages : 67
    Par défaut Liste chaine simple
    Bonjour

    je suis entraine d'ecrire une fonction pour recherche un elt dans une liste s'il le trouve il me renvoie 1 sinon 0 comme je pouvais eviter d'inserer des elts existant deja dans la liste mais au niveau de l'appel il se plante fault segmentaion
    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
     
    int searchelmt(list_pt verif, int cle){
    list_pt ter;
    int found = 0;
    list_pt k_iterator = verif;
    do {
    ter = k_iterator->elt;
    if(ter->cle == cle)
     found =1;
    k_iterator = k_iterator->Next;
     } while(k_iterator != NULL || found == 1);
    if(found == 1)
    return 1;
    else
    return 0;
    }
    programme d'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    bout de code d'appel
     
    j_iterator = listj->files;
    	while(j_iterator != NULL){
     
    	if((doci->pfile == NULL) || (searchelmt(doci->pfile,  j_iterator->plist->cle) == 0))
    	doci->pfile = insert(doci->pfile, j_iterator->plist);
    	j_iterator = j_iterator->Next;
    }

  2. #2
    Membre chevronné Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Par défaut
    dans la function searchelmt() il faut passer le pointeur et non pas la valeur. Et comme je vois dans votre code, vous utilisé déja la notion de pointeur pour manipuler les element de la chaine, donc il faut passer le pointeur du premier element....

    il faut verifier si doci->pfile est un pointeur ou non, Si c'est un pointeur tu peut appeler la fonction avec le nom directement, si non, alors il faut ajouter l'operateur & avant le nom de la variable (&doci->pfile)
    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
    int searchelmt(list_pt *verif, int cle){
    list_pt ter;
    int found = 0;
    list_pt *k_iterator = verif;
    do {
    ter = k_iterator->elt;
    if(ter->cle == cle)
     found =1;
    k_iterator = k_iterator->Next;
     } while(k_iterator != NULL || found == 1);
    if(found == 1)
    return 1;
    else
    return 0;
    }
     
    
    j_iterator = listj->files;
        while(j_iterator != NULL){
        
        if((doci->pfile == NULL) || (searchelmt(doci->pfile,  j_iterator->plist->cle) == 0))
        doci->pfile = insert(doci->pfile, j_iterator->plist);
        j_iterator = j_iterator->Next;
    }
    

  3. #3
    Membre confirmé
    Homme Profil pro
    Cycles en Informatique
    Inscrit en
    Juin 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Cycles en Informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2007
    Messages : 67
    Par défaut
    Disons que oui tu as raison en faite c'est des pointeur que j'utilisse sur toute la ligne du code sauf la clé mais probleme se pose à l'appel car j'aimerai verifie la presence de la clé ou pas avant d'inserer l'element dans la liste. car il peut avoir des doublons mais pas dans la liste.

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    mais au niveau de l'appel il se plante fault segmentaion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	if((doci->pfile == NULL) || (searchelmt(doci->pfile,  j_iterator->plist->cle) == 0))
    es-tu certain que j_iterator->plist est différent de NULL ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Cycles en Informatique
    Inscrit en
    Juin 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Cycles en Informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2007
    Messages : 67
    Par défaut
    diogene en effet je me suis trompé sur la première condition en faite c'est qu'il doit etre egale à NULL pas diffèrent mais avec tout ça il se plante apres avoir inserer les quelques premier élemnt dans la liste.; erreur de segmentation

  6. #6
    Membre émérite Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Par défaut
    Salut,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    while(k_iterator != NULL || found == 1)
    On sort de la boucle si l'on a trouvé l'élément ou que la fin de la liste a été atteinte ...donc c'est plus un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    while(k_iterator != NULL && found == 0 )
    @++

  7. #7
    Membre confirmé
    Homme Profil pro
    Cycles en Informatique
    Inscrit en
    Juin 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Cycles en Informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2007
    Messages : 67
    Par défaut
    Resolu Cool ssmario2 Merci

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

Discussions similaires

  1. Liste chainée simple
    Par boula dans le forum C
    Réponses: 9
    Dernier message: 23/05/2008, 22h32
  2. [Liste Chainée Simple]_Sentinelle_
    Par orfix dans le forum C
    Réponses: 28
    Dernier message: 04/03/2008, 22h21
  3. Liste chainée simple
    Par BatuBou dans le forum C
    Réponses: 6
    Dernier message: 21/01/2008, 11h35
  4. liste chaine simple
    Par el baz dans le forum C
    Réponses: 8
    Dernier message: 03/08/2007, 20h54
  5. un probléme de liste chainé simple
    Par seifdev dans le forum C
    Réponses: 15
    Dernier message: 02/04/2007, 16h36

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