TP4 WIP
La fonction insérer n'est pas correcte
This commit is contained in:
parent
d4af7955e5
commit
b464da4e57
3
TP4/.gitignore
vendored
Normal file
3
TP4/.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
listeNonTriees
|
||||||
|
listeTriees
|
||||||
|
listeTrieesFichier
|
9
TP4/Makefile
Normal file
9
TP4/Makefile
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
all: $(patsubst %.c,%,$(shell ls *.c))
|
||||||
|
|
||||||
|
%: %.c
|
||||||
|
clang -Wall -Wextra $< -o $@
|
||||||
|
|
||||||
|
.PHONY: all clean
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm *.exe
|
17
TP4/entree.txt
Normal file
17
TP4/entree.txt
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
41
|
||||||
|
3
|
||||||
|
29
|
||||||
|
23
|
||||||
|
37
|
||||||
|
5
|
||||||
|
59
|
||||||
|
31
|
||||||
|
17
|
||||||
|
53
|
||||||
|
11
|
||||||
|
7
|
||||||
|
43
|
||||||
|
13
|
||||||
|
19
|
||||||
|
47
|
||||||
|
2
|
92
TP4/listeNonTriees.c
Normal file
92
TP4/listeNonTriees.c
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
#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);
|
||||||
|
}
|
123
TP4/listeTriees.c
Normal file
123
TP4/listeTriees.c
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
#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);
|
||||||
|
}
|
107
TP4/listeTrieesFichier.c
Normal file
107
TP4/listeTrieesFichier.c
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
#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);
|
||||||
|
}
|
Reference in a new issue