Bonjour,
J'ai fait une fonction qui doit créer une liste chainé avec une chaine de caractère passé en paramètre. Chaque caractère de la chaine étant unique dans la liste, seul le nombre d'occurrence change lorsque 2 fois la même lettre est trouvé. Seulement lors de l'exécution le programme plante d'un coup (je suis sous windows). Voici le code des 2 fonctions:
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 liste liste_caractere (const char *chaine) { liste l = NULL; arbrepoids ap; int n = 256; char *tab = malloc(n * sizeof (char)); int nb_car_differents = 0; int ind1_chaine = 0; int ind2_chaine = 0, frequence = 0; int i = 0; /* Tant que l'on n'arrive pas a la fin de la chaine */ while (chaine[ind1_chaine] != '\0') { /* On calcul la frequence du caractere */ frequence = 0; ind2_chaine = 0; while (chaine[ind2_chaine] != '\0') { if (chaine[ind2_chaine] == chaine[ind1_chaine]) { frequence++; } ind2_chaine++; } ap.element = feuille (chaine[ind1_chaine]); ap.poids = frequence; /* On verifie que l'element n'a pas deja ete ajoute a la liste */ for (i=0;i<=nb_car_differents;i++) { /* Si on ne l'a pas trouve */ if (i == nb_car_differents) { l = creer_liste (ap, l); nb_car_differents++; tab[i] = ap.element->data; break; } /* Si on l'a trouve */ if (ap.element->data == tab[i]) { break; } } ind1_chaine++; } free (tab); tab = NULL; return l; }Et les structures et les fonctions feuille et noeud qui vont avec:
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 liste creation_liste (arbrepoids e, liste l) { /* Allocation memoire */ liste ma_liste = malloc (sizeof (ma_liste)); if (ma_liste) { liste ptr_l = l; ma_liste->data = e; ma_liste->suivant = NULL; /* Cas de l'insertion dans une liste nulle */ if (l == NULL) { return ma_liste; } /* Cas de l'insertion en tete de liste */ if (ma_liste->data.poids < ptr_l->data.poids) { ma_liste->suivant = ptr_l; return ma_liste; } /* Cas autres */ while (ptr_l->suivant != NULL && ptr_l->suivant->data.poids < ma_liste->data.poids) { ptr_l = ptr_l->suivant; } /* Insertion apres */ ma_liste->suivant = ptr_l->suivant; ptr_l->suivant = ma_liste; return l; } else { exit (0); } return NULL; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 typedef struct { arbre element; int poids; } arbrepoids;Merci à tout ceux qui pourront m'aider à trouver ce qui va pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 typedef struct liste { arbrepoids data; struct liste *suivant; } *liste;![]()
Partager