Bonjours tous,
Alors ça fait deux jours que je sèche sur quelques points, je me suis dit qu'il est temps de demander de l'aide.
D'abord le code des fonctions :
alors pour vérifier le bon fonctionnement de ces fonctions, j'ai fait plusieurs versions du "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
68 //------------------------------------------- ///définir la structure //------------------------------------------- typedef struct pile { int valeur; struct pile *prec; } pile ; //------------------------------------------- /// intitialiser la pile à NULL //------------------------------------------- pile *MaPile = NULL; //------------------------------------------ ///fonction d'ajout dans la liste chaînée //------------------------------------------- pile * add(pile ** p,int val) { pile * n=malloc(sizeof(pile)); n->prec= *p; *p=n; n->valeur= val; return *p;} //-------------------------------------------- ///fonction de parcours dans une liste chaînée //-------------------------------------------- void parcours(pile **p){ do { int val= (*p)->valeur; printf("%d\n",val); *p=(*p)->prec; }while(*p); } //---------------------------------------------- ///fonction de suppression dans une listee chaînée //---------------------------------------------- void efface(pile **p){ pile * n= *p; *p=(*p)->prec; //free(*p); } //---------------------------------------------- ///fonction de recherche dans une liste chaînée //---------------------------------------------- void search(pile **p, int val){ int b=0; while(*p != NULL) { if((*p)->valeur==val) { b=1; } *p=(*p)->prec; } if(b==1) printf(" it's 1"); if(b==0) printf("it's 0"); }
1/
Qui marche à merveille, l'ajout se fait, le parcours aussi, l'affichage le prouve.
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 int main() { add(&MaPile, 1); add(&MaPile, 2); add(&MaPile, 3); //efface(&MaPile); printf("-----------\n"); parcours(&MaPile); printf("-----------\n"); return 0; }
2/
Un élément saute, la fonction effacer marche alors ! Super !
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 int main() { add(&MaPile, 1); add(&MaPile, 2); add(&MaPile, 3); efface(&MaPile); printf("-----------\n"); parcours(&MaPile); printf("-----------\n"); return 0; }
3/
Search ne marche pas, elle retourne 0, si d'ailleurs j'aurais initialiser b=5, elle aurait retourné 5, le teste ne se fait donc pas, ce que je ne comprends pas...
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 int main() { add(&MaPile, 1); add(&MaPile, 2); add(&MaPile, 3); //efface(&MaPile); printf("-----------\n"); parcours(&MaPile); printf("-----------\n"); search(&MaPile,1); return 0; }
4/
Là je compte parcourir la liste (le programme affichera alors 3,2,1), effacer un élément (qui sera 3) et reparcourir (ce qui devrait afficher 2.1), mais à ma grande surprise l'exe coïnce et me renvoie un message erreur : "pile.exe a cessé de fonctionner" !!
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 int main() { add(&MaPile, 1); add(&MaPile, 2); add(&MaPile, 3); printf("-----------\n"); parcours(&MaPile); printf("-----------\n"); efface(&MaPile); printf("\n-----------\n"); parcours(&MaPile); return 0; }
Je précise que j'utilise Code::blocks, version 10.05.
En attendant vos suggestions et réponses, merci de lire !![]()
Partager