-
Notifications
You must be signed in to change notification settings - Fork 0
/
heap.h
42 lines (30 loc) · 924 Bytes
/
heap.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
#ifndef __HEAP_H__
#define __HEAP_H__
#include "bool.h"
#define MIN_HEAP 0
#define MAX_HEAP 1
#define HEAP_MIN_SIZE 8
typedef struct heap_type {
void (*free)(void *ptr);
int (*cmp)(void *ptr, void *ptr2);// >0 ptr > ptr2; <0 ptr < ptr2, =0 ptr == ptr2
void *(*dup)(void *ptr);
bool (*match)(void *ptr1, void *ptr2); // true ptr == ptr2
} heap_type;
typedef struct heap {
int flag;
int used;
int size;
void **ele;
heap_type *ht;
} heap;
//#define HEAP_SET_FREE_METHOD(h, m) ((h)->free = m)
//#define HEAP_SET_CMP_METHOD(h, m) ((h)->cmp = m)
heap *heap_create(int size, int flag, heap_type *ht);
void heap_release(heap *h);
//void *heap_search(heap *h, void *value);
bool heap_insert(heap *h, void *value);
void *heap_pop(heap *h); //大堆则取最大值,小堆则取最小值
void *heap_top(heap *h);
void heap_sort(heap *h);
void heap_make(heap *h);
#endif /*__HEAP_H__*/