#ifndef COVER_H #define COVER_H typedef struct set set; typedef struct element element; typedef struct bucket bucket; typedef struct parent parent; struct element { int id; element* next; element* prev; set* set; }; struct bucket { int size; bucket* prev; bucket* next; set* head; }; struct set { int id; set* next; set* prev; element* head; bucket* bucket; }; struct parent { element* pos; parent* next; }; element* insert_element(set* s, int id); set* new_set(int id); parent* new_parent(element* el); void insert_parent(parent** parents, element* el); bucket* new_bucket(set* s, int size); void insert_set(set* s, bucket* b); void remove_bucket(bucket* b); void detach_set(set* s); void attach_set(set* s, int size, bucket* b); void demote(set* s); void remove_element(element* el); void remove_parents(element* el, parent** parents); void greedy(bucket* head, parent** parents); #endif