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

Langage Pascal Discussion :

Liste circulaire simplement chaînée : suppression


Sujet :

Langage Pascal

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Mai 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Liste circulaire simplement chaînée : suppression
    Bonsoir,

    Je vous explique mon problème, j'aurais besoin d'aide sur une fonction qui me permette de supprimer un élément dans une liste circulaire simplement chaînée.

    Cette fonction permet de supprimer un élément appelé tete, en lui envoyant l'élément qui la précède, mais elle ne fonctionne pas, cela ne me supprime rien du tout, donc j'aimerai savoir si je peux tirer quelque chose de la fonction suivante.

    Et quand je tente d'autre chose je me retrouve paumé avec des problèmes d'adresses, je ne comprends pas vraiment pourquoi cela ne fonctionne pas ><
    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
     
     
    function delete(var tete:pliste;prec : pliste): pliste;
    var tmp:pliste;
    begin
     
    new(tmp);
     
    prec^.suiv := tete^.suiv;
    tmp := tete^.suiv;
    //  tete^.suiv := NIL    problème d'adresse si je met cette ligne
    delete := tete;
     
     exit;
    end;
    Je vous remercie d'avance pour votre aide.

  2. #2
    Membre habitué Avatar de Modulpro
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2010
    Messages : 76
    Points : 175
    Points
    175
    Par défaut
    Bonjour,

    Si j'ai bien compris le but de cette fonction est de supprimer un élément de la liste en connaissant l'élément précédent.

    En reprenant chaque instruction dans l'ordre, on comprend le problème. Si on appelle n l'élément tete, n-1 le précédent et n+1 le suivant alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    prec^.suiv := tete^.suiv;
    permet de connecter n-1 sur n+1. L'élément n n'est donc plus dans la liste
    tmp pointe maintenant vers n+1
    L'élément n n'a plus de suivant. Notons qu'il n'appartient plus à la liste.
    La fonction renvoie l'élément n qui n'a plus de suivant et qui n'est plus dans la liste.
    Le problème d'adresse d’adresse surgit alors si tu tente d’accéder à la liste renvoyée par la fonction, qui n'en est pas une (un seul élément avec un pointeur nul).

    Pour que ta fonction fonctionne, il faut donc qu'elle renvoi le nouvel élément de tête de la liste, donc l'élément n+1 (ou plutôt un pointeur sur cet élément). De plus il ne faut pas oublier de libérer la mémoire occupée par l'élément tete qui à été supprimé.

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 939
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 939
    Points : 5 648
    Points
    5 648
    Par défaut
    Jai,

    Pour tous les problèmes de ce genre, retour au papier + crayon.

    Quelques cases + des flèches qui les relient, et suivre l'évolution des flèches quand on supprime/ajoute/insère une case.

    Une fois bien assimilé tout ça, le code est simple à écrire.
    Si les cons volaient, il ferait nuit à midi.

  4. #4
    Membre éprouvé
    Avatar de EpiTouille
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 372
    Points : 917
    Points
    917
    Par défaut
    Salut,

    Attention, n'oublie pas de liberer la memoire !

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/05/2009, 21h20
  2. Listes circulaires doublement chaînées
    Par balarabe dans le forum Pascal
    Réponses: 1
    Dernier message: 17/05/2008, 00h25
  3. [TP] Tri rapide pour liste simplement chaînée
    Par druzy dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 25/11/2007, 16h52
  4. Probleme liste simplement chaînée
    Par sorry60 dans le forum C
    Réponses: 23
    Dernier message: 19/11/2005, 21h17

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