/
skiplist.h
75 lines (53 loc) · 1.13 KB
/
skiplist.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/*
* skiplist.h
*
* Created on: May 16, 2011
* Author: Robert Winkler
*/
#ifndef SKIPLIST_H_
#define SKIPLIST_H_
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <limits.h>
typedef struct node_ii_struct* nodeptr;
typedef struct node_ii_struct
{
int key;
int value;
nodeptr forward[1];
} node_ii;
typedef struct
{
int level;
nodeptr head;
nodeptr NIL;
} skiplist_i;
typedef struct node_iv_struct* nodeivptr;
typedef struct node_iv_struct
{
int key;
void *value;
nodeivptr forward[1];
} node_iv;
typedef struct
{
int level;
nodeivptr head;
nodeivptr NIL;
void (*free_elem)(void*);
} skiplist_iv;
int randomlevel();
//skiplist_i
skiplist_i* slist_i();
int searchi(skiplist_i *list, int key, int *value);
int inserti(skiplist_i *list, int key, int value);
int deletei(skiplist_i *list, int key);
void freei(skiplist_i *list);
//skiplist_iv
skiplist_iv* slist_iv(void (*free_elem)(void*));
int searchiv(skiplist_iv *list, int key, void **value);
int insertiv(skiplist_iv *list, int key, void *value);
int deleteiv(skiplist_iv *list, int key);
void freeiv(skiplist_iv *list);
#endif /* SKIPLIST_H_ */