-
Notifications
You must be signed in to change notification settings - Fork 1
/
heap.c
108 lines (104 loc) · 1.63 KB
/
heap.c
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include <stdio.h>
#define MAXHEAP 1000
#define parent(i) i%2==0?(i-2)/2:(i-1)/2
#define lchild(i) i*2+1
#define rchild(i) i*2+2
typedef int element;
element tab[MAXHEAP];
int hsize;
void swap ( element *a, element *b ) {/*{{{*/
element tmp; tmp = *a; *a = *b; *b = tmp;
}/*}}}*/
void downHeap (int k) {/*{{{*/
int r,l;
r = rchild(k);
l = lchild(k);
while ( tab[k] < tab[r] || tab[k] < tab[l] ) {
if ( tab[r] > tab[l] ) {
swap(&tab[r],&tab[k]);
k = r;
}else {
swap(&tab[l],&tab[k]);
k = l;
}
r = rchild(k);
l = lchild(k);
}
}/*}}}*/
void upHeap (int n) {/*{{{*/
while ( tab[n] > tab[parent(n)] && n != 0) {
swap(&tab[n], &tab[parent(n)]);
n = parent(n);
}
}/*}}}*/
void constructPQ() {/*{{{*/
hsize = 0;
}/*}}}*/
void insertPQ( element el ) {/*{{{*/
tab[hsize++] = el;
upHeap(hsize-1);
}/*}}}*/
void removePQ( element *el ) {/*{{{*/
*el = tab[0];
tab[0] = tab[hsize--];
downHeap(0);
}/*}}}*/
void replacePQ() {
}
void deletePQ() {
}
void prHeap() {/*{{{*/
int i;
for ( i = 0; i < hsize; i++ )
printf("%d ", tab[i]);
printf("\n");
}/*}}}*/
void heapSort() {
}
void makeHeap(int n) {
int i;
for (i=n/2;i>=0;i--) {
downHeap(i);
}
}
void pr(int k) {
int i;
for(i=0;i<k;i++)
printf("%d ", tab[i]);
printf("\n");
}
int main() {
/*
constructPQ();
*/
int i;
for(i=0;i<30;i++) {
tab[i]=i;
}
pr(30);
makeHeap(30);
pr(30);
/*
insertPQ(1);
insertPQ(2);
insertPQ(8);
insertPQ(4);
insertPQ(5);
insertPQ(6);
insertPQ(7);
insertPQ(8);
insertPQ(9);
insertPQ(245);
prHeap();
tab[0]=0;
prHeap();
downHeap(0);
prHeap();
*/
/*
element el;
removePQ(&el);
printf("%d\n", el);
prHeap();
*/
}