#ifndef LLIST_H__ #define LLIST_H__ #define LLIST_FORWARD 1 #define LLIST_BACKWARD 2 // !!! 变长结构体 struct llist_node_st { struct llist_node_st* prev; struct llist_node_st* next; // data要放在最后 char data[1]; // 占位符,数据的起始。C99才只是[0] }; typedef struct { int size; struct llist_node_st head; } LLIST; typedef void llist_op(const void*); typedef int llist_cmp(const void*, const void*); LLIST* llist_create(int initsize); int llist_insert(LLIST* ptr, const void* data, int mode); void* llist_find(LLIST* ptr, const void* key, llist_cmp*); int llist_delete(LLIST*, const void* key, llist_cmp*); int llist_fetch(LLIST*, const void* key, llist_cmp*, void* data); void llist_travel(LLIST* ptr, llist_op* op); void llist_destroy(LLIST* ptr); #endif