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 double générique


Sujet :

C

  1. #1
    Membre habitué Avatar de issou
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 181
    Points : 136
    Points
    136
    Par défaut Liste chainée double générique
    Bonsoir, j'au un problème dans mon code ! Assez bizarre d'ailleurs .

    voila j'ai une erreur : "Suivant n'est pas un membre de cellule !"

    Cela s'adresse à la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     l->courant->precedent->suivant=l->courant
    -> dans la fonction addItemInEnd

    -> et dans la fonction DeleteItem

    voila mon 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
    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
    #include <stdlib.h>
    #include <conio.h>
    #include <stdio.h>
    #include <ctype.h>
    #include <math.h>
     
     
     
    // D‚claration de mes structures de données
    //************************************************************************
    struct cellule
    {
      void * data;
      struct cellule * suivant;
      struct celulle * precedent;
    };
     
     
     
    struct liste
    {
      struct cellule * depart;
      struct cellule * courant;
      struct cellule * fin;
    };
     
     
     
    //Initialisation de la liste
    //**************************************************************************
    void initList( struct liste * l )
    {
      l->depart = ( struct cellule * ) malloc( sizeof( struct cellule ) );
      l->fin = ( struct cellule * ) malloc( sizeof( struct cellule ) );
      l->fin->precedent = l->depart;
      l->depart->suivant = l->fin;
      l->fin->suivant = NULL;
      l->depart->precedent = NULL;
     
     
     
    }
     
    // Ajout d'un élement dans la liste
    //***************************************************************************
     
     
    void add_itemInEnd( struct liste * l, void * data )
    {
      int * item, * inserted;
     
     
     
      l->courant = l->depart->suivant;
     
     
      while ( l )
      {
        if ( l->courant->suivant == NULL )
        {
          l->courant->suivant = ( struct cellule * ) malloc( sizeof( struct cellule ) );
          l->courant->precedent->suivant = l->courant;
          l->courant->suivant->precedent = l->courant;
          l->courant = l->courant->suivant;
          l->courant->data = data;
          l->courant->suivant = NULL;
     
     
        }
     
        else
        {
          l->courant = l->courant->suivant;
     
        }
     
      }
     
    }
     
    // Suppression d'un élement dans la liste
    //*****************************************************************************
     
    void delete_item( struct liste * l, void * data )
    {
      int * element, * inserted;
      int deleted = 0;
      l->courant = l->depart->suivant;
     
     
      while ( l )
      {
        inserted = ( int * ) data;
     
        element = ( int * ) l->courant->data;
     
     
        if ( * inserted == * element )
        {
          l->courant->precedent->suivant = l->courant->suivant;
     
          l->courant->suivant->precedent = l->courant->precedent;
     
          free( l->courant );
          deleted = 1;
     
        }
        else
        {
          l->courant = l->courant->suivant;
     
        }
     
     
      }
     
      if ( deleted == 1 )
      {
        printf( " Item was deleted successfully\n" );
        getchar();
      }
     
      else
      {
        printf( " Item not found \n" );
        getchar();
      }
     
     
    }
    Merci pour votre aide .

  2. #2
    Membre habitué Avatar de issou
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 181
    Points : 136
    Points
    136
    Par défaut
    Non je ne vois vraiment pas . Je ne comprend pas pourquoi "Suivant" n'est pas défini . Aussi il me dit qu'il y a une conversion de pointeur suspecte ??!!!

  3. #3
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par issou
    Non je ne vois vraiment pas . Je ne comprend pas pourquoi "Suivant" n'est pas défini . Aussi il me dit qu'il y a une conversion de pointeur suspecte ??!!!
    Si j'en crois la définition de la structure,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    struct cellule
    {
      void * data;
      struct cellule * suivant;
      struct celulle * precedent;
    };
    'Suivant' n'est pas défini, alors que 'suivant' l'est. Je rappelle que le C est sensible à la casse... (case sensitive)

    Mais ce n'est pas ça. Le problème est une faute d'orthographe :

    struct cellule
    {
    void * data;
    struct cellule * suivant;
    struct celulle * precedent;
    };

    j'avoue que c'est assez piégeant. Personellement j'appelle cette structure 'node'. C'est plus simple et plus clair...

  4. #4
    Membre habitué Avatar de issou
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 181
    Points : 136
    Points
    136
    Par défaut
    Quel oeil !!!! franchement là tu m'épates . Un grand merci !!!

Discussions similaires

  1. Problème liste chainée double
    Par toufik135 dans le forum C
    Réponses: 13
    Dernier message: 02/11/2012, 22h27
  2. Réponses: 2
    Dernier message: 20/10/2012, 22h07
  3. Liste chainée double
    Par manrugby dans le forum C#
    Réponses: 10
    Dernier message: 28/05/2011, 15h05
  4. Réponses: 2
    Dernier message: 22/05/2009, 15h06
  5. liste chainée double
    Par Stevie Wonder dans le forum C
    Réponses: 11
    Dernier message: 21/11/2006, 12h13

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