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 entiersune fois la liste chainée crée, je l'insère dans ma liste et je recommence avec une nouvelle ligne du fichier.
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?
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; } }
merci d'avance...
Partager