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:
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:
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...