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 :

Trier une liste chainée


Sujet :

Java

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Points : 56
    Points
    56
    Par défaut Trier une liste chainée
    Bonjours à tous

    Je voudrais être en mesure de pouvoir trier une liste chainée.

    Comment je pourrais être en mesure d'y arriver ?

    Je n'arrive tout simplement pas à permuter 2 éléments entre eux

  2. #2
    Expert éminent sénior
    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
    Points : 48 804
    Points
    48 804
    Par défaut
    montre ton code de permutation?

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Points : 56
    Points
    56
    Par défaut
    Je n'ai pas tenté de permuter parce que je ne sais pas comment m'y prendre en fait.

    Ma liste chainée ressemble à ceci.

    Est-ce suffisant ?

    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
     
     
    public class ListeChainee {
     
    	Noeud debut;
    	Noeud fin;
    	int size = 0;
     
    	public ListeChainee() {
    	}
     
     
    	private void addDebut(Forme o) {
    		Noeud nouveau = new Noeud(o);
    		nouveau.suivant = debut;
    		debut = nouveau;
    		size++;
    		if (fin == null) {
    			fin = debut;
     
    		}
    	}
     
    	private void addFin(Forme o) {
    		Noeud nouveau = new Noeud(o);
    		if (fin == null) {
    			fin = nouveau;
    			debut = fin;
    		} else {
     
    			fin.suivant = nouveau;
    			fin = fin.suivant;
    		}
    		size++;
    	}
     
    	public void add(int index, Forme o) {
    		if (index == 0) {
    			addDebut(o);
    		} else if (index >= size) {
    			addFin(o);
    		} else {
    			Noeud nouveau = new Noeud(o);
    			Noeud preced = debut;
    			for (int i = 1; i < index; i++) {
    				preced = preced.suivant;
     
    			}
    			nouveau.suivant = preced.suivant;
    			preced.suivant = nouveau;
    			size++;
    		}
     
    	}
     
    	public void clear() {
    		debut = null;
    		fin = null;
    		size = 0;
     
    	}
     
    	public boolean contains(Object o) {
    		Noeud courant = debut;
    		for (int i = 0; i < size; i++) {
    			if (courant.element.equals(o)) {
     
    				return true;
    			}
    			courant = courant.suivant;
     
    		}
    		return false;
    	}
     
     
     
    	public Forme get(int index) {
    		if (index < 0 || index >= size) {
    			return null;
    		} else {
    			Noeud courant = debut;
    			for (int i = 1; i <= index; i++) {
    				courant = courant.suivant;
     
    			}
    			return courant.element;
     
    		}
     
    	}
     
     
     
     
    	public Forme supprimer(int index) {
    		 if (index < 0 || index >= size) {
    			return null;
    		} else {
    			Noeud preced = debut;
    			for (int i = 1; i < index; i++) {
    				preced = preced.suivant;
    			}
    			Noeud temp = preced.suivant;
    			preced.suivant = temp.suivant;
    			size--;
    			return temp.element;
    		}
     
    	}
     
     
    	public String toString() {
    		StringBuffer chaine = new StringBuffer("[");
    		Noeud courant = debut;
    		for (int i = 0; i < size; i++) {
    			if (courant != debut)
    				chaine.append(", ");
    			chaine.append(courant.element);
    			courant = courant.suivant;
    		}
     
    		chaine.append("]");
    		return chaine.toString();
     
    	}
     
    	private class Noeud {
    		Forme element;
    		Noeud suivant;
     
    		public Noeud(Forme o) {
    			element = o;
    		}
     
    	}
     
    }

  4. #4
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 239
    Points : 313
    Points
    313
    Par défaut
    Bonjour,

    Vous pouvez dans un premier temps essayer ceci :
    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
     
    public void permuter(int indice1, int indice2) {
        Forme forme1 = this.get(indice1);
        Forme forme2 = this.get(indice2);
        this.add(indice2, forme1);
        if (indice2>0)
            this.supprimer(indice2-1);
        else
            this.supprimer(0);
        this.add(indice1, forme2);
        if (indice1>0)
            this.supprimer(indice1-1);
        else
            this.supprimer(0);
    }
    Par contre, au niveau complexité ... je réfléchis à une solution plus rapide

  5. #5
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 239
    Points : 313
    Points
    313
    Par défaut
    Voilà, je pense que ceci pourrait être pas mal :

    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
    public void permuter(unsigned int indice1, unsigned int indice2) throws Exception{
    	if (indice1 != indice2) {
    		if (indice1 > size || indice2 > size) {
    			throw Exception("Les indices ne sont pas corrects");
    		}
    		int indiceCourant, indiceInferieur, indiceSuperieur;
    		Noeud noeudTemporaire, noeudInferieur, noeudSuperieur;
    		noeudTemporaire = debut;
    		noeudInferieur = null;
    		noeudSuperieur = null;
    		if (indice1 < indice2) {
    			indiceInferieur = indice1;
    			indiceSuperieur = indice2;
    		} else {
    			indiceInferieur = indice2;
    			indiceSuperieur = indice1;	
    		}
    		indiceCourant = 0;
    		while (indiceCourant++ < indiceInferieur) {
    			noeudTemporaire = noeudTemporaire.suivant;
    		}
    		noeudInferieur = noeudTemporaire;
    		while (indiceCourant++ < indiceSuperieur) {
    			noeudTemporaire = noeudTemporaire.suivant;
    		}
    		noeudSuperieur = noeudTemporaire;
    		noeudTemporaire = noeudSuperieur.suivant;
    		noeudSuperieur.suivant = noeudInferieur.suivant;
    		noeudInferieur.suivant = noeudTemporaire;
    		noeudTemporaire = noeudSuperieur.precedent;
    		noeudSuperieur.precedent = noeudInferieur.precedent;
    		noeudInferieur.noeudTemporaire;
    	}
    }
    Qu'en pensez-vous ?

  6. #6
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Points : 56
    Points
    56
    Par défaut
    Je ne crois pas utilisé ceci. Merci quand même. C'est un peu trop compliquer à mon goût.

  7. #7
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Points : 56
    Points
    56
    Par défaut
    La première solution ne fonctionnais pas.

    En fait, si je met l'indice 0 et l'indice 1 en paramètre.

    Exemple :

    0
    1
    2
    3

    Elle va changé pour

    1
    1
    2
    3

  8. #8
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    En utilisant tes fonctions, tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public void permuter(int indice1, int indice2) {
        int indice_min = Math.min(indice1, indice2);
        int indice_max = Math.max(indice1, indice2);
     
        Forme forme_min = this.get(indice_min);
        Forme forme_max = this.get(indice_max);
     
        this.supprimer(indice_min);
        this.supprimer(indice_max);
        this.add(indice_min, forme_min);
        this.add(indice_max, forme_max);
    }
    a+

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Juin 2011
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juin 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut help supprimer les doublons d'une liste chaine generique en java
    salut tout le monde ,
    je veux coder un programme en java qui implementer une liste chainee generique et de supprimer les doublons dans cette listes.
    Merci a l'avance .

  10. #10
    Expert éminent sénior
    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
    Points : 48 804
    Points
    48 804
    Par défaut
    un peux comme ce que fait déjà LinkedHashSet?

Discussions similaires

  1. Trier une liste chaine
    Par toams69 dans le forum C
    Réponses: 9
    Dernier message: 12/11/2008, 11h12
  2. [ Débutant ] trier une liste chainée
    Par sablito dans le forum C
    Réponses: 3
    Dernier message: 01/11/2006, 23h27
  3. Réponses: 28
    Dernier message: 24/05/2006, 18h20
  4. Trier une liste chainée.
    Par gregb34 dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 21/05/2006, 22h05
  5. [Debutant(e)]Trier une liste
    Par LeDébutantJava dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 19/08/2004, 12h44

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