GIT.Harvie.CZ
/
svn
/
Cll1h
/
.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
binary B+ tree - first attempt, compiles and runs
[svn/Cll1h/.git]
/
demos
/
trees.c
diff --git
a/demos/trees.c
b/demos/trees.c
index 8838e3f66153cdc701b3fb7aeccb7f0dc0b590d1..87de03451f4b6ebc98c1b723d2b2396219e04577 100644
(file)
--- a/
demos/trees.c
+++ b/
demos/trees.c
@@
-13,71
+13,58
@@
program
int seq=0;
int odd=1;
int seq=0;
int odd=1;
- for_ints(newkey, 8,1,-2,745,-32,-64,27,4 )
+ 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++;
{
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;
//init
leaf->__next=NULL;
leaf->__seek=NULL;
leaf->__key=newkey;
-
- //grow tree
+
+ //store new node without indexing, first
+ insert(leaf,root,order_by_num,__key);
+
+ //reindex B+ tree
+ for(leaf=root;leaf->__next;leaf=leaf->__next)
{
{
- void *prev=NULL, *newleaf=leaf;
- //find where to store
- for(leaf=root;leaf && leaf->__key<=newkey;leaf=leaf->__next)
- {
- prev=leaf;
- if(leaf->__seek && leaf->__seek->key<=newkey)
- {
- leaf=leaf->__seek;
-
- }
- //store new node
- leaf=newleaf;
- if(prev)
+ //auto seek
+ if(!leaf->__seek && leaf->__next)
+ leaf->__seek=leaf->__next->__next;
+
+ if(leaf->__key<=newkey)
{
{
- leaf->__next=prev->__next->__next;
- prev->__next=leaf;
+ if(leaf->__seek && leaf->__seek->__key>newkey) leaf->__seek=leaf->__seek->__next;
}
else
}
else
- leaf->__next=root;
-
- //reindex B+ tree
- for(leaf=root;leaf->__next;leaf=leaf->__next)
{
{
- //auto seek
- if(!leaf->__seek)
- leaf->__seek=leaf->__next->__next;
-
- if(leaf->__key<=newkey)
+ if(odd && leaf->__seek)
{
{
- if(leaf->__seek && leaf->__seek->__key>newkey)
- leaf->__seek=leaf->__seek->__next;
- }
+ leaf->__seek==leaf->__seek->__next;
+ }
else
{
else
{
- if(odd && leaf->__seek)
- {
- leaf->__seek==leaf->__seek->__next;
- odd=1-odd;
- }
- else
- {
- leaf->__seek=leaf->__next->__seek;
- leaf->__next->__seek=NULL;
- }
- }
- }
+ leaf->__seek=leaf->__next->__seek;
+ leaf->__next->__seek=NULL;
+ }
+ odd=1-odd;
+ }
}
}
}
}
+ print("Values were stored as:");
for_each(leaf,root)
{
for_each(leaf,root)
{
- printf("%d. [%d]\n",leaf->seq,leaf->__key);
+ 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.140224 seconds
and
4
git commands to generate.