binary B+ tree - first attempt, compiles and runs
[svn/Cll1h/.git] / demos / trees.c
CommitLineData
436ac5fb 1#include "cll1.h"
2
3def_mem(Leaf)
4{
f94ee771 5 int seq;
436ac5fb 6 array(Leaf);
7};
8
9program
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}
This page took 0.196597 seconds and 4 git commands to generate.