Compare commits
2 commits
b464da4e57
...
5dbf29e0cd
Author | SHA1 | Date | |
---|---|---|---|
Geoffrey Frogeye | 5dbf29e0cd | ||
Geoffrey Frogeye | 7e86d5ff5b |
4
TP4/.gitignore
vendored
4
TP4/.gitignore
vendored
|
@ -1,3 +1 @@
|
|||
listeNonTriees
|
||||
listeTriees
|
||||
listeTrieesFichier
|
||||
questions
|
||||
|
|
|
@ -1,17 +1,34 @@
|
|||
41
|
||||
3
|
||||
29
|
||||
23
|
||||
37
|
||||
5
|
||||
59
|
||||
31
|
||||
17
|
||||
53
|
||||
11
|
||||
7
|
||||
43
|
||||
13
|
||||
19
|
||||
47
|
||||
2
|
||||
5
|
||||
-3
|
||||
-37
|
||||
-41
|
||||
-2
|
||||
-47
|
||||
59
|
||||
47
|
||||
-59
|
||||
-11
|
||||
-31
|
||||
43
|
||||
-53
|
||||
41
|
||||
53
|
||||
-43
|
||||
31
|
||||
-7
|
||||
-13
|
||||
3
|
||||
-5
|
||||
-19
|
||||
7
|
||||
-23
|
||||
19
|
||||
11
|
||||
-17
|
||||
37
|
||||
17
|
||||
23
|
||||
29
|
||||
-29
|
||||
|
|
|
@ -1,92 +0,0 @@
|
|||
#include<stdlib.h>
|
||||
#include<stdio.h>
|
||||
#include<stdbool.h>
|
||||
|
||||
// 2.1.1
|
||||
struct Cellule {
|
||||
struct Cellule* suiv;
|
||||
int val;
|
||||
};
|
||||
typedef struct Cellule Cellule;
|
||||
|
||||
// 2.1.2
|
||||
Cellule* init_cellule(int val) {
|
||||
Cellule* l;
|
||||
l = malloc(sizeof(Cellule));
|
||||
l->suiv = NULL;
|
||||
l->val = val;
|
||||
return l;
|
||||
}
|
||||
|
||||
void ajout_tete(Cellule** l, int val) {
|
||||
Cellule* p;
|
||||
p = malloc(sizeof(Cellule));
|
||||
p->val = val;
|
||||
p->suiv = *l;
|
||||
*l = p;
|
||||
}
|
||||
|
||||
// 2.1.3
|
||||
void imprimer(Cellule* l) {
|
||||
if (l == NULL) {
|
||||
return;
|
||||
}
|
||||
while (l->suiv != NULL) {
|
||||
printf("%d\n", l->val);
|
||||
l = l->suiv;
|
||||
}
|
||||
printf("%d\n", l->val);
|
||||
}
|
||||
|
||||
// 2.1.4
|
||||
bool est_trie(Cellule* l) {
|
||||
if (l == NULL) {
|
||||
return true;
|
||||
}
|
||||
int temp;
|
||||
while (l->suiv != NULL) {
|
||||
temp = l->val;
|
||||
l = l->suiv;
|
||||
if (l->val < temp) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// 2.1.5
|
||||
void supprimer_tete(Cellule** l) {
|
||||
Cellule* p;
|
||||
p = (*l)->suiv;
|
||||
free(*l);
|
||||
*l = p;
|
||||
}
|
||||
|
||||
// 2.1.6
|
||||
void desallouer(Cellule** l) {
|
||||
if (l == NULL) {
|
||||
return;
|
||||
}
|
||||
desallouer(&(*l)->suiv);
|
||||
free(*l);
|
||||
}
|
||||
|
||||
void desallouer2(Cellule** l) {
|
||||
while ((*l)->suiv != NULL) {
|
||||
supprimer_tete(l);
|
||||
}
|
||||
free(*l);
|
||||
}
|
||||
|
||||
int main() {
|
||||
|
||||
// 2.1.7
|
||||
Cellule* l = init_cellule(42);
|
||||
ajout_tete(&l, 43);
|
||||
ajout_tete(&l, 40);
|
||||
imprimer(l);
|
||||
printf("Est triée : %d\n", est_trie(l));
|
||||
supprimer_tete(&l);
|
||||
imprimer(l);
|
||||
desallouer2(&l);
|
||||
}
|
|
@ -1,123 +0,0 @@
|
|||
#include<stdlib.h>
|
||||
#include<stdio.h>
|
||||
#include<stdbool.h>
|
||||
|
||||
struct Cellule {
|
||||
struct Cellule* suiv;
|
||||
int val;
|
||||
};
|
||||
typedef struct Cellule Cellule;
|
||||
|
||||
Cellule* init_cellule(int val) {
|
||||
Cellule* l;
|
||||
l = malloc(sizeof(Cellule));
|
||||
l->suiv = NULL;
|
||||
l->val = val;
|
||||
return l;
|
||||
}
|
||||
|
||||
void ajout_tete(Cellule** l, int val) {
|
||||
Cellule* p;
|
||||
p = malloc(sizeof(Cellule));
|
||||
p->val = val;
|
||||
p->suiv = *l;
|
||||
*l = p;
|
||||
}
|
||||
|
||||
void imprimer(Cellule* l) {
|
||||
if (l == NULL) {
|
||||
return;
|
||||
}
|
||||
while (l->suiv != NULL) {
|
||||
printf("%d\n", l->val);
|
||||
l = l->suiv;
|
||||
}
|
||||
printf("%d\n", l->val);
|
||||
}
|
||||
|
||||
bool est_trie(Cellule* l) {
|
||||
if (l == NULL) {
|
||||
return true;
|
||||
}
|
||||
int temp;
|
||||
while (l->suiv != NULL) {
|
||||
temp = l->val;
|
||||
l = l->suiv;
|
||||
if (l->val < temp) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void supprimer_tete(Cellule** l) {
|
||||
Cellule* p;
|
||||
p = (*l)->suiv;
|
||||
free(*l);
|
||||
*l = p;
|
||||
}
|
||||
|
||||
void desallouer(Cellule** l) {
|
||||
while ((*l)->suiv != NULL) {
|
||||
supprimer_tete(l);
|
||||
}
|
||||
free(*l);
|
||||
}
|
||||
|
||||
// 2.2.1
|
||||
void inserer(Cellule** p, int val) {
|
||||
Cellule* l = *p;
|
||||
if (l == NULL) {
|
||||
l = init_cellule(val);
|
||||
return;
|
||||
}
|
||||
while (l->suiv != NULL && l->val < val) {
|
||||
p = &l->suiv;
|
||||
l = l->suiv;
|
||||
}
|
||||
if (l->val == val) {
|
||||
return;
|
||||
}
|
||||
if (l->suiv == NULL) {
|
||||
l->suiv = init_cellule(val);
|
||||
} else {
|
||||
ajout_tete(p, val);
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
// Création de la liste
|
||||
Cellule* l = init_cellule(59);
|
||||
ajout_tete(&l, 53);
|
||||
ajout_tete(&l, 47);
|
||||
ajout_tete(&l, 43);
|
||||
ajout_tete(&l, 41);
|
||||
ajout_tete(&l, 37);
|
||||
ajout_tete(&l, 31);
|
||||
ajout_tete(&l, 29);
|
||||
ajout_tete(&l, 23);
|
||||
ajout_tete(&l, 19);
|
||||
ajout_tete(&l, 17);
|
||||
ajout_tete(&l, 13);
|
||||
ajout_tete(&l, 11);
|
||||
ajout_tete(&l, 7);
|
||||
ajout_tete(&l, 5);
|
||||
ajout_tete(&l, 3);
|
||||
ajout_tete(&l, 2);
|
||||
if (!est_trie(l)) {
|
||||
printf("C'est pas trié !\n");
|
||||
}
|
||||
|
||||
// Test début, millieu et fin
|
||||
inserer(&l, 0);
|
||||
inserer(&l, 30);
|
||||
inserer(&l, 70);
|
||||
// Test redondance début, millieu et fin
|
||||
inserer(&l, 2);
|
||||
inserer(&l, 7);
|
||||
inserer(&l, 59);
|
||||
|
||||
imprimer(l);
|
||||
|
||||
desallouer(&l);
|
||||
}
|
|
@ -1,107 +0,0 @@
|
|||
#include<stdlib.h>
|
||||
#include<stdio.h>
|
||||
#include<stdbool.h>
|
||||
|
||||
struct Cellule {
|
||||
struct Cellule* suiv;
|
||||
int val;
|
||||
};
|
||||
typedef struct Cellule Cellule;
|
||||
|
||||
Cellule* init_cellule(int val) {
|
||||
Cellule* l;
|
||||
l = malloc(sizeof(Cellule));
|
||||
l->suiv = NULL;
|
||||
l->val = val;
|
||||
return l;
|
||||
}
|
||||
|
||||
void ajout_tete(Cellule** l, int val) {
|
||||
Cellule* p;
|
||||
p = malloc(sizeof(Cellule));
|
||||
p->val = val;
|
||||
p->suiv = *l;
|
||||
*l = p;
|
||||
}
|
||||
|
||||
void imprimer(Cellule* l) {
|
||||
if (l == NULL) {
|
||||
return;
|
||||
}
|
||||
while (l->suiv != NULL) {
|
||||
printf("%d\n", l->val);
|
||||
l = l->suiv;
|
||||
}
|
||||
printf("%d\n", l->val);
|
||||
}
|
||||
|
||||
bool est_trie(Cellule* l) {
|
||||
if (l == NULL) {
|
||||
return true;
|
||||
}
|
||||
int temp;
|
||||
while (l->suiv != NULL) {
|
||||
temp = l->val;
|
||||
l = l->suiv;
|
||||
if (l->val < temp) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void supprimer_tete(Cellule** l) {
|
||||
Cellule* p;
|
||||
p = (*l)->suiv;
|
||||
free(*l);
|
||||
*l = p;
|
||||
}
|
||||
|
||||
void desallouer(Cellule** l) {
|
||||
while ((*l)->suiv != NULL) {
|
||||
supprimer_tete(l);
|
||||
}
|
||||
free(*l);
|
||||
}
|
||||
|
||||
void inserer(Cellule** p, int val) {
|
||||
Cellule* l = *p;
|
||||
if (l == NULL) {
|
||||
l = init_cellule(val);
|
||||
return;
|
||||
}
|
||||
while (l->suiv != NULL && l->val < val) {
|
||||
p = &l->suiv;
|
||||
l = l->suiv;
|
||||
}
|
||||
if (l->val == val) {
|
||||
return;
|
||||
}
|
||||
if (l->suiv == NULL) {
|
||||
l->suiv = init_cellule(val);
|
||||
} else {
|
||||
ajout_tete(p, val);
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
if (argc != 2) {
|
||||
printf("Usage : %s FICHIER_ENTREE\n", argv[0]);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
FILE* fp;
|
||||
fp = fopen(argv[1], "r");
|
||||
if (fp == NULL) {
|
||||
printf("Impossible d'ouvrir le fichier %s.\n", argv[1]);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
Cellule* l = init_cellule(42);
|
||||
int val;
|
||||
while (fscanf(fp, "%d", &val) != EOF) {
|
||||
inserer(&l, val);
|
||||
}
|
||||
|
||||
imprimer(l);
|
||||
}
|
158
TP4/questions.c
Normal file
158
TP4/questions.c
Normal file
|
@ -0,0 +1,158 @@
|
|||
#include<stdlib.h>
|
||||
#include<stdio.h>
|
||||
#include<stdbool.h>
|
||||
|
||||
// 2.1.1
|
||||
struct Cellule {
|
||||
struct Cellule* suiv;
|
||||
int val;
|
||||
};
|
||||
typedef struct Cellule Cellule;
|
||||
|
||||
// 2.1.2
|
||||
void ajout_tete(Cellule** l, int val) {
|
||||
Cellule* p;
|
||||
p = malloc(sizeof(Cellule));
|
||||
p->val = val;
|
||||
p->suiv = *l;
|
||||
*l = p;
|
||||
}
|
||||
|
||||
// 2.1.3
|
||||
void imprimer(Cellule* l) {
|
||||
while (l != NULL) {
|
||||
printf("%d\n", l->val);
|
||||
l = l->suiv;
|
||||
}
|
||||
}
|
||||
|
||||
// 2.1.4
|
||||
bool est_trie(Cellule* l) {
|
||||
if (l == NULL) {
|
||||
return true;
|
||||
}
|
||||
int temp;
|
||||
while (l->suiv != NULL) {
|
||||
temp = l->val;
|
||||
l = l->suiv;
|
||||
if (l->val < temp) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// 2.1.5
|
||||
void supprimer_tete(Cellule** l) {
|
||||
Cellule* p;
|
||||
p = (*l)->suiv;
|
||||
free(*l);
|
||||
*l = p;
|
||||
}
|
||||
|
||||
// 2.1.6
|
||||
// Méthode itérative
|
||||
void desallouer(Cellule** l) {
|
||||
Cellule* next;
|
||||
Cellule* current = *l;
|
||||
while (current != NULL) {
|
||||
next = current->suiv;
|
||||
free(current);
|
||||
current = next;
|
||||
}
|
||||
}
|
||||
|
||||
// Méthode itérative, réutilise supprimer_tete
|
||||
void desallouer2(Cellule** l) {
|
||||
if (*l == NULL) {
|
||||
return;
|
||||
}
|
||||
while ((*l)->suiv != NULL) {
|
||||
supprimer_tete(l);
|
||||
}
|
||||
free(*l);
|
||||
}
|
||||
|
||||
// Méthode réccursive
|
||||
void desallouer3(Cellule** l) {
|
||||
if (*l == NULL) {
|
||||
return;
|
||||
}
|
||||
desallouer(&(*l)->suiv);
|
||||
free(*l);
|
||||
}
|
||||
|
||||
|
||||
// 2.2.1
|
||||
void inserer(Cellule** p, int val) {
|
||||
Cellule* l = *p;
|
||||
if (l == NULL) {
|
||||
ajout_tete(p, val);
|
||||
return;
|
||||
}
|
||||
while (l->suiv != NULL && l->val < val) {
|
||||
p = &l->suiv;
|
||||
l = l->suiv;
|
||||
}
|
||||
if (l->val == val) {
|
||||
return;
|
||||
} else if (l->val < val) {
|
||||
p = &l->suiv;
|
||||
}
|
||||
ajout_tete(p, val);
|
||||
}
|
||||
|
||||
// 2.2.2
|
||||
Cellule* lire_fichier(FILE * fp) {
|
||||
Cellule* l = NULL;
|
||||
int val;
|
||||
while (fscanf(fp, "%d", &val) != EOF) {
|
||||
inserer(&l, val);
|
||||
}
|
||||
return l;
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
if (argc != 2) {
|
||||
printf("Mode test de la partie 2.1.\n");
|
||||
printf("(pour tester la partie 2.2, utilisez : %s FICHIER_ENTREE)\n", argv[0]);
|
||||
|
||||
// 2.1.7
|
||||
Cellule* l = NULL;
|
||||
ajout_tete(&l, 42);
|
||||
ajout_tete(&l, 40);
|
||||
ajout_tete(&l, 43);
|
||||
imprimer(l);
|
||||
printf("Est triée : %d\n", est_trie(l));
|
||||
supprimer_tete(&l);
|
||||
imprimer(l);
|
||||
printf("Est triée : %d\n", est_trie(l));
|
||||
desallouer(&l);
|
||||
|
||||
} else {
|
||||
printf("Mode test de la partie 2.2.\n");
|
||||
printf("(pour tester la partie 2.1, utilisez : %s)\n", argv[0]);
|
||||
|
||||
FILE* fp;
|
||||
fp = fopen(argv[1], "r");
|
||||
if (fp == NULL) {
|
||||
printf("Impossible d'ouvrir le fichier %s.\n", argv[1]);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
Cellule * l = lire_fichier(fp);
|
||||
|
||||
fclose(fp);
|
||||
|
||||
imprimer(l);
|
||||
if (est_trie(l)) {
|
||||
printf("La liste est correctement triée.\n");
|
||||
} else {
|
||||
printf("Erreur: La liste n'est pas correctement triée.\n");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
desallouer(&l);
|
||||
}
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
Reference in a new issue