436ac5fb |
1 | #include "cll1.h" |
2 | |
3 | def_mem(Leaf) |
4 | { |
5 | int value; |
6 | array(Leaf); |
7 | }; |
8 | |
9 | program |
10 | { |
11 | Leaf leaf,root=NULL; |
93583418 |
12 | int newkey; |
436ac5fb |
13 | |
93583418 |
14 | for_ints(newkey, 8,1,-2,745,-32,-64,27,4 ) printf(" [%d]",i) |
436ac5fb |
15 | { |
16 | leaf=get_mem(Leaf); |
17 | |
18 | //init |
19 | leaf->__next=NULL; |
20 | leaf->__seek=NULL; |
93583418 |
21 | leaf->__key=newkey; |
436ac5fb |
22 | |
23 | //grow tree |
436ac5fb |
24 | { |
3fa0c747 |
25 | void *prev=NULL, *newleaf=leaf; |
14e7e05a |
26 | //find where to store |
3fa0c747 |
27 | for(leaf=root; leaf && leaf->__key<=newkey ; leaf=leaf->__next) |
a68153bf |
28 | { |
3fa0c747 |
29 | prev=leaf; |
30 | if(leaf->__seek && leaf->__seek->key<=newkey) leaf=leaf->__seek; |
a68153bf |
31 | } |
14e7e05a |
32 | //store new node |
3fa0c747 |
33 | leaf=newleaf; |
a68153bf |
34 | if(prev) |
35 | { |
3fa0c747 |
36 | leaf->__next=prev->__next->__next; |
37 | prev->__next=leaf; |
a68153bf |
38 | } |
39 | else |
3fa0c747 |
40 | leaf->__next=root; |
41 | //auto seek |
42 | if(leaf->__next->__next;) |
43 | leaf->__seek=leaf->__next->__next; |
14e7e05a |
44 | |
45 | //reindex B+ tree |
46 | for(leaf=root; leaf->__next ; leaf=leaf->__next) |
47 | { |
48 | if (leaf->__seek) |
49 | { |
50 | if (leaf->__key <= newkey) |
51 | leaf->__seek=leaf->__seek->__next; |
52 | } |
53 | else |
54 | leaf->__seek=leaf->__next->__seek; |
55 | } |
a68153bf |
56 | } |
cda3141a |
57 | } |
436ac5fb |
58 | } |