LC_NUMERIC locale will be set to "C" by default
[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
f94ee771 16 for_ints(newkey, 8,1,-2,745,-32,-64,27,4 )
436ac5fb 17 {
f94ee771 18 printf("%d. [%d]\n",seq,newkey);
19
436ac5fb 20 leaf=get_mem(Leaf);
f94ee771 21 leaf->seq=seq++;
436ac5fb 22
23 //init
24 leaf->__next=NULL;
25 leaf->__seek=NULL;
93583418 26 leaf->__key=newkey;
436ac5fb 27
28 //grow tree
436ac5fb 29 {
f94ee771 30 void *prev=NULL, *newleaf=leaf;
31 //find where to store
32 for(leaf=root;leaf && leaf->__key<=newkey;leaf=leaf->__next)
33 {
34 prev=leaf;
35 if(leaf->__seek && leaf->__seek->key<=newkey)
a68153bf 36 {
f94ee771 37 leaf=leaf->__seek;
38
39 }
40 //store new node
41 leaf=newleaf;
42 if(prev)
43 {
44 leaf->__next=prev->__next->__next;
45 prev->__next=leaf;
46 }
47 else
48 leaf->__next=root;
49
50 //reindex B+ tree
51 for(leaf=root;leaf->__next;leaf=leaf->__next)
52 {
3fa0c747 53 //auto seek
f94ee771 54 if(!leaf->__seek)
3fa0c747 55 leaf->__seek=leaf->__next->__next;
f94ee771 56
57 if(leaf->__key<=newkey)
14e7e05a 58 {
f94ee771 59 if(leaf->__seek && leaf->__seek->__key>newkey)
60 leaf->__seek=leaf->__seek->__next;
61 }
62 else
63 {
64 if(odd && leaf->__seek)
65 {
66 leaf->__seek==leaf->__seek->__next;
67 odd=1-odd;
68 }
69 else
14e7e05a 70 {
f94ee771 71 leaf->__seek=leaf->__next->__seek;
72 leaf->__next->__seek=NULL;
14e7e05a 73 }
f94ee771 74 }
75 }
a68153bf 76 }
f94ee771 77 }
78
79 for_each(leaf,root)
80 {
81 printf("%d. [%d]\n",leaf->seq,leaf->__key);
82 }
436ac5fb 83}
This page took 0.235137 seconds and 4 git commands to generate.