binary B+ tree - first attempt, compiles and runs
[svn/Cll1h/.git] / demos / trees.c
index d08bc15acbc1e2720e192ac381efd1e3f3bb7ba6..87de03451f4b6ebc98c1b723d2b2396219e04577 100644 (file)
@@ -2,30 +2,69 @@
 
 def_mem(Leaf)
 {
- int value; 
+ int seq;
  array(Leaf);
 };
 
 program
 { 
  Leaf leaf,root=NULL;
+ int newkey;
+ int seq=0;
+ int odd=1;
 
- for_ints(i,  8,1,-2,745,-32,-64,27,4 ) printf(" [%d]",i)
+ print("Input values:");
+ for_ints(newkey,  8,1,-2,745,-32,-64,27,4,-300,0,300,40,-30,-40,400, 200 )
  {
+  printf("%d. [%d]\n",seq,newkey);
   leaf=get_mem(Leaf);
-
+  leaf->seq=seq++;
+  //store(leaf,root,newkey) is declared as:
+  
   //init
   leaf->__next=NULL;
   leaf->__seek=NULL;
-  leaf->__key=i;
-
-  //grow tree
-  for(leaf=root; leaf && leaf->__key >= i ; leaf=leaf->__next)
+  leaf->__key=newkey;
+  
+  //store new node without indexing, first
+  insert(leaf,root,order_by_num,__key);
+    
+  //reindex B+ tree
+  for(leaf=root;leaf->__next;leaf=leaf->__next)
   {
-  if(leaf->__seek->key >=)
+   //auto seek
+   if(!leaf->__seek && leaf->__next)
+    leaf->__seek=leaf->__next->__next;
+
+   if(leaf->__key<=newkey)
+   {
+    if(leaf->__seek && leaf->__seek->__key>newkey) leaf->__seek=leaf->__seek->__next;    
+   }
+   else
+   {
+    if(odd && leaf->__seek)
+    {
+     leaf->__seek==leaf->__seek->__next;
+    }
+    else
+    {
+     leaf->__seek=leaf->__next->__seek;
+     leaf->__next->__seek=NULL;
+    }
+    odd=1-odd;
+   } 
   }
  }
  
+ print("Values were stored as:");
+ for_each(leaf,root)
+ {
+  printf("%d. [%d]",leaf->seq,leaf->__key);
+  if (leaf->__seek)
+   printf("-> %d. [%d]\n",leaf->__seek->seq,leaf->__seek->__key);
+  else
+   print("");  
+ }
 }
This page took 0.133922 seconds and 4 git commands to generate.