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

avec Java Discussion :

Utilisation de listes chainées


Sujet :

avec Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 65
    Points : 53
    Points
    53
    Par défaut Utilisation de listes chainées
    Bonjour,

    J'ai une liste chainée dont je voudrait inscrire les éléments dans une String. Celle-ci doit être de la forme : [3,2,1,0]. J'ai en fait le résultat suivant chaque fois que s'insère un élément dans ma liste :
    [0] puis [1,0] là c'est bon.
    Puis [2,0] alors que je devrais obtenir [2,1,0].

    Quelqu'un pourrait me dire comment je dois procéder, j'avoue avoir du mal à comprendre le fonctionnement.

    Merci

    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
     
    public class Pile4 implements PileI, Cloneable {
        /** la liste des Maillons/Elements */
        private Maillon stk;
        /** la capacité de la pile */
        private int capacite;
        /** le nombre */
        private int nombre;
     
        /**
         * Classe interne "statique" contenant chaque élément de la chaine c'est une
         * 
         */
        private static class Maillon implements Cloneable {
            private Object element;
            private Maillon suivant;
     
            public Maillon(Object element, Maillon suivant) {
                this.element = element;
                this.suivant = suivant;
            }
     
            public Maillon suivant() {
                return this.suivant;
            }
     
            public Object element() {
                return this.element;
            }
     
            public Object clone() throws CloneNotSupportedException {
                Maillon m = (Maillon) super.clone();
                m.element = element;
                return m;
            }
        }
     
        /**
         * Création d'une pile.
         * 
         * @param taille
         *            la taille de la pile, la taille doit être > 0
         */
        public Pile4(int taille) {
            if (taille <= 0)
                taille = CAPACITE_PAR_DEFAUT;
            this.stk = null;
            this.capacite = taille;
     
        }
     
        public Pile4() {
            this(PileI.CAPACITE_PAR_DEFAUT);
        }
     
        public void empiler(Object o) throws PilePleineException {
            if (estPleine())
                throw new PilePleineException();
            if (this.stk == null){
                this.stk = new Maillon(o, null);
                this.nombre = 1;
              }
              else {
                Maillon pere = this.stk;
                this.stk = new Maillon (o, pere);
                nombre ++;
                }
     
        }
    public String toString() {
            StringBuffer sb = new StringBuffer("[");
            //Maillon fils = null;
            sb.append(this.stk.element());
            if (this.stk.suivant() != null)
                {
                    sb.append(", " + this.stk.suivant.element());
                    this.stk = this.stk.suivant();
                }
     
            sb.append("]");
            return sb.toString();
        }

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ta méthode toString() modifie la variable stk dans une ligne qui commence par

    J'imagine que toString() ne devrait rien modifier du tout ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 65
    Points : 53
    Points
    53
    Par défaut
    Merci pour la réponse.
    Du coup, il me faut déclarer 2 Maillon, par exemple prère et fils et me servir d'eux pour les "enchainer"?

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Points : 417
    Points
    417
    Par défaut
    C'est juste que dans ta méthode toString() il faut que tu commence par récupérer le maillon de tête :

    Puis tu pars de ce maillon pour remonter ta pile :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(m!=null) {
        //traiter m.element()
        m = m.suivant();//progression dans la pile
    }

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 65
    Points : 53
    Points
    53
    Par défaut
    Merci,
    j'ai compris comment parcourir ma liste. J'essayais chaque fois de "sauvegarder" le précédent!

    Encore merci!

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/09/2010, 00h13
  2. utiliser listes chainées où donné=structure?
    Par xlas-blader dans le forum C
    Réponses: 6
    Dernier message: 05/12/2006, 13h25
  3. copie de liste chainée
    Par tomsoyer dans le forum C++
    Réponses: 15
    Dernier message: 31/08/2004, 18h20
  4. Trie liste chaine
    Par Congru dans le forum C
    Réponses: 2
    Dernier message: 30/03/2004, 19h05
  5. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 20h25

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