// Set.c #include #include #include #include "Set.h" #define INITIAL_CAPACITY 8 struct set { int *elems; int size; int capacity; }; // ---------- Helper ---------- static void resize(Set s) { s->capacity *= 2; s->elems = realloc(s->elems, s->capacity * sizeof(int)); } // ---------- Public Interface ---------- Set SetNew(void) { Set s = malloc(sizeof(struct set)); s->size = 0; s->capacity = INITIAL_CAPACITY; s->elems = malloc(s->capacity * sizeof(int)); return s; } void SetFree(Set set) { free(set->elems); free(set); } bool SetContains(Set s, int elem) { for (int i = 0; i < s->size; i++) { if (s->elems[i] == elem) { return true; } } return false; } void SetInsert(Set s, int elem) { if (SetContains(s, elem)) { return; } if (s->size == s->capacity) { // error message return; } s->elems[s->size] = elem; s->size++; } void SetDelete(Set s, int elem) { for (int i = 0; i < s->size; i++) { if (s->elems[i] == elem) { s->elems[i] = s->elems[s->size - 1]; s->size--; return; } } } int SetSize(Set set) { return set->size; } void SetShow(Set set) { printf("{ "); for (int i = 0; i < set->size; i++) { printf("%d ", set->elems[i]); } printf("}\n"); }