2021-12-18 13:51:28 +01:00
|
|
|
#include "liste.h"
|
|
|
|
|
2021-12-19 12:55:24 +01:00
|
|
|
void ajouterLettre(Liste *liste, char lettre) {
|
|
|
|
Cellule *curseur = *liste;
|
|
|
|
if (curseur == NULL) { // si liste vide, on créer juste une nouvelle cellule
|
|
|
|
*liste = allouerCellule(lettre);
|
|
|
|
} else {
|
|
|
|
while (curseur->suivant != NULL && curseur->lettre != lettre) // tant qu'on est pas à la fin de la liste ou qu'on n'a pas atteint la lettre
|
|
|
|
curseur = curseur->suivant; // on avance dans la liste
|
2021-12-19 13:34:50 +01:00
|
|
|
if(curseur->suivant == NULL && curseur->lettre != lettre) // si élément pas dans la liste (on a atteint la fin de la liste et on est pas sur la lettre)
|
2021-12-19 12:55:24 +01:00
|
|
|
curseur->suivant = allouerCellule(lettre); // on rajoute la lettre
|
|
|
|
else // sinon c'est que on a trouvé la lettre
|
|
|
|
curseur->frequence++; // on incrémente de 1 la fréquence de la lettre
|
|
|
|
}
|
2021-12-18 13:51:28 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
Cellule *allouerCellule(char lettre) {
|
|
|
|
Cellule *nouvelleCellule;
|
|
|
|
if ((nouvelleCellule = (Cellule*)malloc(sizeof(Cellule))) == NULL) {
|
2021-12-18 13:52:33 +01:00
|
|
|
printf("Impossible d'allouer de la mémoire supplémentaire.\n");
|
2021-12-18 13:51:28 +01:00
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
nouvelleCellule->lettre = lettre;
|
|
|
|
nouvelleCellule->frequence = 1; // fréquence par défaut
|
|
|
|
nouvelleCellule->gauche = NULL;
|
|
|
|
nouvelleCellule->droite = NULL;
|
|
|
|
nouvelleCellule->suivant = NULL;
|
|
|
|
|
|
|
|
return nouvelleCellule;
|
|
|
|
}
|
|
|
|
|
|
|
|
void afficherListe(Liste liste, FILE *fichier) {
|
2021-12-19 13:11:32 +01:00
|
|
|
for (; liste != NULL; liste = (*liste).suivant) // on parcours la liste
|
2021-12-19 13:02:10 +01:00
|
|
|
fprintf(fichier, "Lettre `%c` ⋅ %d\n", (*liste).lettre, (*liste).frequence); // on affiche l'élément actuel (lettre + fréquence)
|
2021-12-18 13:51:28 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void viderListe(Liste liste) {
|
2021-12-19 19:26:27 +01:00
|
|
|
Cellule *curseur = liste;
|
|
|
|
Cellule *precedent;
|
|
|
|
while (curseur != NULL) { // parcours de la liste
|
|
|
|
precedent = curseur;
|
|
|
|
curseur = curseur->suivant; // on va au suivant
|
|
|
|
free(precedent); // on supprime l'ancien
|
|
|
|
}
|
2021-12-18 13:51:28 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void trierListe(Liste *liste) {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void ajouterEnTete(Liste *liste, Cellule *cellule) {
|
|
|
|
|
|
|
|
}
|