From 4217b12806c8e9c64bf0b6453e57718b098f52fb Mon Sep 17 00:00:00 2001 From: david <david@lipn.fr> Date: Mon, 9 Sep 2019 13:47:15 +0200 Subject: [PATCH] =?UTF-8?q?Ajout=20des=20fonctions=20d'augmentation=20et?= =?UTF-8?q?=20de=20r=C3=A9duction?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TP1/C/Makefile | 2 +- TP1/C/arraylist.c | 24 ++++++++++++++++-------- TP1/C/arraylist.h | 17 +++++++++++++++-- 3 files changed, 32 insertions(+), 11 deletions(-) diff --git a/TP1/C/Makefile b/TP1/C/Makefile index fff4771..cc6cead 100644 --- a/TP1/C/Makefile +++ b/TP1/C/Makefile @@ -1,5 +1,5 @@ CC= gcc -CXXFLAGS= -Wall -ansi --pedantic +CXXFLAGS= -Wall -ansi --pedantic -O3 CPP_O_FILE = arraylist.o analyzer.o main.o LIB = -lm diff --git a/TP1/C/arraylist.c b/TP1/C/arraylist.c index 20d2d6c..f77a800 100644 --- a/TP1/C/arraylist.c +++ b/TP1/C/arraylist.c @@ -21,10 +21,9 @@ void arraylist_destroy(arraylist_t * a){ char arraylist_append(arraylist_t * a, int x){ char memory_allocation = FALSE; if( a!=NULL ){ - if( arraylist_enlarging_capacity(a) ){ + if( arraylist_do_we_need_to_enlarge_capacity(a) ){ memory_allocation = TRUE; - a->capacity *= 2; - a->data = (int *) realloc(a->data, sizeof(int) * a->capacity); + arraylist_enlarge_capacity(a); } a->data[a->size++] = x; } @@ -34,10 +33,9 @@ char arraylist_append(arraylist_t * a, int x){ char arraylist_pop_back(arraylist_t * a){ char memory_reduction = FALSE; if( a!=NULL && a->size>0 ){ - if( arraylist_reducing_capacity(a) ){ + if( arraylist_do_we_need_to_reduce_capacity(a) ){ memory_reduction = TRUE; - a->capacity /= 2; - a->data = (int *) realloc(a->data, sizeof(int) * a->capacity); + arraylist_reduce_capacity(a); } a->size--; } @@ -57,10 +55,20 @@ size_t arraylist_get_size(arraylist_t * a){ return ( a!=NULL) ? a->size : -1; } -char arraylist_enlarging_capacity(arraylist_t * a){ +char arraylist_do_we_need_to_enlarge_capacity(arraylist_t * a){ return ( a->size >= (a->capacity * 3)/4 )? TRUE: FALSE; } -char arraylist_reducing_capacity(arraylist_t * a){ +void arraylist_enlarge_capacity(arraylist_t * a){ + a->capacity *= 2; + a->data = (int *) realloc(a->data, sizeof(int) * a->capacity); +} + +char arraylist_do_we_need_to_reduce_capacity(arraylist_t * a){ return ( a->size <= a->capacity/4 && a->size >4 )? TRUE: FALSE; } + +void arraylist_reduce_capacity(arraylist_t * a){ + a->capacity /= 2; + a->data = (int *) realloc(a->data, sizeof(int) * a->capacity); +} diff --git a/TP1/C/arraylist.h b/TP1/C/arraylist.h index 4d4f8a1..26dd805 100644 --- a/TP1/C/arraylist.h +++ b/TP1/C/arraylist.h @@ -77,14 +77,27 @@ size_t arraylist_get_size(arraylist_t * a); @param a est un pointeur vers un tableau. @returns VRAI si le tableau doit être agrandi, FAUX sinon. */ -char arraylist_enlarging_capacity(arraylist_t * a); +char arraylist_do_we_need_to_enlarge_capacity(arraylist_t * a); + +/** + Cette fonction augmente la capacité du tableau. + @param a est un pointeur vers un tableau. +*/ +void arraylist_enlarge_capacity(arraylist_t * a); /** Cette fonction détermine la règle selon laquelle un espace mémoire plus petit sera alloué ou non. @param a est un pointeur vers un tableau. @returns VRAI si le tableau doit être réduit, FAUX sinon. */ -char arraylist_reducing_capacity(arraylist_t * a); +char arraylist_do_we_need_to_reduce_capacity(arraylist_t * a); + +/** + Cette fonction réduit la capacité du tableau. + @param a est un pointeur vers un tableau. +*/ +void arraylist_reduce_capacity(arraylist_t * a); + #endif -- GitLab