#ifndef DLIST_H #define DLIST_H #include typedef struct _dlist_node { int data; struct _dlist_node *prev; struct _dlist_node *next; } DListNode; typedef struct { DListNode *head; DListNode *tail; } DList; DList *dlist_create(void); void dlist_destroy(DList *list); DListNode *dlist_create_node(int data); bool dlist_insert_front(DList *list, int data); bool dlist_insert_back(DList *list, int data); bool dlist_insert_at(DList *list, int position, int data); bool dlist_delete_value(DList *list, int data); bool dlist_delete_node(DList *list, DListNode *node); bool dlist_delete_at(DList *list, int position); bool dlist_search(DList *list, int data); int dlist_size(DList *list); void dlist_print_forward(DList *list); void dlist_print_backward(DList *list); DList *dlist_invert(DList *list); bool dlist_compare(DList *l1, DList *l2); /* Circular doubly linked list */ DList *cdlist_create(int data); bool cdlist_insert_front(DList *list, int data); bool cdlist_insert_back(DList *list, int data); bool cdlist_delete_value(DList *list, int data); bool cdlist_search(DList *list, int data); int cdlist_size(DList *list); void cdlist_destroy(DList *list); void cdlist_print_forward(DList *list); void cdlist_print_backward(DList *list); #endif