From a28833f27ec89456eade6ee4453395c36d409257 Mon Sep 17 00:00:00 2001 From: "Raven G. Duran" Date: Sun, 30 Sep 2012 13:32:21 +0800 Subject: [PATCH 1/9] Working on the insertion Bug --- btree.c | 34 +++++++++++++++++----------------- btree.exe | Bin 26506 -> 26506 bytes 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/btree.c b/btree.c index 26e9763..e9de62e 100644 --- a/btree.c +++ b/btree.c @@ -1,6 +1,6 @@ #include #include -#define MAX 100 +#define MAX 30 // B-Tree Node Structure struct node { @@ -146,10 +146,12 @@ struct node* insertN(int value,struct node *root,struct node *parent){ if (value == root->value[i]){ // If the value is already inserted printf("Data Already inserted!\n"); break; - } else if ( value > root->value[i] ){ // if value to be inserted is greater, then proceed to next box + } else if ( value > root->value[i]){ // if value to be inserted is greater, then proceed to next box if (root->keys[i+1] != NULL && root->keys[i+1]->keyCount < treeOrder + 1) { - root->keys[i+1] = insertN(value,root->keys[i+1],root); - break; + if ( ( (void*)root->value[i+1] != NULL && value < root->value[i+1] ) || root == tRoot){ + root->keys[i+1] = insertN(value,root->keys[i+1],root); + break; + } else i++; } else i++; continue; @@ -192,24 +194,19 @@ struct node* insertN(int value,struct node *root,struct node *parent){ } for (i = right; i < treeOrder; i++){ // Move all right half data to new LeftHalf Box - rightHalf = insertN(root->value[i],rightHalf,NULL); // pointer arithmethic + rightHalf = insertN(root->value[i],rightHalf,NULL); } - struct node *tempRoot = root; - root = insertN(root->value[mid],parent,parent); + struct node *tempRoot = root; // Temporarily hold old root box + struct node *parentP = root->parent == NULL ? NULL : root->parent->parent; // Parent of the parents + + root->parent = insertN(root->value[mid],root->parent,parentP); if (parent == NULL){ // Special case if splitted is the tRoot (The very Root) leftHalf->parent = root; rightHalf->parent = root; - root->keys[0] = leftHalf; - root->keys[1] = rightHalf; - } else { - for (i = 0; i < tempRoot->parent->keyCount; i++){ - if (tempRoot->parent->keys[i] == tempRoot){ - tempRoot->parent->keys[i] = leftHalf; - tempRoot->parent->keys[i+1] = rightHalf; - } - } + parent->keys[0] = leftHalf; + parent->keys[1] = rightHalf; } // To do : Non special case split and distribute... or if parent has a parent with values @@ -226,6 +223,7 @@ void inOrder(struct node *root){ int i; if (root == NULL) return; else { + //root = root->keys[0]; for (i = 0; i < root->keyCount - 1; i++){ // -1 since left and right key of every data box inOrder(root->keys[i]); printf("~%d~\n",root->value[i]); @@ -234,6 +232,7 @@ void inOrder(struct node *root){ } void levelOrder(struct node *root){ + /** int i; if (root == NULL) return; else { @@ -243,7 +242,7 @@ void levelOrder(struct node *root){ printf(" "); if (root->parent == NULL) printf("\n"); else { - for (i = 0; i < root->parent->keyCount; i++){ // Check if had a right sibling, if none then proceed to next level + for (i = 0; i < root->parent->keyCount - 1; i++){ // Check if had a right sibling, if none then proceed to next level if (root->parent->keys[i] == root){ if (root->parent->keys[i+1] == NULL) printf("\n"); break; @@ -255,5 +254,6 @@ void levelOrder(struct node *root){ levelOrder(root->keys[i]); } } + **/ } diff --git a/btree.exe b/btree.exe index 8a9aab8a6a07451f748a5de0f7d3fba447d62090..185e4099f41b566f064bb9d62246305c507448df 100644 GIT binary patch delta 3966 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 From 1f9018031d42c74c24beb6283414b97dd4411885 Mon Sep 17 00:00:00 2001 From: "Raven G. Duran" Date: Sun, 30 Sep 2012 13:56:33 +0800 Subject: [PATCH 2/9] Minor update to printing --- btree.c | 40 ++++++++++++++++++++-------------------- btree.exe | Bin 26506 -> 26506 bytes 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/btree.c b/btree.c index e9de62e..d162e64 100644 --- a/btree.c +++ b/btree.c @@ -1,6 +1,6 @@ #include #include -#define MAX 30 +#define MAX 100 // B-Tree Node Structure struct node { @@ -146,12 +146,10 @@ struct node* insertN(int value,struct node *root,struct node *parent){ if (value == root->value[i]){ // If the value is already inserted printf("Data Already inserted!\n"); break; - } else if ( value > root->value[i]){ // if value to be inserted is greater, then proceed to next box + } else if ( value > root->value[i] ){ // if value to be inserted is greater, then proceed to next box if (root->keys[i+1] != NULL && root->keys[i+1]->keyCount < treeOrder + 1) { - if ( ( (void*)root->value[i+1] != NULL && value < root->value[i+1] ) || root == tRoot){ - root->keys[i+1] = insertN(value,root->keys[i+1],root); - break; - } else i++; + root->keys[i+1] = insertN(value,root->keys[i+1],root); + break; } else i++; continue; @@ -194,19 +192,24 @@ struct node* insertN(int value,struct node *root,struct node *parent){ } for (i = right; i < treeOrder; i++){ // Move all right half data to new LeftHalf Box - rightHalf = insertN(root->value[i],rightHalf,NULL); + rightHalf = insertN(root->value[i],rightHalf,NULL); // pointer arithmethic } - struct node *tempRoot = root; // Temporarily hold old root box - struct node *parentP = root->parent == NULL ? NULL : root->parent->parent; // Parent of the parents - - root->parent = insertN(root->value[mid],root->parent,parentP); + struct node *tempRoot = root; + root = insertN(root->value[mid],parent,parent); if (parent == NULL){ // Special case if splitted is the tRoot (The very Root) leftHalf->parent = root; rightHalf->parent = root; - parent->keys[0] = leftHalf; - parent->keys[1] = rightHalf; + root->keys[0] = leftHalf; + root->keys[1] = rightHalf; + } else { + for (i = 0; i < tempRoot->parent->keyCount; i++){ + if (tempRoot->parent->keys[i] == tempRoot){ + tempRoot->parent->keys[i] = leftHalf; + tempRoot->parent->keys[i+1] = rightHalf; + } + } } // To do : Non special case split and distribute... or if parent has a parent with values @@ -223,16 +226,15 @@ void inOrder(struct node *root){ int i; if (root == NULL) return; else { - //root = root->keys[0]; - for (i = 0; i < root->keyCount - 1; i++){ // -1 since left and right key of every data box + //root = root->keys[1]; + for (i = 0; i < root->keyCount; i++){ // -1 since left and right key of every data box inOrder(root->keys[i]); - printf("~%d~\n",root->value[i]); + if (i < root->keyCount - 1) printf("~%d~\n",root->value[i]); } } } void levelOrder(struct node *root){ - /** int i; if (root == NULL) return; else { @@ -242,7 +244,7 @@ void levelOrder(struct node *root){ printf(" "); if (root->parent == NULL) printf("\n"); else { - for (i = 0; i < root->parent->keyCount - 1; i++){ // Check if had a right sibling, if none then proceed to next level + for (i = 0; i < root->parent->keyCount; i++){ // Check if had a right sibling, if none then proceed to next level if (root->parent->keys[i] == root){ if (root->parent->keys[i+1] == NULL) printf("\n"); break; @@ -254,6 +256,4 @@ void levelOrder(struct node *root){ levelOrder(root->keys[i]); } } - **/ } - diff --git a/btree.exe b/btree.exe index 185e4099f41b566f064bb9d62246305c507448df..d19b2f95c0cbc914ccebe0fb1f4a811a56fb9258 100644 GIT binary patch delta 4501 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 delta 4104 zcmZ{ndr(tX8o~(`#wOYl z?&tg*(vD@3iUEvBr7_sAXoq&KCZgk*yfjCO@3Su8f*i z@)#BuK8NmDCpa7s-hjTy>BOsv(Z8v}L9!_%n}f12{z14Yg*~Bv*rV4R?4+Ea@hW1I z#_hxj8lND(gBdZ{4dRH#|0KSl@%P04(AZFl9MX6K@p~HQ68{A`d@Y$>)-NiZj(q-1 zrT=T+t#ph%jbcpIYzxV@MB~N8dC0q!5t^6yJEf(tI>UI+PF#gI%-Xv?L#F>p1_)22 z+p!;`(O3dQJV6i@$Sq_U(wKX_M-JcM`iEN|;I&<|e3iU9@A2A|oQNLXN$f|%!=7?Y zv5$^5S#&%3L+m9z z+BA;PDj!6RUl~y=M^we&msMpXv||_*GX8O)(eE8X4k^Rb#7C%Cd_8iJGTdh6`r(ky ziweznIOO!U(rC9b9EHf|7>-Zt@~3^b93h1Qfp0q-m;6x1I@}(9rFURK0{I$MWyn|T z1=G%LtTZ{plZj;wcrl}@7}d%lRTn5y45rHA5)EhB3sVIlZ1XzOQgba4jZMrOrcb1OLU) zyOp6R49rH6Mmb0#Su429MMbUmRrE87TJOno0^14mv<|4i3R4`l^d?j~UyoQnN2mop z!~Gn|QJ3(Up&C2UEXvIuXnzRpg`y~tme90kJG+|llw6=^*~TL2MYhg3$K${T@hg4& z#UdBb!>?S$yYD1lH}@DGgIL``cfWEmq7Nw-5i$Hlzj9fv!F9aMXOimXMsz;W^4?T+ zUYgD8Bbda;qbTNB=$2_}WxwjdguK_(%05aSW3#IC`^#F@N`yXtS(~a{r8pnqej*Jf zqC$IBrPp`XQN6k*c24-V8=yswxIzl`Ihq=@iF6eyBQNEvl?Loh6}y#UeaaUxn~ShY z?dX_XhEx3(X2H`0d-*hPa3p$7TeJ$AuGc8^*5S^zqjd@ynQGc{M>g$U1-Nlip-wZFi-2+2~B4 zbb;;7%$2UNk25z)VV0LwEB%jkX5~tw*oRpMq;ys@B{#!@$C3?RgwC-Jup=KvHemP? zc67?NsSUA2PIwg>1-HW%b_dAg;;}n;>~%a( z2jCY9^Xz@p<7tX{I$`CXnq{0yPQcH{n zktuNx-SDEX_zpM;w@}{B`5g!&zsC7pxQTp-^9Rt6e2nuc=tDlu`4hN`e2MdUxQtA3 zdoaIPn|>6;t0VTtDy5bt{t}&Sa07N`I6!OT8@#1ajWcwE9{h5`S1?NOO~BulG5Oc% zALnnNfa4@`z6r~OVgQySYqQeN4rFF*sfy{ynfPD4kO=gNLL&DR5{X$;+z7&(p?T-Ml5Gvm?xixDRos#&;a7AG z`)l#9<%>o(zQiiqWHwls&X$+hoa^5`Y9r&qhC)!Dc%GvYm`4&l*5=lW?f5t=&|=elzq6NjwA{ zu5u_)Sm)dzcca8Lqe}_MJ!JAM8=S9aca_ec zhHgT%Vf)KnaZGo)K8JC}17ZY#x2j)V*=Nz`Le~# z0;_mWjI5fGHOT$>-rK~@z#$wd$0wL0+su~NY>)#c_EF7o*=%CZuii7e;y$w%abpg0 j3H{qr+tj>%vwJP Date: Sun, 30 Sep 2012 14:53:08 +0800 Subject: [PATCH 3/9] Partially corrected insertion recurception problem --- btree.c | 34 ++++++++++++++++++++-------------- btree.exe | Bin 26506 -> 26506 bytes 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/btree.c b/btree.c index d162e64..fa47c51 100644 --- a/btree.c +++ b/btree.c @@ -192,29 +192,35 @@ struct node* insertN(int value,struct node *root,struct node *parent){ } for (i = right; i < treeOrder; i++){ // Move all right half data to new LeftHalf Box - rightHalf = insertN(root->value[i],rightHalf,NULL); // pointer arithmethic + rightHalf = insertN(root->value[i],rightHalf,NULL); } + int pIsNull = parent == NULL ? 1 : 0; struct node *tempRoot = root; - root = insertN(root->value[mid],parent,parent); + struct node *pParent = pIsNull ? NULL : parent->parent; - if (parent == NULL){ // Special case if splitted is the tRoot (The very Root) - leftHalf->parent = root; - rightHalf->parent = root; - root->keys[0] = leftHalf; - root->keys[1] = rightHalf; + parent = insertN(root->value[mid],parent,pParent); + + if (pIsNull){ // Special case if splitted is the tRoot (The very Root) + leftHalf->parent = parent; + rightHalf->parent = parent; + parent->keys[0] = leftHalf; + parent->keys[1] = rightHalf; + + free(tempRoot); // Delete old root node box + return parent; } else { - for (i = 0; i < tempRoot->parent->keyCount; i++){ - if (tempRoot->parent->keys[i] == tempRoot){ - tempRoot->parent->keys[i] = leftHalf; - tempRoot->parent->keys[i+1] = rightHalf; + for (i = 0; i < parent->keyCount; i++){ + if (parent->keys[i] == tempRoot){ + parent->keys[i] = leftHalf; + parent->keys[i+1] = rightHalf; } } + free(tempRoot); + return leftHalf; } // To do : Non special case split and distribute... or if parent has a parent with values - - free(tempRoot); // Delete old root node box } } @@ -226,7 +232,7 @@ void inOrder(struct node *root){ int i; if (root == NULL) return; else { - //root = root->keys[1]; + // root = root->keys[2]; for (i = 0; i < root->keyCount; i++){ // -1 since left and right key of every data box inOrder(root->keys[i]); if (i < root->keyCount - 1) printf("~%d~\n",root->value[i]); diff --git a/btree.exe b/btree.exe index d19b2f95c0cbc914ccebe0fb1f4a811a56fb9258..9da207449e9f0817ef039985b52f11990a7dfeff 100644 GIT binary patch delta 3003 zcmZ{m4N#Nk9l-xj2uZ*Ip|~E1A7Fw=p%{8wM8OgvuZfC~DpUkqKtbyfAY!n+?kE&w z8s0+^{@us5Ye#Q)z3V=%w%P6Ux_MN)fs|ErNImN&+uSuAtiuWF4Q=*+@{(7%+n&3; z|KIcfem?RhJ(pR}W#&DlD46#3lqmA^eK+1?ZhV~$v2on4NN3Oak1B>3o5M}YgUpL> zD>tOo!~t~Qi#u^V7z_rwq5-CyL_OU$jUO}e@Klri z-KyJq;TA=1b`!JkBKX2YCv#q)y41%8&i~?#uh8PSdZ)RO_|nC4&p*0m63PAy&v8WZ-Nb#{ zBrfKBl(<)T$Tuatq!M&!vQ#-_2vnm_lUR0_j*5(}++QulmT_JnePA7byz)&jxL8pW zuJ}7C>LmBPB5^3{_dH-0A88VEPfF?^ahJDglx|IOaT1xpo_jy_J zKaZ=TR%|-I#AKCBp$d7#fkSlF0%sq|ees>hiXh#eaUjac%or1$8ZkQ6i8;|3?0~;2 zdLvUkLkB;djV~?Beo7RyV#j*&&x_>89e4T~USGDG^<$>CyS=MT2XSu<#{Fi{BU~p> zk1*cVb{$${ML{Qa7%0jk3{R_vgkicEAPU1CVN4XpXp=SM5xRioT2Z(yDm(ci71X6i z(D4-RBC&ju`*iXwV)@M{SSJdTo=z`=b~4c9rl<1_`ih9cI8TzH=BV=sqtl0nggL1& zbrV{HF!$OfGK%GM;t4NhfIMNmHAUPN(oohDKCTSUZ_=D+?iJ>OFnw;Zz_5xJn4|)+ z)2h&-M@3<@>r*rK#?-I@{5r;#wU>P8Hc`|S+V1s*bY_-Nn5OG2Ul45(KL)PP!UM4{ zvTJxQ){4PcPf<;(8M+<>-5K43o{R1T&%NH?rt?Jvm%q(TJ6rEjq$`;sNA3lKRaN^h ziZOL$$QkUuG#zagmv`6UXL0LxaA)bwvC2pX$5W<-QpS0E-Ru5Gy2}5T&Y!3IfW?fZ znBg341`HKxI{f$Jvm=sUz7q_3r9p42pq(o6!5MuDZ~xON%;isg`l~2cN*q|D~_EA&n0Lc;=#mPTG zFZ0)sEAtH0$b1J56R!+48o8?$mU zz+KJe4oV0x#wPiMiQNkWVvxJ&*ufiUVS7XGBzQuU1W;+bt*H3!|zEyw7_Vrqq6q0`~Eifsu_`ZDt4q5F5JrJkRU3x8UnUvAcg zkCPu+4u9ju<3zIOE83)SCAGd}id4EaEZ ztl{~GDZdlT_cyRH{A9nMmfrf^zFhATpYN#wjB-~FSIdzm_aPWu;&Y08Xw&l@6>Px& I1IN7jzem|eTL1t6 delta 2826 zcmZ{meN1?p;#Nlk7$C_f*5*SrUmo@35kN53MdLRP{mgH6hlu>R|^Aa z2^o^`tRJVRU2%VOXMgncBm1K}?P;mHF?Ac*a?p0Jvf9?`sIBZEb*Rgp_g-?{|b@t0p-&R#la_EaUnFD{$Mp!3qQf09F!v|F(jGe^w>OHI$ zUstb5w;2F>W(`N4ibNt}SvNRN>lE|2T$M^vw4}Ue; zk7I6ZhVB4m>i&*DHN@Ij2w#hRgcakt*!0C_iWC#*E3m|96Toj0zt@uQ*Vn{}L^Q>% zSo-Tk%Cy)jzDhoRhgBW8UtcFcpwQ@7Tg5+MW!zzwffI3=dAWMZG(o}CAP548&rl?> ziE}e&if;7?T$jOhn@J~95Qv?auQ7EzAp6_6EmP)d&dX%(<(wk(?>K8@zR39|<)OS^ zasEN(>zpsitSuluCvzI-GcvE?{4ufk&jcLTlnD96r%qJ(zv=$YMEM@#Io8X*>$&e1 znM*kr5cfN8@kNPFX(@WOS#gXEVitz9rt%ZCRb*`E{^w*a=X{1(oTV)lpZ-rIGG9>} zt=KPnzQ8??-4*pBj~d3?T9bCCtbQ4{=oanYp$3@JQ}l0ngiAJk#5tF^JKspF4nD&% zF8Q_%+~fa%>@W3|KrGsMU+>>m`r<2*6+^nWa7fq4Y?v6oJZAh#8Ro>VVh@L_;(yBG z=4j)mvhm4;hZdeD3^?_H&Ic(bHc#mN^AXm0{)}E3EBpgOsRA?-4-wOA zAPom`bU5G=&8LN<>B8nYk4?e z4vs7QBb-z?0%sHkHmPs~t}7hFZV}6q{GKM6ibJc77JgZpfvzVSY7%B;?EvQJf0A`3dnB zh5iW?74Av_`l*v!k9vCW?ZSaI#q_(*C@v26wlvohK#ih_dJ6NJ7`B?a+Kn|X4Qs{G zq6Sr~0Vg*uqKRlp;dL~qhDqUGJLn9uF>=_0*NQcG(-~5pe5x_Y17CHyqiAxwRg<#z zr6@id)eLTO<7tN-jho#Vbn39lwHl8S*ShVfFLC1+o9x&}vU0N>wWV&HAo)DW@)A3$ zx47|Bl3gS{rS`$CZv1Ph9iJmvy2XySNS-G7%r-Z=x7zUr$v={O%EP-4IUBI;QJD^4 z)AlBGY@;^H+<2ViQIdj(S}3O$wo?lvE6b>bilEAzOuPTMH1(Jrp*xS-!JR>7#?Vd+ z*VX2(z;}uZw0nFlZHEBX;_^xhpLB6$aY`P&TYOXKob79?=er`{88|x(eV6# zqWpPSQPaSN@ROP_O}+iGfpxX_`20*mj!IYF*0%l4zI_n9$ETNkt{E}UTgh6(FM6+Q F{tN%n8V&#e From d36c118eebf0890fc278edaffd23a3eccb7fea71 Mon Sep 17 00:00:00 2001 From: "Raven G. Duran" Date: Sun, 30 Sep 2012 17:38:51 +0800 Subject: [PATCH 4/9] Updated Insertion Again --- btree.c | 13 +++++++++---- btree.exe | Bin 26506 -> 27018 bytes 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/btree.c b/btree.c index fa47c51..e9a91cd 100644 --- a/btree.c +++ b/btree.c @@ -158,7 +158,10 @@ struct node* insertN(int value,struct node *root,struct node *parent){ root->keys[i] = insertN(value,root->keys[i],root); break; } else { - for (j = treeOrder - 2; j >= i; j--) root->value[j+1] = root->value[j]; // move everything to the right + for (j = treeOrder - 2; j >= i; j--) { + root->value[j+1] = root->value[j]; // move everything to the right + root->keys[j+2] = root->keys[j+1]; + } root->value[i] = value; root->keyCount++; @@ -167,7 +170,7 @@ struct node* insertN(int value,struct node *root,struct node *parent){ } } - } else { // else if the box is null. Insert directly + } else { // else if the box is null or the last box. Insert directly root->value[i] = value; root->keyCount++; @@ -188,11 +191,13 @@ struct node* insertN(int value,struct node *root,struct node *parent){ struct node *rightHalf = NULL; for (i = 0; i <= left; i++){ // Move all left half data to new LeftHalf Box - leftHalf = insertN(root->value[i],leftHalf,NULL); // Set the parent to NULL temporarily + leftHalf = insertN(root->value[i],leftHalf,parent); // Set the parent to NULL temporarily + leftHalf->keys[i] = root->keys[i]; } for (i = right; i < treeOrder; i++){ // Move all right half data to new LeftHalf Box - rightHalf = insertN(root->value[i],rightHalf,NULL); + rightHalf = insertN(root->value[i],rightHalf,parent); + rightHalf->keys[i] = root->keys[i]; } int pIsNull = parent == NULL ? 1 : 0; diff --git a/btree.exe b/btree.exe index 9da207449e9f0817ef039985b52f11990a7dfeff..5ab5e6c3826b15f2b600313dbbe66675c2f4bd21 100644 GIT binary patch delta 3310 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 From 20af300f49b4ec725a6284786e226798dbf3f6c8 Mon Sep 17 00:00:00 2001 From: "Raven G. Duran" Date: Sun, 30 Sep 2012 18:23:08 +0800 Subject: [PATCH 5/9] Starting To Debug 3+ levels --- btree.c | 11 +++++++++-- btree.exe | Bin 27018 -> 27530 bytes 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/btree.c b/btree.c index e9a91cd..8fbe619 100644 --- a/btree.c +++ b/btree.c @@ -71,7 +71,7 @@ void doInsert(){ system("cls"); printf("--- Insertion ---\n"); printf("Value: "); - scanf("%d",&value); + scanf("%d",&value); tRoot = insertN(value,tRoot,NULL); @@ -147,7 +147,8 @@ struct node* insertN(int value,struct node *root,struct node *parent){ printf("Data Already inserted!\n"); break; } else if ( value > root->value[i] ){ // if value to be inserted is greater, then proceed to next box - if (root->keys[i+1] != NULL && root->keys[i+1]->keyCount < treeOrder + 1) { + if (root->keys[i+1] != NULL && root->keys[i+1]->keyCount < treeOrder + 1 && root->value[i+1] > value) { + PUT_RIGHT: root->keys[i+1] = insertN(value,root->keys[i+1],root); break; } else i++; @@ -155,6 +156,7 @@ struct node* insertN(int value,struct node *root,struct node *parent){ continue; } else { // This is if the value to be inserted is lesser which means, we can put it now if (root->keys[i] != NULL && root->keys[i]->keyCount < treeOrder + 1) { + PUT_LEFT: root->keys[i] = insertN(value,root->keys[i],root); break; } else { @@ -171,6 +173,11 @@ struct node* insertN(int value,struct node *root,struct node *parent){ } } else { // else if the box is null or the last box. Insert directly + if (root->keys[i] != NULL && root->keys[i]->keyCount < treeOrder + 1) { + printf("Succes!\n"); + goto PUT_LEFT; + } + root->value[i] = value; root->keyCount++; diff --git a/btree.exe b/btree.exe index 5ab5e6c3826b15f2b600313dbbe66675c2f4bd21..7d195ffbd5f337133d8b45a9a89641d91ec6c86f 100644 GIT binary patch delta 3870 zcmZ{n3s6+o8G!$@EXxWD>Z%w(KoLbie1m9laqL4;kj8a` zF8r;Jlsar|)7E5CBB{kk?V?6}L~GQlF;>y)xD=<^G+?!2xBs~pjyh@2%-#Px|NESK z?&Y%MD%){`IktxvMy||+sQ^P103G1R0+?a~gaW{@`u7bA-?!>-ec-PgNOLV+p}2#M zdQ(sI$}j@B5-XM#TZ;jre8@lwP|_8ScUT4+hKY*spm9N@SVtF66NB>Yg5L#YcWr?i9N#Ws!@}lYbeofilt`2Xax5p ziX_%^PUK9{>oSd8H-hW@N#~{@a2s)opT6owpyZ##ZCx@i;(S-;?VPX5{3+*lneTEw zCi8vHzmvI#^8uOFDa3nZj^J#Uc?{<&V)sD}Uh|u6d_n!3JC$pDSo2si>vL-4*h=odN9G*PcJ6YR?wNbzf4ttl zit7G~b7aqVxM%SzQMo*73%*e6tA@zxJ=|p!am^GhZ7o=Xom}#JGt?KLOG7Dt%YFQ0 z{}Y^_Q{C_S=f38DgM27fYW4!}^NBzGw7%$TRwM6Ef)6RzVABAHE{qPeJy&Blch^j= zhTv_RFvUM?#6Kyj^DHBiS!2)bwksXUX7#2Y^f?}{{wbNjT8LZy!-GwIJ|>5foHpan z{f7@3ONZOGZ9jMGoJ~J<=58-^&cd7i*@5k}b7XUH+dZ5RU>#gfr>|?ZNX{)_O~5Yy z@PRs7Ob=gt9{F_YDJ@n9jAZfn*MKD|NF~D`(X2^k2HdL2R^0E!>zYbdis^xAECwBc zMXU|K39L{J=brm;RZ!a41df?1=?r+G>kBH7#8p#BWjCv9TH|PQpfZT`7I!|z zH^dg1L??u&jF(adJL;^%|3|v>J^wG=G3}-|mZlov=-+v|^f-+zCyt-pdeXHv(+__n z+zkqV*4tR5n;vc?U0vngc5`D2jdpVr7dCUN(}XVFAd7{}?dFeUTeEC)InyQWr}Ff) zGn3~vpLOO)@^fdNBriJ`N%C6oAAE~2a^RexB3kDWzRvbEwKftr4y?%K7F}H z67pB3lUKFXuH(o{*=nsEr82b}IZBmkf6P%XwxzGwHeRe{TF7!m#3PT_>yQWec{`{$ zADmlsi5`YgOxrM+UivXc{CZGW%jCgFeAL;MB_+$&NBd(>STa3yG+IW7pJIoG4hyW> z3m-@t02Azk>w@2duLL*J-ywOJU_U$*+yq*_a2h6Xf>H1RFbn=Ax+;q_zI*7z6u$FuR*Th>##xaP1q~=OV}^?798~9`%l9}cl)p~+=i2a@4zL&ci~IH z_u!u3`|w2Y-$2d3G^CslKri?nydn4zjOph{aKohj349Hyf<0hSV#BC}Di=Ja)BP^J z*tb9%xQX{ld=efIzc2A;&_R4i;xllY_>{y~;3n}G5?_UD#P=k=2A7F>moB>c?|TPv ze*>K7@@DuB#q~`*6dVWN!u)U}lo2-(tI5WPiMW55pa)ca6B9fI`tXp337$c$;D5se z!B3$`@C#T$JXC758}N8SVwD$MqNMkglF|~SKocCTJ_GjBUFQm%^0j!BnXqZ65PRd9;fSnesV;2MuWF3NatVi%5)=Mm}4;VJa z>+$yJB%c!zMtX%^Vl6C57Zl>66$+CZtt(`lAaBR%N+vEdg$G`W#6$`qrB3Ph7BFVsb!d$0FJ_GZ&+X2b|{ z>=+e&V)GZA3YM-dU&d2J3XSNZPvgTz(?asGV5T2S!ulB{^+`(AM--i;rB#LVEm05_ zO<#?9>4t_G4(1@Q=hE+L{Fh}7UQajRdowMP)X%bD&Kv{o?vtUj<#_|iE2P(^TQKu& z1MVbwiKJ$Z1=BMOxP#<*lIpiDXvs9-Pe`62sm!pTDa(M>Bu{1;8Zs?toNK_%ByZ&y zu$N?Bt^t3TMde98C7CnNfE(sI6b>D2=MwZ-{P6qP^)IJtEYB&!E99lkwXh~knL8eL z5;aStnP;IBz;!!_E=#1I?@)BS%;u9<|8lBsSm0nCSic~a>x!ntV6!DfU1D8Zu^yls zqw`}!nxviP$CZzBw6#$${CH6G`jX=E* z$DBKXR)p~aXQ@Ch<`$N+B5W&cp)IN`+BGxkHJ=~((K}YORk*HVRk?LJWWMIJoqU>w W56`@hG*LLGc!nZL*Rs2~+wZ^8SOPWx delta 3779 zcmZ{n3s98T6@brO7Fd^sT?8uv8jwXyRD_OFtvXp?S69J+;o%FzB0eG_8U*VkHK0g! z-4GW}Cz#e4FiqNwX-WcP!B^JDh(=5?8nqfLcFc5*Ho?{?iQ4Ts{|{H4N$$-5pYNV? z?mg$;d-l%1+b)Q0XN7xfhK31P*_+G0(Q5qD`5<6DdXwRer1*ZF)t?^!*-jZ&gctvQH>C7*O=nzi27@V0im zD8N|%VImEu_$Lhdnnu;!(t6WyrGJtL#hw1Y)Ep1Ni~i=QCW`BI(aSa5lw<*Cgtu%E zIbZMf=Ht+SxDg}CwOxe}Z_2=uc447zY`{h`ct5~;T|{oW>R-wJb5+h|&R~~ybY|Z5 z|MU6!BkBes2CJT1*faLAQA2o?1t01nsxHu2a&Kgpo5VHKOtiI7VQgl}XLE)s?52Ty z-e;dq)&CIl{vY+%`#pxZD-Y{V`@j%M6Lj18_7d$BP%U5vxa!4A=dQ$xxFMx>GFAFwSXJ=x5-FhDt5 zAKW}cJ2;wEc2c=)x|((~trRLlNI#bK6v{X!K*7Ibl`(a!`%%m5Fs0LJe04LtZZ8c2 z*Bq@&)Ew4{O?(M#{N9AujLXwoVl7b9=c{LKjO|!thuX(ymv%#5b=JMP~y7ne|@gaE|Gyv^g*c3WFGKq9`l{-3ZJ5#B3 z+L~B6ZSBny8U_!sPaa1PE$f2CI6^u%l+VzY| zq}pFIs==!JgKg$utyN*mG*Jn+eZKw!B|l#i1?R?$p~BJ-5##5HwcxiyhqX?P=8=iN&Y>Yk^B~%m%IxEFO-@U-iBn!&5$B_ zH_Vj$4irdkhIPzU%HVf_e}vqu@E$lN{|Oo-zYlvPe+Yk;{1zkpv!z5q3Ty#Lg! za1maYhD-2<@)bBO`4U`_+ymDoUxRNYd*Pns8}N`gS`Sc-2gk)%b-*pE z*VniY`@l=QL*e~!op`sxhoFa;FYIdg1imCbs_-eeNPI@&E;vVgP2tnfP0VZa&@*uS zJ;VcfFbDE?4)1}vztc;D&2S40krpT=ZX(u^jhmHtpjqJ?pc_|dR=5rH8Pd=HfjG(k zg-MccgG2INSWc{L0Q?)UCo!?A4=QEIzQ;oL^$+6kKRg!l0q{p1H!C~@DM_qtO-}0Oi^tq5ejXYUR!Q3{AOnkWVRRiEB0x>ji7*4Xfg@=5fdg=x*f<9#WGb=1yRkWfE90MABDK*Sr zOP5I~WjF*U*h)3s1|_LuHhXvy{dT#^`2mO}H!{XdAF1gvpmqAZ@M`*&domHSw@fdg z4}z!}apRBEM=ak{0kC9s*;1b3iqs5b?&;U~(Fa0k-U3{d5vb`kQU)a~deS3#^^6XC ziLhW%=ER1XZjp`kGw&bTkTK82BI~Jx9K@M zeriv_*Gal(4#HI#m1LH#Fkm9 zy5fq}R|n+isTxt|!2 zOtp}WUlg!a8XGZ|HI<)pwVlKi^`S};+PlWXpggAxFJk9xo{$#!Ro>| zs$DFMi*J$9$P)tnX;LMO8h=@7<=Ph^2`?AU54R|u%I~SLsI+u-aS?^IJEqe_+Z`*Z z7VbMH##hT6sj%4zx}}B#oS*;)Ft2E(h{3}}t+Yjzi?`40dBW$FK)QrwT7_%MSCmyO g1CtET^K2!bHPVMQZ<5A@vx{eFdQGiw6yFK_Kf|!`jsO4v From 9b40bf899a077abe0f1b5083c8f11d109433b2f6 Mon Sep 17 00:00:00 2001 From: "Raven G. Duran" Date: Sun, 30 Sep 2012 21:37:17 +0800 Subject: [PATCH 6/9] Still on 3+ Levels --- btree.c | 4 ++-- btree.exe | Bin 27530 -> 27530 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/btree.c b/btree.c index 8fbe619..ece140d 100644 --- a/btree.c +++ b/btree.c @@ -200,12 +200,12 @@ struct node* insertN(int value,struct node *root,struct node *parent){ for (i = 0; i <= left; i++){ // Move all left half data to new LeftHalf Box leftHalf = insertN(root->value[i],leftHalf,parent); // Set the parent to NULL temporarily leftHalf->keys[i] = root->keys[i]; - } + } leftHalf->keys[left+1] = root->keys[left+1]; for (i = right; i < treeOrder; i++){ // Move all right half data to new LeftHalf Box rightHalf = insertN(root->value[i],rightHalf,parent); rightHalf->keys[i] = root->keys[i]; - } + } rightHalf->keys[treeOrder] = root->keys[treeOrder]; int pIsNull = parent == NULL ? 1 : 0; struct node *tempRoot = root; diff --git a/btree.exe b/btree.exe index 7d195ffbd5f337133d8b45a9a89641d91ec6c86f..9d9d876740b4b4cd4def34ff0748ec584f2ea0ab 100644 GIT binary patch delta 2443 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 Date: Sun, 30 Sep 2012 22:35:52 +0800 Subject: [PATCH 7/9] Just a little more bugs for insertion --- btree.c | 11 +++++++++-- btree.exe | Bin 27530 -> 27530 bytes 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/btree.c b/btree.c index ece140d..5901b14 100644 --- a/btree.c +++ b/btree.c @@ -106,7 +106,6 @@ void doInOrder(){ system("cls"); printf("--- Printing ---\n"); - //for (i = 0; i < tRoot->keyCount - 1; i++) printf("%d ", tRoot->value[i]); if (tRoot != NULL) inOrder(tRoot); else printf("\nThe tree is empty!\n"); @@ -219,15 +218,23 @@ struct node* insertN(int value,struct node *root,struct node *parent){ parent->keys[0] = leftHalf; parent->keys[1] = rightHalf; - free(tempRoot); // Delete old root node box + //free(tempRoot); // Delete old root node box return parent; } else { for (i = 0; i < parent->keyCount; i++){ if (parent->keys[i] == tempRoot){ parent->keys[i] = leftHalf; parent->keys[i+1] = rightHalf; + } else if (parent->keys[i] != NULL) { + for (j = 0; j < parent->keys[i]->keyCount; j++){ + if (parent->keys[i]->keys[j] == tempRoot){ + parent->keys[i]->keys[j] = leftHalf; + parent->keys[i]->keys[j+1] = rightHalf; + } + } } } + free(tempRoot); return leftHalf; } diff --git a/btree.exe b/btree.exe index 9d9d876740b4b4cd4def34ff0748ec584f2ea0ab..152728c0decb370c98a4fb5f2decb9d41813b151 100644 GIT binary patch delta 4009 zcmZ{n4OElY8ONXd5=evq34TSzFTSkS33?c_qpm>`jQE8gC<;o@id7LQg6*^#6t#p1 zBwSnFtSj0bJ>5R#hA#Ogv+s8K?5R!T+gBj4ncDSNs#_2MiVVJoL}g@n?e* zLVHk9c^8{uyeK$P8m;38f}dd>yfZjHx-k;Kvmd`4!*xkUup2yELs5Ox>nV)nhLD(% zlh9|6j`NJeAa+xn$}vz|U_0C%*g zd0S{Y75z!U=YCLc2%#Z%ZVHCUX6$l9}figun<)33>; z&15Wth1ZXcl`&?Myt6Szp<0f-^tt^S=;KjWOqAuIGuRjQ_Yvk<9SBJC|lPq z;mg)J%-xkIwhJGWZEQ7rvG$uCJ7jYpoOkOYMef+6*v($QLIh3r`*th7Y_G%Yw(oF> zxc}?9YTq%!wFg}_X0H$KxN6MZKIj^QlXsXei4FOTmq)zB4)d=gEaR8rV&maKT|4ej z(p21)Of)&nn#$vGxH?cCf%ar!pTr9y7qTn-c%+5*MAoJ^#~7jVp|5Q0&Sv}Rvi|l5 zH7CYk2k;FzAY3!bA7Ib6XzaP>zR#DNyY#dpyagQ-n|GeM6KZq}*xAC*=@K%9Sh+2R zC*e+rknwWJNM}u1!ViS&>Ha_Ano{*gS$Go0`y);tTGKV|rf;Jr1PvSP_4%Ai!Da9@ zqCynGO)e>k)f+~!wx-dBFLVX#V1(=gFhMb-5SPGI;um2yaVZoMmq96UIcz1~2$jSy z@kL`(ZJWR~&y!C* z$Rv9uED}5!KPK1)FOXvwtS5d|o<p%}kBAAcy$Zu$K4` z>?A%6yNQp$KH|6GAn|YDPsB&z1aTwWCVm(Gt*{L+0;?uC5xCLs7KZe(cTj32!tUneLdCs58*D_cgx%i9^`#8 ze*`y?56RpDZscP!e+*ZVPlw{IQvvPpB{te+$3?h=d|l?x`J4$uY=NZQIN(5kf^mNK zqAm`4VCXO-DECHBpF5$)pQ1Qly?rh|AK)(}xtIW0EHPu^J`=?RKCsFJdTglJDr_jL z@d)aZ3|yBu$QHsXY1j}Z?p{$$5aNHD1Z&un`!;Z-xeGPI?_{#&+!RX1wl|_!G)jzFda6C>DSqrsn$W zA$+pQ$=Xmma%>lRb@*D*IgXx@U~BQs+0&q#X4;{HzD z{_l_F=0`K?5lz zmeQ`r+A=SN>ts3`89naq0;lN8)E-y#_me2AE(;Kl_`$r|O)SIu9{#`FVC z4KH3;B$^_UZjnVQQLq-VLP2egMRF=wjo6@|X0cOh3`9}$pe3#+O-+5SlQnWzZmh6b zpNrv*nQ598W$Q~f0JQMYd9hN7o@eA`^gkb^Y#1KO!qSyu$J+Rtd9ec;@Ig~HSZv}% zd}&~c9eKy_h}xIN;wgG(=@v;B#m6s;kt*~}S<6N+k$Fje44y`wADhrjfkgl{-a1w} zB#850SXflP;RP^8@vHec{j+4L{9xo46cw#sQP9SxS*Ky3I_p{~OV4|)$?;A~2+yhz zftxI1gimpV^E|s?t=NiF1;=pu<;&|Pd%q{ztOjsWV)-SdtBcDDVHAxo0#%^~7yj85 NITA!Qy}qJb{a^Fu-Wvb_ delta 3819 zcmZ{m3s6+o8G!$@EbIac?1~D$5fG~qSshBXXmf$PxIEPLL41Jj;`;$;5Y)y8Dq2}K zz^;F^#>51YHffu2G}2~Fn?~XzKB%c00;yptMl-I}iF8DZuWbKwFMGt9C z{O3RCo_nj?Saln7S81BFJ=N1RhaP#ZyvJnR&d#vh#w^WUra5KAUuqXI2OiWWjW8Pl zc0GvLx!&jVd1r+J+$thEqm3toap#=5@mj9||Eo`-3dJAvQ5ADk{cpL?YU0YtMk+3pMKti9Z%p5M0M*;<%7eY@gCe-XT&4#cf!I-TeV9o>H^NiK`Qwe4p#EH#jyhKO1TCmUvJp6VMthHS<%usv-2 z@)n-|C>{4UIxYXWz5I-&i%tp`dj?y&woc?yUYBd9+f8Ra)zVTP~yEFI3B9{tH%uy*2FnM%4U-F5>?EcPF0dg<+A82kHu5AP##YD zWUf!d+Yv9ZuQ1(cMYpjk!yGF?Ww)GQeOMtkCmp&5DO+?W=9oS`pjIFlNOM}K83 zEP5Qevqii&;XL)ccH=}gx|qj!M}&qg5QN*g5QT%1^)r|3;q){ z2>t;6D)%H zA`}R|44eF10bfFuUw{^<72FDk1%C~f1pf=#1Yd#cg1>>gg4^M-;D3Wo>reD5^bvdw z1`;dlm*HDT5{B!LCin)-5PS^^1>b}fg1xX#@Lkv>xD&P$t52K@y6EZqwes}2fNn7# zPpJt2$BYflYl1tZc~!A~243R*3ZH-*#P2A48ajxND*QRL6Q5N0GJH*ZN#QS{h4`An zE$A9Mpu(R`2hHZ{$t=EyJIOB|?ty!t1nM(?uh;W@kG#|-!~I^DRyWXRi_&Cx2yucR zDR&VUW#|TnsyCAG6qb{qmZ1yZ7&!oQlloWq;Gvk-*K1m(F3MmT7<+bC1~8Kvk|JuE z@_r&&h5#lBeGr=>SjT1w4raxILs%8(`Sg<^l+|;AnhXYZLPg?Wc1o~`H4E;;Is}{8 zeZl?M6Jm9VfT`xJfd37W=!NtVYh>e1;e8)cr5VJ42J9CEcyUTBzLi$w$Fb=GKTR)UfLAjHVL^_bXnIB+Gm{)Q#7tMU8h>or z(v4-5i>d)Cj}A?F18{=uW)k@h8+D7U+l0T}ZZ9reSppqGq)d86@LMbhmaHjRN&pLlM#SvV1h5wncqXX>ybIWVtmLxyvH#%+}%KEYCBsj3fErfgGzJqjRmA4pqC)kDL9P zJyWfkPSt3fW~CAq=KdUOiHr&vrdwHzLe)fOh4eNn6>f%Y3!b;8pmqj*GGzs0an1|4 zgV>RqvS+3huS`wBt<=w*mV!^HZ>9c~Syr4qJq5d|zfAr5*>1Gig7NjN#aNo>W*5a85isBLOw{kmcT?t` z{5Y<2ycml|veWd7%hr^x14zc<1#!FrnFX1VllrK;L?>}s=~BK;624s!*Vjl-m%6Kb z=f=@3f6;`k1xKke&INH)fkO+nXttR!abYY~u+g?~DARP9aIHO->V)>V1hWXt1Ly)N zK+k6Lsg@O$uUi2}OxSLp8`&i0vfB%biqVG`yQuGZ9>@I>KJT7LPWx(SZwoHpsmQzT|zTe`BOY#F$p^Qj`AP7_XAJXf>U K)VObPm+t?V`j>_P From ec4709cc59a8117948ea727ac7a391ac181d8a9f Mon Sep 17 00:00:00 2001 From: "Raven G. Duran" Date: Sun, 30 Sep 2012 23:09:48 +0800 Subject: [PATCH 8/9] Added SearchNValue and SearchNBox --- btree.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ btree.exe | Bin 27530 -> 28104 bytes 2 files changed, 54 insertions(+) diff --git a/btree.c b/btree.c index 5901b14..7d55de1 100644 --- a/btree.c +++ b/btree.c @@ -10,6 +10,11 @@ struct node { int keyCount; } *tRoot = NULL; +struct nodePosition { + int key; + struct node* box; +}; + // Globals int treeOrder; @@ -23,6 +28,8 @@ void doInOrder(); // Tree Operations struct node* newNode(int value,struct node *parent); struct node* insertN(int value,struct node *root,struct node *parent); +struct node* searchNValue(int value,struct node *root); +struct nodePosition* searchNBox(struct node *toFind,struct node *root); // Printing void inOrder(struct node *root); @@ -94,6 +101,11 @@ void doSearch(){ system("cls"); printf("--- Search ---\n"); + printf("To Find: "); + scanf("%d",&toFind); + + if (searchNValue(toFind,tRoot) == NULL) printf("Not found!\n"); + else printf("found!\n"); printf("\n\n\nPress any key to continue...\n"); getch(); @@ -221,6 +233,14 @@ struct node* insertN(int value,struct node *root,struct node *parent){ //free(tempRoot); // Delete old root node box return parent; } else { + // Find the parent of the current left and right box + struct nodePosition *nodeF = searchNBox(tempRoot,parent); + if (nodeF != NULL){ + nodeF->box->keys[nodeF->key] = leftHalf; + nodeF->box->keys[nodeF->key+1] = rightHalf; + } + + /* for (i = 0; i < parent->keyCount; i++){ if (parent->keys[i] == tempRoot){ parent->keys[i] = leftHalf; @@ -234,6 +254,8 @@ struct node* insertN(int value,struct node *root,struct node *parent){ } } } + */ + free(tempRoot); return leftHalf; @@ -246,6 +268,38 @@ struct node* insertN(int value,struct node *root,struct node *parent){ return root; } +struct node* searchNValue(int value,struct node *root){ + int i; + struct node *nodeF = NULL; + if (root == NULL) return NULL; + else { + for (i = 0; i < root->keyCount; i++){ // -1 since left and right key of every data box + if (root->value[i] == value) return root; + else if (nodeF != NULL) return nodeF; + else nodeF = searchNValue(value,root->keys[i]); + } + return nodeF; + } +} + +struct nodePosition* searchNBox(struct node *toFind,struct node *root){ + int i; + struct nodePosition *nodeF = NULL; + if (root == NULL) return NULL; + else { + for (i = 0; i < root->keyCount; i++){ // -1 since left and right key of every data box + if (root == toFind) { + nodeF->box = root; + nodeF->key = i; + return nodeF; + } + else if (nodeF != NULL) return nodeF; + else nodeF = searchNBox(toFind,root->keys[i]); + } + return nodeF; + } +} + // Printing void inOrder(struct node *root){ int i; diff --git a/btree.exe b/btree.exe index 152728c0decb370c98a4fb5f2decb9d41813b151..0309cb37c76b2d87a0f53b2702d3ed544e6a4371 100644 GIT binary patch delta 8214 zcma)>4P2B}zQ_M(cpD96c(E`=3GfBh5=_ZZbc7ik!xvOgQxgynO$355t*jxDa+);o zq_w35+sp2)wl!(@w$-+5xvQ0aF5Gp??d3)<7DZdOxn1ukZrtDhJTvEc=C=3qx##nl zdA{d&{^$Jv|8vfBo@d~mx5deKMf=_ndn-1VkdtU^M~8DnClN&wZQbAT&XczL6XkBP zR5)dy*pa*0fu=@$67WgG$5L!|D!8iITe-2>+than8rt!R#b;*s9kv&REh$0fMQ*em zjhBx^UNyNTo~Z4+xIH%y4-XGK2D8uWKqn$IxM$Am{>2%Q1MB1E-y^RYKMkgzPcmCy z5-{&{!DUNI>`I86c z!9(jO=LaS`WO8)c#J|U3u<;oKU%~>0`L@r$1#sHcsg?&cpz`IJQI_@tPry|7|R)O zT>FsH>#vph&$WJ;3@wXC^g{z*%RP@6yqLKIyw5$vlN3s@ezdHxU+z1LF&}dniI=kJ za+nV68ilWCe;6JPI1i`Ylgy8 zGA#nyGidO;hvbtZ_C}oie4fl1nGy31yUB^|UO#fJh#paZO0RtRlB-82GCnX8w^A~0 zCE0Pwq;aaX8dAU=8)%t|5$8lTB9*xP(`0_^lIZc=WvIJ7Hc5;+J{WVteVkAN?&I>g zQCVWPd~eh&-^sxZ0k^}L<}*Ca@4>|HKGk~rDe`6o+@}JbNd9&N-2MJN9qrgDVd8rb z?^mMg{ca4m_xs%^2cr=ct^xPS*5l4~8*VUmY0?SzMUJBN_E_3J;)KtAfop>`C)`5} zW+v{TJFeqe*-#*|eU96{-LA&FFqqeR`$h7icG2&?FgPtx78`I61@`Rb(2P9noX35b zCBOS3HvBLR{=%>hxGx0vawrU6FpgjtjsGl+GC1Y{#sny~*b8awc-)~?^f#s0_(fS9w*iGc5JO9fmpL5i@TGE}=dU4pB z+1BHK&70`|Zr{sO*m^kW2sagP{|=7ZQ{dpK3&X?f*4^-0VALKo@0z-&z)3HDfk^NaiS?Ie@WJyO zv=@5u#Y;SJz((}KkZepSy1W9~zU>d5a35ZPa>Cuo7r*<3u4>tvFvhbP%_rQ?7;Q(5 zww|s!r9N*|k9RflxbBl(UUfaywNqVtyLPGTnYe$AYLQnaE*X73%}Ku%gyW#l-Z??; zO>8P-_x`rcSlX^?h5Q)oVz2(TMn-n!Z}T!LH*Gr^m8Z5{jE1w8ptC*ftb19~Cfm5x zUk?wr8wGa5jhJOF%(BDQcpy17qCMRyzrJj2_uS-l5#vi6Qj50KSLdbD(gttpriShH z)mMxp<0=o1+j3yMvwQCN$HlP;(UB28(bqj9EfC>rQG*h_GlD3CCR2ZcQzuI4N%(0nDW(mb8kY0jn!%{f#eal6_@q_&bN2s%&wr}yi)m7l6E)7hSX~WXYRP_?CHoRf_RB5V zucZ87Zx@x(2F)2{+Jfh77$CNgKsQH&GifcVraLL^Wn&tncn%BS*_zsG@DAHDjEr#YN5P%3m(J z*%IsyOR%?Cg1yzUId@q$=k1owc}HkJ&cvWCmJNBQWkc?!)}U(_XfL=-EuohKm%B0@ zz8h4qchN@(b{n{p?jk$vZVfWO;c{_74;2^EG-rG-jR`im$WJMn@3GAIK1)LT={jw5 z-#l8aEBk1(<^z_ckSaMp0&0QdAslf=68F+Yd1T6EvLegjJBZc{I!LQ74W)5VrSXJH z(iAUx~TaN6ln`Z`WlVW{02?d z{3gxOe2P|TK22LS{~PVr+)Mj4_tC*1`&{&AI;zVnLg9}7Ja4pEZO<3 z3B^T!rLmgdp*fn*Qkmv=X}#w6>9&aAlgfpYdarKyfc9(tkbb54W9rlV3B9fP9DS_$ zQ~Fx-XY{@1FDNE56zJb5PP6YT%FvasDNFNtny)!hlxmI=<(gwft>#f;8`!wN4iR3( zhL5TH?hu^^v+EwiKfS2*H|b00fAp!!DH=efPw{E`1pKbzUg`%AD(<8Az(b1Pr?cRZ z_|e^hnL7i%T=56g3l2Hs{gJ8kztJg+9?HHShQ3e+T(RI^ukHsXoTL5Oak}BSown=cHzEC#6`@NU@}mVo777 zC5==|8fl?45LLP*iwtqC;dc`nCW(Sz5P0Jg*J++AR%p%?6`Ioo4kcAw^b-+Ez(rSz zd!ZVsPEe`tR;f-5rrHtg#Vf{qpGq}be1cSsRmxVWvYCsrE$Pj$q&G{9W&;$w4vKUG z!Pkh{nrB&}%@eiI5mgkmP>zs?rzFe8(;dD?mG`+~$@q}>xfbtpE#Bu@ygNm__Od`s z(d-mX&4rdN;u0&hUL>|@URWXcna#yT9?_|Yd69TkbCEc%d8v3)^D@z|d8zn^<`sf} zO&bf4FXv=urXNF+se~_-9>s}@`KubA;uL51g5-xpx0um6;_CW_>Y9><<}KbW4fT1Y zQ?sYdxF$2ddG^+tTk=rJ$()uw?dlnGHa6_!>Wth>)Vd#@QzojpW04YPXXa-a9jUpd zvZ-qG(p8mp+iUWQj2>iK=4OU03NWB*pPfnG2K8g6@ki#f+zy-5IIpx#b4`8j|E!b1n} zSrg{#5R|?dkyfKlNDqf8PeGX!raUkAIVVPKg}YnibI#hR7QC#)$&>{XZ7Xc@e15XH zR<2%?6kT^WsDC?zn(^ajoEhLVjM zZwABW0F(;UOq)lc@CjksJjLVSbuc`MPUQ>Zh;uNVCVy9SgQ$?>7N$=>gj*k7@Pb_3 zP|rJ#eyNqvthNW02yrE5b*;RiI7alyjzv`+*^$wILhqjV&{{z+_iUA(6}bl%d2Gi> z_LQc{xYTAOZ)UiqgLx$>c6kGdu=_DI*tTzM#XOx18*+%h%&kS`gHkGDH2N53Efn- zP26Q96cX*SepMaY@EDHO9$U77`+-gaW7l|WB?jIDtT51iy+<5^lZCd%&{#1tV(m8Z zxN@LH`+;?JNNU@XK?vzK6oDO`FSjYEX<^nKGeNgatk8M>Y$ggl-ta*K)(gXBnsx5r=KwJ1>i|G~YsL37ZHTB5X%H8iF>7P+G#qxdKY6 z>cuwYn>N*LZ{AF#Y*K^0a&lqR8#YircMDS%L75$v@hUm7VoZ`l4^>`XSy$IkRoNad zJrxtgCRtmNp12d;!Xvs{9;rxQ^aylk*l^E4;egBu{5=$Y3pEMwgK~SewFe>rOig^^UavsW5JvJ-D>;@}n`cKA-2p5^IJHk1th zjUEiLa$`dip6=(v+!w*96Wz>(+6d($6r&e_c0l1`I@<%~3>4Gmr%jTQ z?rVRf_~h3c$M}wh1#l2nC3-WLH#Tjl_in-;$~nEz*8Lf5oZ5zC>1G9M#LHydIDdii zIM57x5K1H3&Gq;W3dz>0_}CsjezaY7R#j&NU!(DoOyzYoH`mmu7g;K|zFv2auHF^% EKjuqFyZ`_I delta 7348 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 HXbk&52@{*- From 9919d4eb1edfdb72600b4724119048657b84825c Mon Sep 17 00:00:00 2001 From: "Raven G. Duran" Date: Mon, 1 Oct 2012 09:06:34 +0800 Subject: [PATCH 9/9] Partial Stack Implementation fro multiple splits --- btree.c | 96 +++++++++++++++++++++++++++++++++++++++--------------- btree.exe | Bin 28104 -> 29694 bytes 2 files changed, 69 insertions(+), 27 deletions(-) diff --git a/btree.c b/btree.c index 7d55de1..4c2403d 100644 --- a/btree.c +++ b/btree.c @@ -15,6 +15,16 @@ struct nodePosition { struct node* box; }; +// Left-right stack for multiple splitting +struct splitStack { + struct node *leftHalf; + struct node *rightHalf; + struct splitStack *next; +} *head = NULL; + +void pushS(struct node *leftHalf, struct node *rightHalf); +struct splitStack *popS(); + // Globals int treeOrder; @@ -28,7 +38,7 @@ void doInOrder(); // Tree Operations struct node* newNode(int value,struct node *parent); struct node* insertN(int value,struct node *root,struct node *parent); -struct node* searchNValue(int value,struct node *root); +struct nodePosition* searchNValue(int value,struct node *root); struct nodePosition* searchNBox(struct node *toFind,struct node *root); // Printing @@ -209,14 +219,20 @@ struct node* insertN(int value,struct node *root,struct node *parent){ struct node *rightHalf = NULL; for (i = 0; i <= left; i++){ // Move all left half data to new LeftHalf Box - leftHalf = insertN(root->value[i],leftHalf,parent); // Set the parent to NULL temporarily + leftHalf = insertN(root->value[i],leftHalf,NULL); // Set the parent to NULL temporarily leftHalf->keys[i] = root->keys[i]; + + if (root->keys[i] != NULL) root->keys[i]->parent = leftHalf; } leftHalf->keys[left+1] = root->keys[left+1]; + if (root->keys[treeOrder] != NULL) root->keys[treeOrder]->parent = leftHalf; for (i = right; i < treeOrder; i++){ // Move all right half data to new LeftHalf Box - rightHalf = insertN(root->value[i],rightHalf,parent); + rightHalf = insertN(root->value[i],rightHalf,NULL); rightHalf->keys[i] = root->keys[i]; + + if (root->keys[i] != NULL) root->keys[i]->parent = rightHalf; } rightHalf->keys[treeOrder] = root->keys[treeOrder]; + if (root->keys[treeOrder] != NULL) root->keys[treeOrder]->parent = rightHalf; int pIsNull = parent == NULL ? 1 : 0; struct node *tempRoot = root; @@ -234,30 +250,27 @@ struct node* insertN(int value,struct node *root,struct node *parent){ return parent; } else { // Find the parent of the current left and right box - struct nodePosition *nodeF = searchNBox(tempRoot,parent); - if (nodeF != NULL){ - nodeF->box->keys[nodeF->key] = leftHalf; - nodeF->box->keys[nodeF->key+1] = rightHalf; - } - - /* + int found = 0; for (i = 0; i < parent->keyCount; i++){ - if (parent->keys[i] == tempRoot){ + if (parent->keys[i] != NULL && parent->keys[i] == tempRoot){ parent->keys[i] = leftHalf; parent->keys[i+1] = rightHalf; - } else if (parent->keys[i] != NULL) { - for (j = 0; j < parent->keys[i]->keyCount; j++){ - if (parent->keys[i]->keys[j] == tempRoot){ - parent->keys[i]->keys[j] = leftHalf; - parent->keys[i]->keys[j+1] = rightHalf; - } - } + + leftHalf->parent = parent; + rightHalf->parent = parent; + found = 1; } } - */ + + struct nodePosition *nodeF = searchNBox(tempRoot,tRoot); + if (nodeF != NULL && !found) { + printf("Beep: i is %d\n",nodeF->key); + nodeF->box->keys[nodeF->key] = leftHalf; + nodeF->box->keys[nodeF->key+1] = rightHalf; + } - free(tempRoot); + //free(tempRoot); return leftHalf; } @@ -268,13 +281,18 @@ struct node* insertN(int value,struct node *root,struct node *parent){ return root; } -struct node* searchNValue(int value,struct node *root){ +struct nodePosition* searchNValue(int value,struct node *root){ int i; - struct node *nodeF = NULL; + struct nodePosition *nodeF = NULL; if (root == NULL) return NULL; else { for (i = 0; i < root->keyCount; i++){ // -1 since left and right key of every data box - if (root->value[i] == value) return root; + if (root->value[i] == value) { + nodeF = (struct nodePosition*)malloc(sizeof(struct nodePosition)); + nodeF->box = root; + nodeF->key = i; + return nodeF; + } else if (nodeF != NULL) return nodeF; else nodeF = searchNValue(value,root->keys[i]); } @@ -289,6 +307,7 @@ struct nodePosition* searchNBox(struct node *toFind,struct node *root){ else { for (i = 0; i < root->keyCount; i++){ // -1 since left and right key of every data box if (root == toFind) { + nodeF = (struct nodePosition*)malloc(sizeof(struct nodePosition)); nodeF->box = root; nodeF->key = i; return nodeF; @@ -305,8 +324,8 @@ void inOrder(struct node *root){ int i; if (root == NULL) return; else { - // root = root->keys[2]; - for (i = 0; i < root->keyCount; i++){ // -1 since left and right key of every data box + //root = root->keys[1]->keys[3]; + for (i = 0; i < root->keyCount + 2; i++){ // -1 since left and right key of every data box inOrder(root->keys[i]); if (i < root->keyCount - 1) printf("~%d~\n",root->value[i]); } @@ -318,12 +337,12 @@ void levelOrder(struct node *root){ if (root == NULL) return; else { for (i = 0; i < root->keyCount - 1; i++){ // -1 since left and right key of every data box - printf("%d ",root->value[i]); + printf("Node %d : %d ",i,root->value[i]); } printf(" "); if (root->parent == NULL) printf("\n"); else { - for (i = 0; i < root->parent->keyCount; i++){ // Check if had a right sibling, if none then proceed to next level + for (i = 0; i < root->parent->keyCount + 2; i++){ // Check if had a right sibling, if none then proceed to next level if (root->parent->keys[i] == root){ if (root->parent->keys[i+1] == NULL) printf("\n"); break; @@ -336,3 +355,26 @@ void levelOrder(struct node *root){ } } } + +void pushS(struct node *leftHalf, struct node *rightHalf){ + struct splitStack *newNode = (struct splitStack*)malloc(sizeof(struct splitStack)); + newNode->leftHalf = leftHalf; + newNode->rightHalf = rightHalf; + if (head == NULL){ + head = newNode; + head->next = NULL; + } else { + newNode->next = head; + head = newNode; + } +} + +struct splitStack *popS(){ + if (head == NULL) { + printf("Stack Underflow!!\n"); + getch(); + exit(-1); + } else { + + } +} diff --git a/btree.exe b/btree.exe index 0309cb37c76b2d87a0f53b2702d3ed544e6a4371..cfd147d28c2c7c01bd6ec86ffd73d21b98832d32 100644 GIT binary patch delta 8073 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 delta 6809 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 bsn4N~Ds`Cg0Vbi(@5;c;8@RJ8(Eon{{yhjL