Je veux un petite application console qui consiste à placer des nombres dans une liste chaînée
Il faut que je les places en ordre croissant.
Je demande un nombre à l'écran et je dois le supprimer si il existe.
Quelqu'un peut m'aider
Merci
Version imprimable
Je veux un petite application console qui consiste à placer des nombres dans une liste chaînée
Il faut que je les places en ordre croissant.
Je demande un nombre à l'écran et je dois le supprimer si il existe.
Quelqu'un peut m'aider
Merci
Renseigne-toi sur std::list et sur les algorithmes de la STL. Tu devrais avoir tout ce dont tu as besoin.
C'est ou je peux trouvé ça ?
:google2:
J'avais débuté un peux.
Comment je peux faire pour entrer le chiffre dans la console à supprimer et mettre cela en ordre croissant.
MerciCode:
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 #include <cstdlib> #include <iostream> using namespace std; struct Element { int valeur; Element* suivant; }; Element* liste = NULL; void Ajouter(int valeur) { Element* element= new Element; element->valeur = valeur; element->suivant = liste; liste = element; } Element* Rechercher(int valeur) { Element* element = liste; while(element != NULL && element->valeur != valeur) element = element->suivant; return element; } void Supprimer(Element* element) { Element* precedent = liste; if(element == liste) { liste = NULL; delete element; return; } while(precedent != NULL && precedent->suivant != element) precedent = precedent->suivant; if(precedent == NULL) return; precedent->suivant = element->suivant; delete element; } void Afficher() { Element* element = liste; while(element != NULL) { cout << element->valeur << "\t"; element = element->suivant; } cout << endl; } int main(void) { Element* e; Ajouter(1); Ajouter(2); Ajouter(3); Ajouter(4); Ajouter(5); Afficher(); e = Rechercher(5); Supprimer(e); Afficher(); system("pause"); return 0; }
La bibliothèque standard du C++ comprend déjà une implémentation de liste chaînée (std::list), qui te permet de ne pas avoir à recopier tout le code que tu nous montres là à chaque fois que tu veux utiliser une liste chaînée dans un de tes programmes.
Entraîne-toi à utiliser std::list, tu verras, c'est très pratique.
Enfin, pour trier ta liste, tu pourras utiliser un des algorithmes de la STL. Là, c'est un peu plus compliqué… mais c'est comme ça qu'on fait du joli code C++ !
Tu peux me guidé ?
Bien sûr que je peux. Le forum est là pour ça !
Mais il faut aussi que tu y mettes du tiens. As-tu cherché un cours sur les conteneurs de la STL (std::list, std::vector, etc.) ?
L'aide sur developpez.com:
FAQ STL
Tutoriel sur la STL
Algos de tri de la STL
Cours C++ (partie STL)
Ailleurs:
STL
CPP reference
Avec ça tu devrais trouver ton bonheur.
Pour commencer
créer ton conteneur d'entier : std::list<int>
Ta fonction Ajout : push_back()
Ta fonction Rechercher : find()
Ta fonction Supprimer : remove()
Ta fonction Afficher va s'appuyer sur les iterator de list (cf : begin() et end())
Montres nous ce que tu as fait, et nous t'aiderons.
--
Jérémie
ce serait pas un exercice de cours? et genre en C et non en C++?
Es tu sur de vouloir une std::list ?
La première chose à faire dans ton cas est de choisir le bon container de la STL.
Pour t'aider regarde ce diagramme.
Tu veux que tes éléments soient trié à l'insertion, un std::set (plutôt qu'une liste) peut être intéressant dans ce cas (surtout que tu veut faire des suppressions).
Et pour apprendre à t'en servir regarde les liens cités plus haut.
Un exemple:
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 #include <set> #include <iostream> using namespace std; void main() { set<int> ma_liste; //par défaut trié par ordre croissant //pour un ordre décroissant : set<int,greater<int> > ma_liste.insert(1); ma_liste.insert(8); ma_liste.insert(5); ma_liste.insert(3); set<int>::const_iterator it; for(it=ma_liste.begin();it!=ma_liste.end();++it) { cout<<*it<<endl; } /* résultat: 1 3 5 8 */ //la suppression n'est pas plus difficile }