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 :

Suppression d'un élément dans une liste chainée


Sujet :

C

  1. #1
    Membre averti Avatar de jbarreau-mainson
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    446
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 446
    Points : 412
    Points
    412
    Par défaut Suppression d'un élément dans une liste chainée
    Bonjour à tous,

    je réalise un serveur multi clients, mes clients sont dans une liste chainée.
    J'arrive à ajouter un client ( à sa connection ) mais pas à supprimer un client lorsqu'il se deconnecte.

    J'appele cette fonction pour supprimer mon client :
    //main.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Liste(LISTE_SUPPR, &pClients, now->Myclient.Sock);
    //liste.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //Service SUPPR pour Client.
    //Enlève un client de la liste.
            case LISTE_SUPPR:
                if(!*pListe) return -1;
                temp = (*pListe)->prec;
                closesocket(pa);
                printf("socket %d fermee.\n", pa);
                free(*pListe);
                *pListe = temp;
                break;
    //liste.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct tt_liste{
        struct tt_liste *prec;
        t_client Myclient;
    }t_liste;

  2. #2
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    Ton code illustré :
    A,B,... représentent les éléments de la liste et <- leur pointeur prec
    Voila une partie de la liste et on veut supprimer B,
    donc *pListe pointe sur B
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      .... <-A     <-B     <-C ....
                 *pListe
    
    temp = (*pListe)->prec;
      .... <-A     <-B     <-C ....
            temp  *pListe
    
    free(*pListe);
      .... <-A       ???   <-C ....
            temp  *pListe
    
    *pListe = temp;
      .... <-A       ???   <-C ....
          *pListe
    et A et C ne sont plus chainés. La chaine est coupée !

    Supprimer un élément d'une liste simplement chainée est délicat, car il faut modifier le pointeur prec de l'élément suivant (C). Or on ne sait pas où il est.
    Donc, si je veux supprimer B, il faut qu'on me donne C et que je supprime le prec de C (en considérant en plus les cas de suppression en bout de liste, que la liste peut avoir 0, 1 ou plus d'éléments,...
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

Discussions similaires

  1. Réponses: 5
    Dernier message: 26/11/2012, 12h51
  2. Ajouter un élément dans une liste chainée.
    Par fourize dans le forum Général Java
    Réponses: 7
    Dernier message: 12/05/2012, 10h26
  3. suppression dans une liste chainée
    Par tomtom421 dans le forum C
    Réponses: 8
    Dernier message: 21/04/2007, 16h29
  4. Suppression d' éléments dans une liste.
    Par conan76 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 02/03/2007, 09h33
  5. Réponses: 8
    Dernier message: 01/04/2006, 10h10

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