linked-list.h
Raw
1#ifndef LINKED_LIST_H
2#define LINKED_LIST_H
3
4typedef struct SLnode
5{
6 void* item;
7 struct SLnode* next;
8} SLnode;
9
10typedef struct DLnode
11{
12 void* item;
13 struct DLnode* next;
14 struct DLnode* prev;
15} DLnode;
16
17typedef struct LinkedList
18{
19 void* head;
20 void* tail;
21 size_t length;
22 bool_t doubly_linked;
23} LinkedList;
24
25LinkedList* new_ll(bool_t doubly_linked);
26void delete_ll(LinkedList* ll, void(*rmv) (void*));
27
28void* ll_at(const LinkedList* ll, size_t index);
29#define ll_pop(ll) ll_pop_at(ll, ll->length-1)
30void* ll_pop_at(LinkedList* ll, size_t index);
31
32bool_t ll_insert(LinkedList* ll, size_t index, void* item);
33#define ll_push(ll, item) ll_insert(ll, ll->length, item)
34
35void ll_remove(LinkedList* ll, size_t index, void (*rmv)(void*));
36void ll_remove_range(LinkedList* ll, size_t index, size_t length, void (*rmv)(void*));
37
38size_t* ll_find(const LinkedList* haystack, const void* needle, int (*cmp)(const void*, const void*));
39
40
41#endif /* LINKED_LIST_H */
42