diff --git a/source_codes/sorted_lists/.gitignore b/source_codes/sorted_lists/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..eea418347ec18b704a33e23b698d5b162df88fd3
--- /dev/null
+++ b/source_codes/sorted_lists/.gitignore
@@ -0,0 +1,2 @@
+sorted_list_partiel
+sorted_list_full
diff --git a/source_codes/sorted_lists/Makefile b/source_codes/sorted_lists/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..d7822ac93c5aaf6b38512758abde6dae01881871
--- /dev/null
+++ b/source_codes/sorted_lists/Makefile
@@ -0,0 +1,18 @@
+CC:=gcc
+# SAN:=-fsanitize=address
+CFLAGS:=-Wall -Wextra -pedantic -g $(SAN)
+LDFLAGS:=-lm $(SAN)
+
+EXECS := $(shell find . -type f -iname '*.c' | sed 's/\.c//g')
+
+all: $(EXECS)
+
+$(EXECS): %: %.c
+ $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS)
+ @echo $@ >> .gitignore
+
+.PHONY: clean all
+
+clean:
+ rm -f *.o $(EXECS) .gitignore
+
diff --git a/source_codes/sorted_lists/sorted_list_full.c b/source_codes/sorted_lists/sorted_list_full.c
index 758000f9e1cb3f875ed4c688fdf040c463339d5f..0afad52fc80e721b07b6c425877394fdd3d64d21 100644
--- a/source_codes/sorted_lists/sorted_list_full.c
+++ b/source_codes/sorted_lists/sorted_list_full.c
@@ -1,110 +1,114 @@
-#include <stdio.h>
-#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
typedef struct _element {
- int n;
- struct _element* suivant;
+ int n;
+ struct _element *suivant;
} element;
-typedef element* liste;
+typedef element *liste;
// Crée une liste vide
liste liste_creer() {
- return NULL;
+ return NULL;
}
// Teste si la liste vide
bool liste_est_vide(liste lst) {
- return NULL == lst;
+ return NULL == lst;
}
// Retourne un pointeur sur l'élement avant l'emplacement d'insertion;
-// ce pointeur est nul si la liste est vide ou si l'insertion est en tête de liste
-element* position(liste lst,int val) {
- element* pos = lst;
- if (liste_est_vide(lst) || val <= lst->n) {
- pos = NULL;
- } else {
- while (NULL != pos->suivant && val > pos->suivant->n) {
- pos = pos->suivant;
- }
- }
- return pos;
+// ce pointeur est nul si la liste est vide ou si l'insertion est en tête de
+// liste
+element *position(liste lst, int val) {
+ element *pos = lst;
+ if (liste_est_vide(lst) || val <= lst->n) {
+ pos = NULL;
+ } else {
+ while (NULL != pos->suivant && val > pos->suivant->n) {
+ pos = pos->suivant;
+ }
+ }
+ return pos;
}
// Insère un élément dans la liste triée et retourne la liste mise à jour
-liste liste_inserer(liste lst,int val) {
- element* tmp = malloc(sizeof(element));
- tmp->n = val;
- element* crt = position(lst,val);
- if (NULL == crt) { // insertion dans une liste vide ou en tête de liste
- tmp->suivant = lst;
- lst = tmp;
- } else { // insertion au milieu ou en fin de liste
- tmp->suivant = crt->suivant;
- crt->suivant = tmp;
- }
- return lst;
+liste liste_inserer(liste lst, int val) {
+ element *tmp = malloc(sizeof(element));
+ tmp->n = val;
+ element *crt = position(lst, val);
+ if (NULL == crt) { // insertion dans une liste vide ou en tête de liste
+ tmp->suivant = lst;
+ lst = tmp;
+ } else { // insertion au milieu ou en fin de liste
+ tmp->suivant = crt->suivant;
+ crt->suivant = tmp;
+ }
+ return lst;
}
// Extrait un élément avec la valeur <val> et retourne la liste mise à jour;
-// la liste est inchangée si elle est initialement vide
+// la liste est inchangée si elle est initialement vide
// ou si la valeur est absente
-liste liste_extraire(liste lst,int val) {
- element *crt = lst, *prec = lst;
- // boucle pour placer <val>: prec->n < val <= crt->n
- while (NULL != crt && val > crt->n) {
- prec = crt;
- crt = crt->suivant;
- }
- // liste non-vide et <val> présente de la liste
- if (NULL != crt && val == crt->n) {
- if (crt == prec) { // extraction en début de liste
- lst = lst->suivant;
- } else { // extraction en milieu ou fin de liste
- prec->suivant = crt->suivant;
- }
- free(crt);
- }
- return lst;
+liste liste_extraire(liste lst, int val) {
+ element *crt = lst, *prec = lst;
+ // boucle pour placer <val>: prec->n < val <= crt->n
+ while (NULL != crt && val > crt->n) {
+ prec = crt;
+ crt = crt->suivant;
+ }
+ // liste non-vide et <val> présente de la liste
+ if (NULL != crt && val == crt->n) {
+ if (crt == prec) { // extraction en début de liste
+ lst = lst->suivant;
+ } else { // extraction en milieu ou fin de liste
+ prec->suivant = crt->suivant;
+ }
+ free(crt);
+ }
+ return lst;
}
// Retourne un pointeur sur l'élément qui contient <val> ou un pointeur nul
// si la liste est vide ou la valeur absente
-element* liste_recherche(liste lst,int val) {
- // à compléter
- return NULL;
+element *liste_recherche(liste lst, int val) {
+ // à compléter
+ return NULL;
}
-// Imprime le contenu de la liste
+// Imprime le contenu de la liste
void print(liste lst) {
- element* crt = lst;
- while (NULL != crt) {
- printf("%d ",crt->n);
- crt = crt->suivant;
- }
+ element *crt = lst;
+ while (NULL != crt) {
+ printf("%d ", crt->n);
+ crt = crt->suivant;
+ }
}
-int main(int argc, char** argv) {
- liste lst = liste_creer();
- char str[20];
- do {
- printf("Insert: ");
- scanf("%s", str);
- if (0 == strcmp("quit",str)) break;
- lst = liste_inserer(lst,atoi(str));
- print(lst);
- printf("\n");
- } while (true);
- do {
- printf("Extract: ");
- scanf("%s", str);
- if (0 == strcmp("quit",str)) break;
- lst = liste_extraire(lst,atoi(str));
- print(lst);
- printf("\n");
- } while (true);
- return 0;
+int main(int argc, char **argv) {
+ liste lst = liste_creer();
+ char str[20];
+ do {
+ printf("Insert: ");
+ scanf("%s", str);
+ if (0 == strcmp("quit", str))
+ break;
+ lst = liste_inserer(lst, atoi(str));
+ print(lst);
+ printf("\n");
+ } while (true);
+ do {
+ printf("Extract: ");
+ scanf("%s", str);
+ if (0 == strcmp("quit", str))
+ break;
+ lst = liste_extraire(lst, atoi(str));
+ print(lst);
+ printf("\n");
+ } while (true);
+ return 0;
}
diff --git a/source_codes/sorted_lists/sorted_list_partiel.c b/source_codes/sorted_lists/sorted_list_partiel.c
index 773e80f39c19b6113d77280769456eb3868bf6ff..7934f8d7afbe494570ccb5a49d1f52be2b38b9a4 100644
--- a/source_codes/sorted_lists/sorted_list_partiel.c
+++ b/source_codes/sorted_lists/sorted_list_partiel.c
@@ -1,103 +1,107 @@
-#include <stdio.h>
-#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
typedef struct _element {
- int n;
- struct _element* suivant;
+ int n;
+ struct _element *suivant;
} element;
-typedef element* liste;
+typedef element *liste;
// Crée une liste vide
liste liste_creer() {
- return NULL;
+ return NULL;
}
// Teste si la liste vide
bool liste_est_vide(liste lst) {
- return NULL == lst;
+ return NULL == lst;
}
// Retourne un pointeur sur l'élement avant l'emplacement d'insertion;
-// ce pointeur est nul si la liste est vide ou si l'insertion est en tête de liste
-element* position(liste lst,int val) {
- element* pos = lst;
- if (liste_est_vide(lst) || val <= lst->n) {
- pos = NULL;
- } else {
- while (NULL != pos->suivant && val > pos->suivant->n) {
- pos = pos->suivant;
- }
- }
- return pos;
+// ce pointeur est nul si la liste est vide ou si l'insertion est en tête de
+// liste
+element *position(liste lst, int val) {
+ element *pos = lst;
+ if (liste_est_vide(lst) || val <= lst->n) {
+ pos = NULL;
+ } else {
+ while (NULL != pos->suivant && val > pos->suivant->n) {
+ pos = pos->suivant;
+ }
+ }
+ return pos;
}
// Insère un élément dans la liste triée et retourne la liste mise à jour
-liste liste_inserer(liste lst,int val) {
- element* tmp = malloc(sizeof(element));
- tmp->n = val;
- element* pos = position(lst,val);
- if (NULL == pos) { // insertion dans une liste vide ou en tête de liste
- // à compléter
- } else { // insertion au milieu ou en fin de liste
- // à compléter
- }
- return lst;
+liste liste_inserer(liste lst, int val) {
+ element *tmp = malloc(sizeof(element));
+ tmp->n = val;
+ element *pos = position(lst, val);
+ if (NULL == pos) { // insertion dans une liste vide ou en tête de liste
+ // à compléter
+ } else { // insertion au milieu ou en fin de liste
+ // à compléter
+ }
+ return lst;
}
// Extrait un élément avec la valeur <val> et retourne la liste mise à jour;
-// la liste est inchangée si elle est initialement vide
+// la liste est inchangée si elle est initialement vide
// ou si la valeur est absente
-liste liste_extraire(liste lst,int val) {
- element* prec = lst;
- element* crt = lst;
- // boucle pour placer <val>: prec->n < val <= crt->n
- // à compléter
-
- // liste non-vide et <val> présente de la liste
- if (NULL != crt && val == crt->n) {
- if (crt == prec) { // extraction en début de liste
- lst = lst->suivant;
- } else { // extraction en milieu ou fin de liste
- prec->suivant = crt->suivant;
- }
- free(crt);
- }
- return lst;
+liste liste_extraire(liste lst, int val) {
+ element *prec = lst;
+ element *crt = lst;
+ // boucle pour placer <val>: prec->n < val <= crt->n
+ // à compléter
+
+ // liste non-vide et <val> présente de la liste
+ if (NULL != crt && val == crt->n) {
+ if (crt == prec) { // extraction en début de liste
+ lst = lst->suivant;
+ } else { // extraction en milieu ou fin de liste
+ prec->suivant = crt->suivant;
+ }
+ free(crt);
+ }
+ return lst;
}
// Retourne un pointeur sur l'élément qui contient <val> ou un pointeur nul
// si la liste est vide ou la valeur absente
-element* liste_recherche(liste lst,int val) {
- // à compléter
- return NULL;
+element *liste_recherche(liste lst, int val) {
+ // à compléter
+ return NULL;
}
-// Imprime le contenu de la liste
+// Imprime le contenu de la liste
void print(liste lst) {
- //à compléter
+ //à compléter
}
-int main(int argc, char** argv) {
- liste lst = liste_creer();
- char str[20];
- do {
- printf("Insert: ");
- scanf("%s", str);
- if (0 == strcmp("quit",str)) break;
- lst = liste_inserer(lst,atoi(str));
- print(lst);
- printf("\n");
- } while (true);
- do {
- printf("Extract: ");
- scanf("%s", str);
- if (0 == strcmp("quit",str)) break;
- lst = liste_extraire(lst,atoi(str));
- print(lst);
- printf("\n");
- } while (true);
- return 0;
+int main(int argc, char **argv) {
+ liste lst = liste_creer();
+ char str[20];
+ do {
+ printf("Insert: ");
+ scanf("%s", str);
+ if (0 == strcmp("quit", str))
+ break;
+ lst = liste_inserer(lst, atoi(str));
+ print(lst);
+ printf("\n");
+ } while (true);
+ do {
+ printf("Extract: ");
+ scanf("%s", str);
+ if (0 == strcmp("quit", str))
+ break;
+ lst = liste_extraire(lst, atoi(str));
+ print(lst);
+ printf("\n");
+ } while (true);
+ return 0;
}