Skip to content
Snippets Groups Projects
arraylist.h 3.34 KiB
#ifndef __ARRAYLIST_H
#define __ARRAYLIST_H

#define FALSE 0
#define TRUE 1

#include <stddef.h>


/**
   Tableau dynamique d'entiers.
*/
typedef struct arraylist_s{
  // Pointeur vers la zone de mémoire où les entiers seront stockées.
  int * data;
  // Taille réelle, ou capacité de stockage, du tableau.
  size_t capacity;
  // Nombre d'éléments stockés dans le tableau.
  size_t size;
} arraylist_t;

/**
   Fonction d'initialisation d'un tableau dynamique.
   Complexité en temps/espace, pire et meilleur cas : O(1)  
   @return Un pointeur sur un tableau dynamique nouvellement alloué.
*/
arraylist_t * arraylist_create();

/**
   Fonction de libération de la mémoire occupée par un tableau dynamique.
   Complexité en temps/espace, pire et meilleur cas : O(1)  
   @param a est un pointeur vers l'espace mémoire que la fonction va libérer.
*/
void arraylist_destroy(arraylist_t * a);

/**
   Ajoute une valeur dans le tableau.
   Complexité en temps/espace, pire cas : O(size)
   Complexité en temps/espace, meilleur cas : O(1)
   Complexité amortie : O(1)
   @param a est le tableau  auquel on souhaite ajouter une valeur.
   @param x est la valeur que l'on souhaite ajouter.
   @returns VRAI si le tableau a été agrandit, FAUX sinon
*/
char arraylist_append(arraylist_t * a, int x);

/**
   Supprime la dernière valeur du tableau.
   Complexité en temps, pire cas : O(size)
   Complexité en temps, meilleur cas : O(1)
   Complexité amortie : O(1)
   @param a est le tableau  auquel on souhaite ajouter une valeur.
   @returns VRAI si le tableau a été réduit, FAUX sinon
*/
char arraylist_pop_back(arraylist_t * a);

/**
   Renvoie la valeur située à la position donnée par l'utilisateur.
   Complexité en temps/espace, pire cas : O(1)
   @param a est un pointeur vers un tableau.
   @param pos est la l'indice de la case on l'utilisateur veut connaître la valeur.
   @returns la valeur située à la position donnée par l'utilisateur.
 */
int arraylist_get(arraylist_t * a, int pos);


/**
   Renvoie le nombre d'éléments stockés dans le tableau.
   Complexité en temps/espace, pire cas : O(1)
   @param a est un pointeur vers un tableau.
   @returns le nombre d'éléments stockés dans le tableau.
 */
size_t arraylist_size(arraylist_t * a);

/**
   Renvoie la capacité de stockage du tableau.
   Complexité en temps/espace, pire cas : O(1)
   @param a est un pointeur vers un tableau.
   @returns la capacité de stockage du tableau.
 */
size_t arraylist_capacity(arraylist_t * a);

/**
   Cette fonction détermine la règle selon laquelle un espace mémoire plus grand sera alloué ou non.
   @param a est un pointeur vers un tableau.
   @returns VRAI si le tableau doit être agrandi, FAUX sinon.
*/
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_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