Skip to content

Commit

Permalink
Merge pull request #1 from nakira974/branches/dev
Browse files Browse the repository at this point in the history
Update clist.c
  • Loading branch information
nakira974 authored Feb 20, 2024
2 parents 5a108d6 + 0c69895 commit f625e68
Showing 1 changed file with 51 additions and 46 deletions.
97 changes: 51 additions & 46 deletions src/clist.c
Original file line number Diff line number Diff line change
@@ -1,63 +1,68 @@
//
// Created by maxim on 20/02/2024.
// Created by maxim on 14/02/2024.
//

#include "clist.h"
#include "randomized_set.h"

void clist_create(ClinkedList *list, void (*destroy)(void *value)) {
list->size = 0;
list->destroy = destroy;
list->head = NULL;
}

void clist_destroy(ClinkedList *list) {
void *value;
void randomized_set_create(RandomizedSet *set) {
// Alloue de la mémoire pour le tableau de nombres avec une capacité initiale de 1000.
set->nums = (int *) malloc(1000 * sizeof(int));
// Initialise la taille actuelle du tableau à 0.
set->size = 0;
// Initialise la capacité maximale du tableau à 1000.
set->capacity = 1000;
}

while (clist_size(list) > 0) {
if (clist_remove(list, list->head, (void **) &value) && list->destroy != NULL) {
list->destroy(value);
bool randomized_set_add(RandomizedSet *obj, int val) {
for (int i = 0; i < obj->size; i++) {
// Vérifie si l'élément existe déjà dans le tableau.
if (obj->nums[i] == val) {
// Si l'élément existe déjà, retourne faux.
return false;
}
}
memset(list, 0, sizeof(ClinkedList));
}

bool clist_add(ClinkedList *list, CLinkedElement *element, const void *value) {
CLinkedElement *new_element = NULL;

// If we've such enough place in the memory then continue
if ((new_element = (CLinkedElement *) malloc(sizeof(CLinkedElement))) == NULL) return false;
new_element->value = (void *) value;

if (clist_size(list) == 0) {
// Empty-list add case
new_element->next = new_element;
list->head = new_element;
} else {
// Non-empty list case
new_element->next = element->next;
element->next = new_element;
// Vérifie si le tableau est plein.
if (obj->size == obj->capacity) {
// Réalloue de la mémoire pour doubler la capacité du tableau.
obj->nums = (int *) realloc(obj->nums, (2 * obj->capacity) * sizeof(int));
// Met à jour la capacité maximale.
obj->capacity *= 2;
}
list->size++;

// Ajoute l'élément à la fin du tableau et met à jour la taille du tableau.
obj->nums[obj->size++] = val;
// Retourne vrai pour indiquer que l'insertion a réussi.
return true;
}

bool clist_remove(ClinkedList *list, CLinkedElement *element, void **value) {
CLinkedElement *last_element = NULL;
bool randomized_set_remove(RandomizedSet *obj, int val) {
for (int i = 0; i < obj->size; i++) {
// Recherche l'élément dans le tableau.
if (obj->nums[i] == val) {
// Remplace l'élément par le dernier élément du tableau pour maintenir la continuité.
obj->nums[i] = obj->nums[obj->size - 1];
// Réduit la taille du tableau.
obj->size--;
// Retourne vrai pour indiquer que la suppression a réussi.
return true;
}
}
// Si l'élément n'est pas trouvé, retourne faux.
return false;
}

if (clist_size(list) == 0) return false;
int randomized_set_get_random(RandomizedSet *obj) {
// Génère un index aléatoire dans la plage des indices valides du tableau.
int randomIndex = rand() % obj->size;
// Retourne l'élément correspondant à l'index aléatoire.
return obj->nums[randomIndex];
}

*value = element->next->value;
if (element->next == element) {
// Is last element case
last_element = element->next;
list->head = NULL;
} else {
// Not the latest element of the list case
last_element = element->next;
element->next = element->next->next;
}
free(last_element);
list->size--;
return true;
void randomized_set_destroy(RandomizedSet *obj) {
// Libère la mémoire du tableau de nombres.
free(obj->nums);
// Libère la mémoire de la structure RandomizedSet.
free(obj);
}

0 comments on commit f625e68

Please sign in to comment.