436ac5fb |
1 | #include "cll1.h" |
2 | |
3 | def_mem(Leaf) |
4 | { |
f94ee771 |
5 | int seq; |
436ac5fb |
6 | array(Leaf); |
7 | }; |
8 | |
9 | program |
10 | { |
11 | Leaf leaf,root=NULL; |
93583418 |
12 | int newkey; |
f94ee771 |
13 | int seq=0; |
14 | int odd=1; |
436ac5fb |
15 | |
6a60bc82 |
16 | print("Input values:"); |
17 | for_ints(newkey, 8,1,-2,745,-32,-64,27,4,-300,0,300,40,-30,-40,400, 200 ) |
436ac5fb |
18 | { |
f94ee771 |
19 | printf("%d. [%d]\n",seq,newkey); |
20 | |
436ac5fb |
21 | leaf=get_mem(Leaf); |
f94ee771 |
22 | leaf->seq=seq++; |
6a60bc82 |
23 | |
24 | //store(leaf,root,newkey) is declared as: |
25 | |
436ac5fb |
26 | //init |
27 | leaf->__next=NULL; |
28 | leaf->__seek=NULL; |
93583418 |
29 | leaf->__key=newkey; |
6a60bc82 |
30 | |
31 | //store new node without indexing, first |
32 | insert(leaf,root,order_by_num,__key); |
33 | |
34 | //reindex B+ tree |
35 | for(leaf=root;leaf->__next;leaf=leaf->__next) |
436ac5fb |
36 | { |
6a60bc82 |
37 | //auto seek |
38 | if(!leaf->__seek && leaf->__next) |
39 | leaf->__seek=leaf->__next->__next; |
40 | |
41 | if(leaf->__key<=newkey) |
f94ee771 |
42 | { |
6a60bc82 |
43 | if(leaf->__seek && leaf->__seek->__key>newkey) leaf->__seek=leaf->__seek->__next; |
f94ee771 |
44 | } |
45 | else |
f94ee771 |
46 | { |
6a60bc82 |
47 | if(odd && leaf->__seek) |
14e7e05a |
48 | { |
6a60bc82 |
49 | leaf->__seek==leaf->__seek->__next; |
50 | } |
f94ee771 |
51 | else |
52 | { |
6a60bc82 |
53 | leaf->__seek=leaf->__next->__seek; |
54 | leaf->__next->__seek=NULL; |
55 | } |
56 | odd=1-odd; |
57 | } |
a68153bf |
58 | } |
f94ee771 |
59 | } |
60 | |
6a60bc82 |
61 | print("Values were stored as:"); |
f94ee771 |
62 | for_each(leaf,root) |
63 | { |
6a60bc82 |
64 | printf("%d. [%d]",leaf->seq,leaf->__key); |
65 | if (leaf->__seek) |
66 | printf("-> %d. [%d]\n",leaf->__seek->seq,leaf->__seek->__key); |
67 | else |
68 | print(""); |
f94ee771 |
69 | } |
436ac5fb |
70 | } |