00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef _SKIPLIST_H
00026 #define _SKIPLIST_H
00027
00028 #define SKIPLIST_OK 0
00029 #define SKIPLIST_ERROR_ARGS 1
00030 #define SKIPLIST_ERROR_MEMORY 2
00031 #define SKIPLIST_ERROR_DUPLICATE 3
00032
00033
00034 typedef struct skiplistnode_struct{
00035 void *data;
00036 struct skiplistnode_struct *forward[1];
00037 }skiplistnode;
00038
00039 typedef struct skiplist_struct{
00040 int current_level;
00041 int max_levels;
00042 float level_probability;
00043 unsigned long items;
00044 int allow_duplicates;
00045 int append_duplicates;
00046 int (*compare_function)(void *,void *);
00047 skiplistnode *head;
00048 }skiplist;
00049
00050
00051 skiplist *skiplist_new(int max_levels, float level_probability, int allow_duplicates, int append_duplicates, int (*compare_function)(void *,void *));
00052 skiplistnode *skiplist_new_node(skiplist *list,int node_levels);
00053 int skiplist_insert(skiplist *list, void *data);
00054 int skiplist_random_level(skiplist *list);
00055 int skiplist_empty(skiplist *list);
00056 int skiplist_free(skiplist **list);
00057 void *skiplist_peek(skiplist *);
00058 void *skiplist_pop(skiplist *);
00059 void *skiplist_get_first(skiplist *list, void **node_ptr);
00060 void *skiplist_get_next(void **node_ptr);
00061 void *skiplist_find_first(skiplist *list, void *data, void **node_ptr);
00062 void *skiplist_find_next(skiplist *list, void *data, void **node_ptr);
00063 int skiplist_delete(skiplist *list, void *data);
00064 int skiplist_delete_first(skiplist *list, void *data);
00065 int skiplist_delete_all(skiplist *list, void *data);
00066 int skiplist_delete_node(skiplist *list, void *node_ptr);
00067
00068 #endif