Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "liste_python.h"
- liste creation_liste_vide() {
- liste l = malloc( sizeof(struct liste) );
- (*l).nombre_elements = 0;
- (*l).blocs_alloues = 0;
- (*l).objets_liste = NULL;
- return l;
- }
- static void reallouer_liste(liste l, size_t nouvelle_taille) {
- size_t blocs_alloues = (*l).blocs_alloues;
- (*l).nombre_elements = nouvelle_taille;
- if(blocs_alloues >= nouvelle_taille && nouvelle_taille >= (blocs_alloues / 2)) {
- puts("reallocation inutile");
- }
- else {
- // pattern : 0, 4, 8, 16, 25, 35, 46, 58, 72, 88, ...
- int a_allouer = (nouvelle_taille >> 3) + (nouvelle_taille < 9 ? 3 : 6);
- a_allouer += nouvelle_taille;
- (*l).objets_liste = realloc((*l).objets_liste, (a_allouer) * sizeof(int*));
- if((*l).objets_liste == NULL)
- fprintf(stderr, "erreur lors de la reallocation de la liste");
- (*l).blocs_alloues = a_allouer;
- }
- printf("%ld %ld\n", (*l).blocs_alloues, nouvelle_taille);
- }
- void ajout_fin(liste l, int *valeur) {
- size_t nombre_elements = (*l).nombre_elements;
- reallouer_liste(l, nombre_elements+1);
- l->objets_liste[l->nombre_elements-1] = valeur;
- }
- // TODO : vérifier que la position est valide
- void inserer_position(liste l, int* valeur, unsigned int position) {
- }
- static void detruire_element(int **e) {
- free(*e);
- *e = NULL;
- }
- int* pop(liste l) {
- size_t nombre_elements = (*l).nombre_elements;
- int *valeur = malloc( sizeof(int) );
- *valeur = *((*l).objets_liste[nombre_elements-1]);
- detruire_element(&(*l).objets_liste[nombre_elements-1]);
- reallouer_liste(l, nombre_elements-1);
- return valeur;
- }
- void detruire_liste(liste* l) {
- for(unsigned int i = 0; i < (**l).nombre_elements; i++)
- detruire_element(&(**l).objets_liste[i]);
- free((**l).objets_liste);
- (**l).objets_liste = NULL;
- free(*l);
- *l = NULL;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement