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

C++ Discussion :

Parcourir une liste de listes chaînées


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 174
    Points : 62
    Points
    62
    Par défaut Parcourir une liste de listes chaînées
    Bonjour,


    Je dois manipuler des listes d'adjacences et j'ai procéder de la manière suivante :

    J'ai une liste de type list<sommet> liste; sommet est une liste chainée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class sommet {
         private :
        // sommet *suivt;   // le suivant dans la liste
        // int elm;    // information contenue
         public :
    	  sommet *suivt;   // le suivant dans la liste
         int elm;    // information contenue
     
         sommet *suivant(void) { return suivt; }
         int &contenu(void) { return elm; }
         sommet* supprime_svt();
         sommet* insere(int e);
         };

    Dans mon programme, je procède de la manière suivante:

    Je créer ma liste.
    Les éléments sont lus dans un fichier.
    Pour chaque ligne du fichier texte lu
    je crée une liste chainée où chaque élément est une valeure lu (des entiers
    une fois la liste chainée crée, je l'insère dans ma liste et je recommence avec une nouvelle ligne du fichier.

    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
    bool graph::charger(char *S,graph & g)
    {
     
    	int i,j,k,l,N,noeud,suc;
    	ifstream ch(S);
    	ch>>N;
    	cout<<"n: "<<N<<endl;
    	n=N;
     
    	sommet liste;
    	list<sommet>::iterator it;
    	it=listeAdj.begin();
     
     
    	for(i=0;i<n;i++)
    		{
    			liste=g.AjoutNoeud(ch,liste,g);
    			listeAdj.push_back(liste);
     
     
    		}
     
     
    	sommet * tmp;
    	for(it=listeAdj.begin();it!=listeAdj.end();it++){
    		tmp=it;
    		while(&tmp->suivant!=NULL){
    			cout<<&tmp->elm<<endl;
    			&tmp=&tmp->suivant;
    		}
     
     
    	}
     
    	return true;
    }
     
     
    sommet graph::AjoutNoeud(ifstream & ch,sommet & liste, graph & g)
    {
    	int lecture,i,j;
    	lecture=0;
    	while(lecture!=-1){
    		ch>>lecture;
    		//cout<<"lecture "<<lecture<<endl;
    		liste.insere(lecture);
    	}
     
    	return liste;
    }
     
     
     
    sommet* sommet::insere(int e)
    // insère un nouvel élément de valeur e derrière this.
    // renvoie 0 si plus de mémoire, sinon suivt.
    {
         sommet *nouveau = new sommet;
         if (!nouveau) return 0;    // plus de mémoire
         nouveau->suivt = suivt;
         nouveau->elm = e;
         return suivt = nouveau;
    }
     
     
     
    }
    Je ne sais pas parcourir ma liste de liste chaînées. J'ai essayé plein de solutions diverses et variées sans succès. Pouvez-vous me donner un petit coup de main?

    merci d'avance...

  2. #2
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 266
    Points : 6 688
    Points
    6 688
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    pourquoi ne pas faire une liste de liste? Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    struct Sommet
    {
        int elm;
    };
     
    class Graph
    {
    public:
        void AjoutNoeud(...); // a voir en fonction de ce que tu souhaite faire exactement
     
    private:
        std::list< std::list < Sommet > > _sommets;
    };
    L'avantage c'est que la classe template std:.list possède une fonction insert() bien pratique

Discussions similaires

  1. Parcourir une zone de liste
    Par christgh dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/09/2008, 12h12
  2. Regrouper une liste en liste de listes
    Par West01 dans le forum Prolog
    Réponses: 12
    Dernier message: 14/03/2008, 14h07
  3. parcourir une pile (liste simple chaînée)
    Par rutabagas dans le forum C
    Réponses: 3
    Dernier message: 04/10/2007, 16h08
  4. Parcourir une zone de liste
    Par subnox dans le forum VBA Access
    Réponses: 9
    Dernier message: 21/08/2007, 10h56
  5. créer et parcourir une map <int,list>
    Par GLSpirit dans le forum SL & STL
    Réponses: 6
    Dernier message: 10/05/2007, 14h59

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