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 :

Cours liste chainée (pointeur)


Sujet :

avec Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 146
    Par défaut Cours liste chainée (pointeur)
    Bonjour, je ne sais pas si je suis au bon endroit pour poster ici.

    je suis un cours de JAVA au CNAM, il y a une partie stucture dynamique, les listes chaînées , un cour sur les pointeurs .

    je ne comprend pas ce cours pouvez vous m'expliquer si ce que j'ai dessiner est correcte ?



    Que veux dire cette phrase ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    L'adresse du premier élément crée est gardée dans un pointeur tête de la liste
    que crée t'on ici ?? une class ?
    quand est ce que cette adresse est crée ?
    les cercle que j'ai dessiner correpont t'il ?

    c'est vraiment floue, il ya t'il un exemple simple pour comprendre cette liste ?

    je vous remercie beacoup de votre aide
    Images attachées Images attachées  

  2. #2
    Membre très actif Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Par défaut
    Je ne suis pas sûr que tu sois sur la bonne partie du forum mais bon on va dire que c'est assez général pour être traité ici si tu arrive à déchiffrer la langue des CPlusPlussien

    En gros tu dois faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    typedef int Element; //le type de donnée souhaitée
     
    struct Noeud;
     
    struct Noeud
    {
      Element monElement; // la donnée
      Noeud* monNoeudSuivant; // le lien
    };
     
    struct Liste
    {
      Noeud* maTetedeliste; // pointeur sur le premier noeud
    };
    En gros ta tête de liste est un pointeur sur le premier noeud de ta liste et le lien de chaque noeud est un pointeur vers le noeud suivant.

    Tu peu aussi voir ces tutoriels et cours de formation à la programmation Java : http://java.developpez.com/cours/

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 146
    Par défaut
    merci de ta réponse, mais j'arrive pas a comprendre ce fichu chaine

    et si on prenais un exemple.

    d'après ce que j'ai compris une chaine dynamique et comme un tableau mais celui-ci on ne défnit pas à l'avance le nombre de donnée qu'il y a dedans.

    un vrai tableau on fixe sa taille et on ne peut pas dépasser le nombre de donnée.

    donc je vais supposer qu'on a une class Fruit, on y mes des fruits, on ne connait les différent fruit qui seront enregistrer dans cette classe.

    soit une class cueillir, elle va cueille des types de fruits on va supposer
    une pomme, une banbane et une fraise.

    après on veut ajouter une orange .

    Peut t-on pondre un algorithme et ensuite un script avec ce que j'ai énumérer, peut être que ca m'aidera a comprendre comment on utlise les listes chaînées??

    merci encore d'essayer de m'expliquer ceci même si je crois qu'en langage java on ne n'utilise peu?

    et sur mon schema, les pair cercles que j'ai entourés correpondent t'il ? ou je me suis planté?

  4. #4
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Le principe d'une liste chaînée (par exemple LinkedList), c'est que tu encapsules chaque élément de la liste dans un petit objet qui :
    - connait son successeur
    - connait son prédécesseur
    - peut restituer l'élément encapsulé

    De là, pour parcourir la liste, il n'y a plus qu'à partir du début (la liste est un objet qui contient le premier encapsuleur, et d'autres variables comme la taille de la liste pour ne pas avoir à tout recompter), et à accéder au suivant autant de fois que nécessaire (jusqu'à ce qu'on rencontre null, en fait).

    L'intérêt d'une liste chaînée par rapport à un tableau, c'est que la suppression d'un élément au milieu est facile : on change le successeur de n-1 en n+1, et le prédécesseur de n+1 en n-1 ... et voilà. Pas de déplacement, c'est tout propre. Alors que sur un tableau, c'est plus coûteux.
    Par contre, pour accéder au n_ème élément, c'est immédiat pour le tableau, mais pour la liste chaînée on doit parcourir la liste jusqu'à lui.

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    et par rapport à ton cours, tu remplace
    Structure par classe
    pointeur par référence

    et t'aura quelque chose qui correspond à java

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 146
    Par défaut
    Merci de ta réponse Rei
    excusez de moi ignorance mais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    c'est que tu encapsules chaque élément de la liste dans un petit objet
    comment tu encapsule un élément ? en faisant private mavariable?

    la liste ? une liste de chaine de caractère avec des virgules ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pêche,pomme,poire est une liste?

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    la Liste c'est ce que t'es occupé de crééer , une liste de Truc, Truc étant n'importe quoi. Alors oui, pour chaque noeud de ta liste, il faut, en plus du noeud prédécesseur et du noeud successueur, un champ de type "Truc", le Truc etant le type de ta donnée.

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class NoeudFruit{
        private Fruit fruit; 
        private NoeudFruit precedent;
        private NoeudFruit suivante;
        /// + méthodes diverses et variées pour manipuler le noeud ou accéder au Fruit ;)
    }

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 146
    Par défaut
    Merci Tchize

    donc si je fait par exemple la class Fruits

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class Arbre
    {
      String cerisier;
      String abricotier
     
      pointeur: "'arbres suivant // je ne sais pas encore comment on indique que c'est un pointeur
    }
    avec une autre class

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class Arbre suivant
    {
     
    String pommier
     
    pointeur //fin  il n'y a plus rien
    }
    donc d'après ce que j'ai compris,
    que gâce a ce le pointeur "arbre suivante " on va dire qui a comme adresse OX00FFEF
    on connaitra la suite de l'arbre c'est comme si on faisait sans pointeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    public Class AllArbre
    {
     
    String cerisier
    String abricotier
    String pommier
    }

  9. #9
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    ton code n'a pas beaucoup de sens. Un Arbre n'est pas un cerisier et un abricotier. Un "ArbreSuivant" ca n'existe pas.

    Un arbre, c'est un Arbre. Il a éventuellement un nom

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class Arbre{
        private String nom;
        public String getNom(){return nom;}
        public void setNom(String nom){this.nom=nom;}
    }
    et pour l'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ListeArbre  liste = new ListeArbre(); // classe à créer ainsi que les classes noeud
    Arbre arbre = new Arbre();
    arbre.setNom("abricotier");
    liste.ajouterArbre(arbre);
    arbre = new Arbre();
    arbre.setNom("cocotier");
    liste.ajouterArbre(arbre);
    arbre = new Arbre();
    arbre.setNom("sapin");
    liste.ajouterArbre(arbre); // la liste contient maintenant abricotier, cocotier et sapin

  10. #10
    Membre très actif Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Par défaut
    A ce niveau là c'est plus des notions qu'il te manque, tu n'as aucune base, relis d'abord ton cours pour comprendre ce qu'est et à quoi sert : une variable, un pointeur, une classe, un objet, une fonction.
    Il y a énormément de tutoriels pour ça, ici on t'aidera volontier si tu as un problème mais il faut faire un minimum d'efforts de compréhension notre but n'est pas de remplacer ton prof.

  11. #11
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Non. Tu confonds les classes et les instances de classes.

    Relis le post de Tchize ; les variables "fruit", "precedent" et "suivant" sont des références, qui pointent donc vers des objets. L'objet liste ressemblera à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class ListFruits implements List {
       private NoeudFruit premier;
     
       private int nb;
     
       // Les méthodes pour satisfaire à l'interface List
    }

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 146
    Par défaut
    merci encore de toutes ces réponse que pensez vous de mon schema? je pense que j'ai compris son fonctionnement




    grace a ce system on peut mettre n cascade de class sans a déclarer de tableau, c'est une sorte de class avec son extension infinie?
    et on pourra accéder a toute les variables des 3 class sans à avoir les instancier?

  13. #13
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    bon alors faudra être clair sur les termes

    C'est pas "trois classes", c'est "trois instances de la même classe" dans une liste chainée. On en a mis trois comme on aurait pu en chaîner 5 500 ou 0. On doit bien sur les sûr instancier avant de les ajouter à la liste.

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 146
    Par défaut
    oui en effet c'est 3 instances de la classe car une class toute seul ne peux pas être dans une memoire c'est juste un fichier.

    merci de me l'avoir rappeler

  15. #15
    Membre très actif Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Par défaut
    on va dire ça

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 22/04/2013, 11h06
  2. Réponses: 18
    Dernier message: 29/03/2007, 20h40
  3. [Débutant] Pointeur sur liste chainée
    Par HaTnuX dans le forum C
    Réponses: 2
    Dernier message: 02/12/2006, 17h53
  4. Liste chainée et pb de pointeur
    Par P'tite Nélodie dans le forum C
    Réponses: 9
    Dernier message: 11/10/2006, 14h41
  5. Réponses: 4
    Dernier message: 26/09/2005, 22h36

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