intvector.c
et implémentez les fonctions nécessaires.main.c
pour tester vos fonctions.Makefile
contenant les lignes suivantes : (Attention $(CC)
et rm
sont précédés d’une tabulation et non d’espaces)
CFLAGS=-std=c99 -Wall
testivector: main.o intvector.o
clean:
rm -f *.o testivector
make
./testivector
#ifndef __IVECTOR_H
# define __IVECTOR_H
struct intvector;
/**
* Initialise le vecteur ``v''
*/
struct intvector iv_new();
/**
* Retourne le nombre d'element contenu dans ``v''
*/
int iv_size(struct intvector *v);
/**
* Le vecteur ``v'' est-il vide ?
*/
int iv_empty(struct intvector *v);
/**
* Le vecteur ``v'' est-il plein ?
*/
int iv_full(struct intvector *v);
/**
* Retourne le ``idx''-eme element de ``v''
*/
int iv_get(struct intvector *v, int idx);
/**
* Remplace le ``idx''-eme element de ``v''
*/
void iv_set(struct intvector *v, int idx, int value);
/**
* Ajoute ``value'' a la fin du tableau
*/
void iv_add(struct intvector *v, int value);
/**
* Retourne l'index de la premiere occurence de ``value'', -1 si elle n'est pas trouvee
*/
int iv_indexof(struct intvector *v, int value);
/**
* Retire le ``idx''-eme element sans laisser de trou.
*/
void iv_removeat(struct intvector *v, int idx);
/**
* Copie ``length'' elements de ``src'' a partir de ``s_idx'' dans ``dst'' en debutant a ``d_idx''.
* ``dst'' doit etre assez grand pour recevoir les elements, son contenu anterieur est ecrase.
*/
void iv_copy(struct intvector *src, struct intvector *dst, int *s_idx, int *d_idx, int length);
#endif
Dans votre fichier de test implémentez une fonction qui trie un tableau par ordre croisant (voir correction pg-101 1 ou 2).
On souhaite améliorer nos tableaux pour qu’ils puissent grandir à la demande. Ceci permet au tableaux contenants peu d’éléments d’occuper peu de mémoire, tout en autorisant les très gros tableaux.
Rajoutez dans intvector.c
les fonctions suivantes :
static void enlarge(struct intvector *v);
void compact(struct intvector *v);
Le mot clé static
(devant une fonction) veut dire qu’elle ne sera pas visible hors de ce fichier. Ceci permet de cacher les détails de l’implémentation ainsi que de donner des noms plus courts puisqu’ils ne seront pas soumis à conflits.
Pour implémenter ces fonctions vous aurez besoin de fonctions contenues dans stdlib.h
:
malloc
free
realloc
Proposez une alternative à l’utilisation des tableaux comme backing store de nos vecteurs d’entiers.