diff --git a/arbre/Makefile b/arbre/Makefile index 35dcc5a..204e0b4 100644 --- a/arbre/Makefile +++ b/arbre/Makefile @@ -15,7 +15,7 @@ OBJ=$(patsubst src/%.c,obj/%.o,$(SRC)) #edition des liens : génération de l'exécutaba partir des .o bin/exe: $(OBJ) - $(CC) $(OBJ) -o $@ $(SAN) + $(CC) $(OBJ) -o $@ # génération des .a partir des .cpp et .hpporrespondants : obj/%.o: src/%.c diff --git a/arbre/bin/exe b/arbre/bin/exe index 539f137..33fb2cc 100755 Binary files a/arbre/bin/exe and b/arbre/bin/exe differ diff --git a/arbre/obj/arbre.o b/arbre/obj/arbre.o index fb44e54..8b4aeb4 100644 Binary files a/arbre/obj/arbre.o and b/arbre/obj/arbre.o differ diff --git a/arbre/obj/test.o b/arbre/obj/test.o index 534f876..a8a0e94 100644 Binary files a/arbre/obj/test.o and b/arbre/obj/test.o differ diff --git a/arbre/src/arbre.c b/arbre/src/arbre.c index 8a97f98..801e24b 100644 --- a/arbre/src/arbre.c +++ b/arbre/src/arbre.c @@ -98,7 +98,7 @@ int r(Arbre a) // return a->v; } -int h(Arbre a)// +int h(Arbre a) // { if(vide(a)) { @@ -107,7 +107,7 @@ int h(Arbre a)// return 1 + max(h(ag(a)), h(ad(a))); } -bool f(Arbre a)// +bool f(Arbre a) // { if(vide(a)) { @@ -116,7 +116,7 @@ bool f(Arbre a)// return vide(ag(a)) && vide(ad(a)); } -int nf(Arbre a)// +int nf(Arbre a) // { if(vide(a)) { @@ -156,21 +156,21 @@ Arbre ed(Arbre a) // return ed(ad(a)); } -int nn(Arbre a)// +int nn(Arbre a) // { if(vide(a)) return 0; return 1 + nn(ag(a)) + nn(ad(a)); } -int max(int a, int b)// +int max(int a, int b) // { if(a >= b) return a; return b; } -bool egarb(Arbre a, Arbre b)// +bool egarb(Arbre a, Arbre b) // { if(vide(a) && vide(b)) return true; @@ -179,7 +179,7 @@ bool egarb(Arbre a, Arbre b)// return r(a) == r(b) && egarb(ag(a),ag(b)) && egarb(ad(a), ad(b)); } -Arbre insf(Arbre a, int x)// +Arbre insf(Arbre a, int x) // { if(vide(a)) { @@ -247,7 +247,7 @@ Arbre oterMax(Arbre a) // return a; } -Arbre rech(Arbre a, int x)// +Arbre rech(Arbre a, int x) // { if(vide(a) || r(a) == x) return a; @@ -345,3 +345,56 @@ int deseq(Arbre a) return 0; return h(ag(a)) - h(ad(a)); } + +Arbre insr(Arbre a, int x) +{ + Couple c; + + c = couper(a, x); + return reeq(e(c.c1, x, c.c2)); +} +Couple couper(Arbre a, int x) +{ + Couple c; + Couple d; + + if(vide(a)) + { + c.c1 = arbreNouv(); + c.c2 = arbreNouv(); + return c; + } + if(x == r(a)) + { + c.c1 = ag(a); + c.c2 = ad(a); + return c; + } + if(x < r(a)) + { + d = couper(ag(a), x); + c.c1 = d.c1; + c.c2 = e(d.c2, r(a), ad(a)); + return c; + } + d = couper(ad(a), x); + c.c1 = e(ag(a), r(a), d.c1); + c.c2 = d.c2; + return c; +} +Arbre oterMin(Arbre a) +{ + Arbre tmp; + + if(vide(a)) + return a; + if(vide(ag(a))) + { + tmp = ad(a); + free(a); + return tmp; + } + a->g = oterMin(a->g); + return a; +} + diff --git a/arbre/src/arbre.h b/arbre/src/arbre.h index 6581b05..66ef8c6 100644 --- a/arbre/src/arbre.h +++ b/arbre/src/arbre.h @@ -7,33 +7,42 @@ typedef struct maillon int v; } Maillon, *Arbre; -Arbre arbreNouv(void); -bool vide(Arbre a); -void afficherRacine(int v, int k); -Arbre e(Arbre a, int x, Arbre b); -void afficherArbre(Arbre a); -void afficherArb(Arbre a, int k); -Arbre ag(Arbre a); -Arbre ad(Arbre a); -int r(Arbre a); -int max(int a, int b); -int nn(Arbre a); -bool f(Arbre a); -int nf(Arbre a); -Arbre eg(Arbre a); -Arbre ed(Arbre a); -int h(Arbre a); -void viderArbre(Arbre a); -int nn(Arbre a); -bool egarb(Arbre a, Arbre b); -Arbre insf(Arbre a, int x); -Arbre supp(Arbre a, int x); -Arbre oterMax(Arbre a); -Arbre rech(Arbre a, int x); -bool trie(Arbre a); -Arbre rd(Arbre a); -Arbre rg(Arbre a); -Arbre rgd(Arbre a); -Arbre rdg(Arbre a); -Arbre reeq(Arbre a); -int deseq(Arbre a); +typedef struct +{ + Arbre c1; + Arbre c2; +} Couple; + +Arbre arbreNouv(void);// +bool vide(Arbre a);// +void afficherRacine(int v, int k);// +Arbre e(Arbre a, int x, Arbre b);// +void afficherArbre(Arbre a);// +void afficherArb(Arbre a, int k);// +Arbre ag(Arbre a);// +Arbre ad(Arbre a);// +int r(Arbre a);// +int max(int a, int b);// +int nn(Arbre a);// +bool f(Arbre a);// +int nf(Arbre a);// +Arbre eg(Arbre a);// +Arbre ed(Arbre a);// +int h(Arbre a);// +void viderArbre(Arbre a);// +int nn(Arbre a);// +bool egarb(Arbre a, Arbre b);// +Arbre insf(Arbre a, int x);// +Arbre supp(Arbre a, int x);// +Arbre oterMax(Arbre a);// +Arbre rech(Arbre a, int x);// +bool trie(Arbre a);// +Arbre rd(Arbre a);// +Arbre rg(Arbre a);// +Arbre rgd(Arbre a);// +Arbre rdg(Arbre a);// +Arbre reeq(Arbre a);// +int deseq(Arbre a);// +Arbre insr(Arbre a, int x);// +Couple couper(Arbre a, int x);// +Arbre oterMin(Arbre a);// diff --git a/arbre/src/test.c b/arbre/src/test.c index 88f6b24..a02a228 100644 --- a/arbre/src/test.c +++ b/arbre/src/test.c @@ -31,15 +31,16 @@ void testTri(bool a) int main(void) { Arbre Arbre1 = arbreNouv(); - Arbre1 = insf(Arbre1, 5); - Arbre1 = insf(Arbre1, 6); - Arbre1 = insf(Arbre1, 7); - /*Arbre1 = insf(Arbre1, 8); - Arbre1 = insf(Arbre1, 9); + Arbre1 = insf(Arbre1, 11); Arbre1 = insf(Arbre1, 10); - Arbre1 = insf(Arbre1, 12);*/ + Arbre1 = insf(Arbre1, 9); + Arbre1 = insf(Arbre1, 8); + Arbre1 = insf(Arbre1, 7); + Arbre1 = insf(Arbre1, 6); + Arbre1 = insf(Arbre1, 5); + afficherArbre(Arbre1); + oterMin(Arbre1); afficherArbre(Arbre1); - testTri(trie(Arbre1)); viderArbre(Arbre1); return 0; } diff --git a/graphe/Makefile b/graphe/Makefile index 35dcc5a..8f0d62f 100644 --- a/graphe/Makefile +++ b/graphe/Makefile @@ -15,7 +15,7 @@ OBJ=$(patsubst src/%.c,obj/%.o,$(SRC)) #edition des liens : génération de l'exécutaba partir des .o bin/exe: $(OBJ) - $(CC) $(OBJ) -o $@ $(SAN) + $(CC) $(OBJ) -o $@ #$(SAN) # génération des .a partir des .cpp et .hpporrespondants : obj/%.o: src/%.c diff --git a/graphe/bin/exe b/graphe/bin/exe index 7578396..f6e7993 100755 Binary files a/graphe/bin/exe and b/graphe/bin/exe differ diff --git a/graphe/obj/graphe.o b/graphe/obj/graphe.o index f17ea47..4bbdd75 100644 Binary files a/graphe/obj/graphe.o and b/graphe/obj/graphe.o differ diff --git a/graphe/obj/liste.o b/graphe/obj/liste.o index 862b8d2..d7ef3e5 100644 Binary files a/graphe/obj/liste.o and b/graphe/obj/liste.o differ diff --git a/graphe/obj/main.o b/graphe/obj/main.o index f90438e..9e35acf 100644 Binary files a/graphe/obj/main.o and b/graphe/obj/main.o differ diff --git a/graphe/src/main.c b/graphe/src/main.c index 927b48d..c140099 100644 --- a/graphe/src/main.c +++ b/graphe/src/main.c @@ -33,7 +33,7 @@ void testGraphe() g = adjs(g, 3); g = adjs(g, 6); - // g = adjs(g, 3); marche pas (normal) + g = adjs(g, 3); g = adjs(g, 9); g = adjs(g, 8); g = adjs(g, 15); @@ -52,19 +52,18 @@ void testGraphe() g = adja(g, 9, 6); g = adja(g, 9, 15); g = adja(g, 23, 15); - // Test existe - // if(exa(g, 3, 5)) - // printf("exa marche pas\n"); - // else - // printf("exa marche\n"); - // if(exa(g, 3, 6)) - // printf("exa marche\n"); - // else - // printf("exa marche pas\n"); + if(exa(g, 3, 5)) + printf("exa marche pas\n"); + else + printf("exa marche\n"); + if(exa(g, 3, 6)) + printf("exa marche\n"); + else + printf("exa marche pas\n"); afficherGraphe(g); g = supa(g, 9, 6); afficherGraphe(g); - // g = sups(g, 15); fonctionne pas (normal) + g = sups(g, 15); g = supa(g, 3, 6); g = sups(g, 3); afficherGraphe(g);