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

Java Discussion :

Triage d'une implémentation d'une liste chaînée


Sujet :

Java

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 102
    Par défaut Triage d'une implémentation d'une liste chaînée
    Bonjour,

    J'écris présentement un petit programme me permettant de trier une liste chaînée en ordre croissant. Je fais ma propre implémentation de cette liste au lieu d'utiliser directement LinkedList. Voici ce que j'ai jusqu'à maintenant :

    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
    public boolean ajouter(T elt) {
    		boolean ajout = false;
    		Noeud<T> courant = tete;
    		if (!verifierSiExiste(elt)) {
    			if (estVide()
    					|| elt.obtenirPriorite() < tete.getElement()
    							.obtenirPriorite()) {
    				tete = new Noeud<T>(elt, tete);
    			} else {
    				while (courant != null) {
    					if (elt.obtenirPriorite() > courant.getElement().obtenirPriorite() && !ajout) {
    						Noeud<T> unNoeud = new Noeud<T>(elt);
    						unNoeud.setSuivant(courant.getSuivant());
    						courant.setSuivant(unNoeud); 
    						ajout = true;
    					} else {
    						courant = courant.getSuivant();
    					}
    				}
    			}	
    		}
    		nbElements++;
    		return ajout;
    	}
    Cependant, lorsque j'ajoute les éléments 4,1,2,5,3, les éléments sont classés selon l'ordre suivant (après l'ajout de tous les éléments): 1,3,5,2,4 au lieu de 1,2,3,4,5.

    J'ai vu que je pouvais utiliser l'interface Comparable, mais je ne comprends pas très bien.

    Merci

  2. #2
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (elt.obtenirPriorite() > courant.getElement().obtenirPriorite() && !ajout) {
    Ton test est écirt à l'envers. C'est uniquement si l'elt < courant que tu dois faire l'insertion, sinon tu n'est pas cohérent par rapport à ta règle de tête. Aussi, quelque remarques:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!verifierSiExiste(elt)) {
    Ce test n'a pas de sens, il nécessite de parcourir une première fois la liste. Tu le verra bien pendant l'insertion si oui ou non l'élément est déjà présent, quand tu tombera dessus.

    Ta variable ajout ne sert à rien, tu peux te contenter de sortir de la méthode une fois l'ajout fait. Pourquoi continuer inutilement à parcourir la liste?

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 102
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (elt.obtenirPriorite() > courant.getElement().obtenirPriorite() && !ajout) {
    Ton test est écirt à l'envers. C'est uniquement si l'elt < courant que tu dois faire l'insertion, sinon tu n'est pas cohérent par rapport à ta règle de tête. Aussi, quelque remarques:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!verifierSiExiste(elt)) {
    Ce test n'a pas de sens, il nécessite de parcourir une première fois la liste. Tu le verra bien pendant l'insertion si oui ou non l'élément est déjà présent, quand tu tombera dessus.

    Ta variable ajout ne sert à rien, tu peux te contenter de sortir de la méthode une fois l'ajout fait. Pourquoi continuer inutilement à parcourir la liste?

    Merci de ta réponse (rapide en plus). Donc, j'ai changé le signe > pour <, mais seuls trois éléments sont ajoutés sur les cinq, soit 1,2 et 3 (dans l'ordre). Il me manque donc 4 et 5.

    Merci

  4. #4
    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
    Oui, tu n'a pas géré les cas où l'ajout se fait en fin de liste.

Discussions similaires

  1. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  2. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  3. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  4. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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