Skip to content
Snippets Groups Projects
Commit 00a2508e authored by Kilian Cardet's avatar Kilian Cardet
Browse files

TP1

parent 6fcaad20
Branches main
No related tags found
No related merge requests found
#include<stdlib.h>
struct cell_t {
void* val;
unsigned long int id;
......@@ -7,30 +9,86 @@ struct cell_t {
typedef struct cell_t* list_t;
list_t list_empty(){
return NULL;
}
int list_is_empty(list_t l){
return l == NULL;
}
list_t list_push(list_t l, void* x){
list_t head = malloc(sizeof(struct cell_t));
head->next = l;
head->val = x;
head->id = list_is_empty(l) ? 1 : l->id+1;
return head;
}
list_t list_tail(list_t l){
}
void* list_pop(list_t* l){
return list_is_empty(l) ? NULL : l->next;
}
void* list_top(list_t l){
}
void list_destroy(list_t l, void (*free)(void*)){
return list_is_empty(l) ? NULL : l->val;
}
// return the found element or NULL
void* list_in(list_t l, void* x, int (*eq)(void*, void*)){
while(!list_is_empty(l))
if(eq(l->val, x))
return l->val;
else
l = l->next;
return NULL;
}
unsigned long int list_len(list_t l){
return list_is_empty(l) ? 0 : l->id;
}
void* list_pop(list_t* l){
if(list_is_empty(*l))
return NULL;
void* res = (*l)->val;
list_t new_head = (*l)->next;
free(*l);
*l = new_head;
return res;
}
void list_destroy(list_t l, void (*free)(void*)){
while(!list_is_empty(l))
free(list_pop(&l));
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment