X-Git-Url: https://git.harvie.cz/?a=blobdiff_plain;f=demos%2Ftrees.c;h=87de03451f4b6ebc98c1b723d2b2396219e04577;hb=6a60bc82e8b8e6cccd0d4c2214a1f291662215f0;hp=0b8966cf9365ca3c7a3ba00ddca404a29bf885e8;hpb=cda3141abee4c5151924b4cb3de9e3493193d8f4;p=svn%2FCll1h%2F.git diff --git a/demos/trees.c b/demos/trees.c index 0b8966c..87de034 100644 --- a/demos/trees.c +++ b/demos/trees.c @@ -2,7 +2,7 @@ def_mem(Leaf) { - int value; + int seq; array(Leaf); }; @@ -10,27 +10,61 @@ program { Leaf leaf,root=NULL; int newkey; + int seq=0; + int odd=1; - for_ints(newkey, 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=newkey; - - //grow tree - for(leaf=root; leaf && leaf->__key <= newkey ; leaf=leaf->__next) + + //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 <= newkey) + //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(""); + } }