je suis un débutant en programmation en C. je suis sur un problème qui traite sur les listes chainées, en effet il faut ranger les éléments du champ val dans l'ordre croissant après leur saisie. j'ai joint a ce message le code source que j'ai saisi et j'espère ferment avoir une solution a mon problème. en fait après avoir compilé ce projet a l'exécution vous remarquerz qu'après la saisie des éléments, au moment de l'affichage c'est la même valeur du 1er minimum trouvé qui revient à chaque fois et je ne sais que faire. s'il vous plait c'est très urgent et important pour moi.
types.htrier.c
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 #ifndef __TYPES_H #define __TYPES_H typedef struct Listes{ int val; struct Listes *next; } Liste; typedef Liste *liste; liste ajouter(liste les); liste trier (liste la); void afficher(liste la); #endifajouter.c
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 #include <stdlib.h> #include "types.h" #include <stddef.h> liste trier(liste la) {// ici on va ranger les elemants dans l'ordre croisssant avant de les afficher... liste temp, temp1, temp3; int min, a; temp3=(liste)malloc(sizeof(Liste)); temp1=(liste)malloc(sizeof(Liste)); temp=la; while(temp!=NULL) { min=temp->val; temp1=temp->next; while(temp1!=NULL) { if(min > temp1->val) { temp3=temp1; // le 3è tempraire me permet de savoir l'adresse de l'élement ou j'ai reperé le minimum pour faciliter l'échange min=temp3->val; } temp1=temp1->next; } //a ce niveau je sors de la 2iem boucle a=temp->val; //echange des 2 elements... temp->val=min; temp3->val=a; temp=temp->next; } return la; }afficher.c
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 #include <stdlib.h> #include "types.h" #include <stddef.h> liste ajouter(liste les) { liste nouveau; liste temp; nouveau=(liste)malloc(sizeof(Liste)); // nouveau=NULL; temp=les; printf("Valeur:\t"); scanf("%d", &(nouveau->val)); nouveau->next=NULL; if (les==NULL) { printf("Initialisation...\n"); return nouveau; } else { while(temp->next!=NULL) temp=temp->next; temp->next=nouveau; return les; } }
main.c
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #include <stdlib.h> #include "types.h" #include <stddef.h> void afficher(liste la) { liste tem; tem=la; while(tem!=NULL) { printf("%3d\t", la->val); tem=tem->next; } }
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 #include <stdio.h> #include <stdlib.h> #include "types.h" #include <stddef.h> int main(int argc, char *argv[]) { int a; liste l; l=(liste)malloc(sizeof(Liste)); l=NULL; printf("******************* MENU *******************\n"); m: printf("\t\t1: Saisir des elements \n"); printf("\t\t2: affiche les elements saisis \n"); printf("\t\tAutre: SORTIE \n"); printf("Votre choix:\t"); scanf("%d", &a); switch (a) { case 1: { l=ajouter( l); goto m; break; } case 2: { l= trier(l); afficher(l); goto m; break; } default : goto s; break; } s: system("PAUSE"); return 0; }
Partager