最新奇迹私服发布
变态奇迹私发服网
奇迹mu外挂
奇迹世界体验服
奇迹私服发布
最新文章top
冒险岛sf 健康 - 可心专栏 - 博客频道
传奇外传私服 2010年12月存档 - 杨琦
传奇私服发布 shell脚本变量学习小记
新开传奇 男生那点事 - 第3集 - 在线
热血江湖sf 解脱
1.76传奇私服 小学二、三年级(加减乘
1.85必杀元素 奇志大兵[相声全集] 在
网通传奇新开 荣耀与蜀门sf网同在
1.76金币版本 一堂价值39万元的课,把
蜀门sf 颁奖:2010年度最受消费者关注
热门文章top
冒险岛sf 健康 - 可心专栏 - 博客频道
传奇外传私服 2010年12月存档 - 杨琦
传奇私服发布 shell脚本变量学习小记
新开传奇 男生那点事 - 第3集 - 在线
热血江湖sf 解脱
1.76传奇私服 小学二、三年级(加减乘
1.85必杀元素 奇志大兵[相声全集] 在
网通传奇新开 荣耀与蜀门sf网同在
1.76金币版本 一堂价值39万元的课,把
蜀门sf 颁奖:2010年度最受消费者关注
冒险岛sf 健康 - 可心专栏 - 博客频道 - CSDN.NET[转]B+树的结构和实现代码 - heiyeluren的blog(黑夜路人
1.治疗肠胃道疾病 由于蜂蜜有杀菌作用,且具有调节肠胃功能,治疗胃及十二指肠溃疡有显著效果,
传奇世界私服
,同时蜂蜜对结肠炎、习惯性便秘、老人和孕妇便秘及儿童痢疾等都有良好的疗效; 2.治疗呼吸系统疾病 临床经验表明,结核病患者服蜂蜜后,血红蛋白增加,血沉减慢,咳嗽逐渐减轻,食欲增强; 3.治疗肝脏病 蜂蜜治疗肝脏病主要由于它的化学和生物学上的成份所决定,此外也用它来治胆囊病; ...
/*
*****************************************************
*/
/*
btrees.c
*/
#include
#include
#include
"
btrees.h
"
btreesearch(typekey,btree);
btreeinsert(typekey,
天龙私服
,btree);
btreedelete(typekey,btree);
int
height(btree);
int
count(btree);
double
payload(btree);
btreedeltree(btree);
static
void
InternalInsert(typekey,btree);
static
void
InsInNode(btree,
int
);
static
void
SplitNode(btree,
int
);
static
btreeNewRoot(btree);
static
void
InternalDelete(typekey,btree);
static
void
JoinNode(btree,
int
);
static
void
MoveLeftNode(btreet,
int
);
static
void
MoveRightNode(btreet,
蜀门sf
,
int
);
static
void
DelFromNode(btreet,
int
);
static
btreeFreeRoot(btree);
static
btreedelall(btree);
static
void
Error(
int
,typekey);
int
btree_disp;
/*
????????????????е?λ??
*/
char
*
InsValue
=
NULL;
/*
??????????????
*/
static
int
flag;
/*
??????????
*/
static
int
btree_level
=
0
;
/*
?????????
*/
static
int
btree_count
=
0
;
/*
????????????
*/
static
int
node_sum
=
0
;
/*
?????????????
*/
static
int
level;
/*
???????????????
*/
static
btreeNewTree;
/*
????????????????????
*/
static
typekeyInsKey;
/*
???????
*/
btreesearch(typekeykey,btreet)
{
int
i,j,m;
level
=
btree_level
-
1
;
while
(level
>=
0
){
for
(i
=
0
,j
=
t
->
d
-
1
;it
->
k[m])
?
(i
=
m
+
1
):(j
=
m));
if
(key
==
t
->
k){
btree_disp
=
i;
return
t;
}
if
(key
>
t
->
k)
/*
i==t->d-1??п??????
*/
i
++
;
t
=
t
->
p;
level
--
;
}
return
NULL;
}
btreeinsert(typekeykey,btreet)
{
level
=
btree_level;
InternalInsert(key,t);
if
(flag
==
1
)
/*
????????????????????????
*/
t
=
NewRoot(t);
/*
??????????
*/
return
t;
}
void
InternalInsert(typekeykey,btreet)
{
int
i,j,
sf传奇
,m;
level
--
;
if
(level
<
0
){
/*
????????????:???????????
*/
NewTree
=
NULL;
/*
???????ж????????
*/
InsKey
=
key;
/*
??????????????????+????????
*/
btree_count
++
;
flag
=
1
;
/*
????????????????????
*/
return
;
}
for
(i
=
0
,j
=
t
->
d
-
1
;it
->
k[m])
?
(i
=
m
+
1
):(j
=
m));
if
(key
==
t
->
k){
Error(
1
,key);
/*
???????????
*/
flag
=
0
;
return
;
}
if
(key
>
t
->
k)
/*
i==t->d-1??п??????
*/
i
++
;
InternalInsert(key,t
->
p);
if
(flag
==
0
)
return
;
/*
??????????????????
*/
if
(t
->
d
<
2
*
M){
/*
??????δ??
*/
InsInNode(t,i);
/*
????+???????????????
*/
flag
=
0
;
/*
????????????????????+???????????????
*/
}
else
/*
????????????????????????+???????????????
*/
SplitNode(t,i);
/*
??????????????????+????????????
*/
}
/*
*??????????????????????????????
*/
void
InsInNode(btreet,
int
d)
{
int
i;
/*
?????д?????????????????????????????
*/
for
(i
=
t
->
d;i
>
d;i
--
){
t
->
k
=
t
->
k[i
-
1
];
t
->
v
=
t
->
v[i
-
1
];
t
->
p[i
+
1
]
=
t
->
p;
}
/*
????????????
*/
t
->
k
=
InsKey;
t
->
p[i
+
1
]
=
NewTree;
t
->
v
=
InsValue;
t
->
d
++
;
}
/*
*?????????????????????????????????????????
*??????????????????????????????
*?????????????????????????????
*/
void
SplitNode(btreet,
int
d)
{
int
i,j;
btreetemp;
typekeytemp_k;
char
*
temp_v;
/*
????????
*/
temp
=
(btree)malloc(
sizeof
(node));
/*
*+---+--------+-----+-----+--------+-----+
*0......MM+1......2*M-1
*+---+--------+-----+-----+--------+-----+
*<-M+1-><-M-1->
*/
if
(d
>
M){
/*
???????????????
*/
/*
???2*M-1??M+1??M-1?????+????????????????,
*?????????????+???????λ??
*/
for
(i
=
2
*
M
-
1
,j
=
M
-
1
;i
>=
d;i
--
,j
--
){
temp
->
k[j]
=
t
->
k;
temp
->
v[j]
=
t
->
v;
temp
->
p[j
+
1
]
=
t
->
p[i
+
1
];
}
for
(i
=
d
-
1
,j
=
d
-
M
-
2
;j
>=
0
;i
--
,j
--
){
temp
->
k[j]
=
t
->
k;
temp
->
v[j]
=
t
->
v;
temp
->
p[j
+
1
]
=
t
->
p[i
+
1
];
}
/*
??????????????????????????????
*/
temp
->
p[
0
]
=
t
->
p[M
+
1
];
/*
???????в???????????
*/
temp
->
k[d
-
M
-
1
]
=
InsKey;
temp
->
p[d
-
M]
=
NewTree;
temp
->
v[d
-
M
-
1
]
=
InsValue;
/*
??????????????????
*/
InsKey
=
t
->
k[M];
InsValue
=
t
->
v[M];
}
else
{
/*
d<=M
*/
/*
???2*M-1??M??M?????+????????????????
*/
for
(i
=
2
*
M
-
1
,j
=
M
-
1
;j
>=
0
;i
--
,j
--
){
temp
->
k[j]
=
t
->
k;
temp
->
v[j]
=
t
->
v;
temp
->
p[j
+
1
]
=
t
->
p[i
+
1
];
}
if
(d
==
M)
/*
?????????????м?
*/
/*
????????????????????????????
*/
temp
->
p[
0
]
=
NewTree;
/*
???????????????????????
*/
else
{
/*
(d/*????????????????????????????????
*/
temp
->
p[
0
]
=
t
->
p[M];
/*
??????????????????
*/
temp_k
=
t
->
k[M
-
1
];
temp_v
=
t
->
v[M
-
1
];
/*
?????д?????????????????????????????
*/
for
(i
=
M
-
1
;i
>
d;i
--
){
t
->
k
=
t
->
k[i
-
1
];
t
->
v
=
t
->
v[i
-
1
];
t
->
p[i
+
1
]
=
t
->
p;
}
/*
?????в???????????
*/
t
->
k[d]
=
InsKey;
t
->
p[d
+
1
]
=
NewTree;
t
->
v[d]
=
InsValue;
/*
??????????????????
*/
InsKey
=
temp_k;
InsValue
=
temp_v;
}
}
t
->
d
=
M;
temp
->
d
=
M;
NewTree
=
temp;
node_sum
++
;
}
btreedelete(typekeykey,btreet)
{
level
=
btree_level;
InternalDelete(key,t);
if
(t
->
d
==
0
)
/*
???????????????????????????????
*??????????м?????????????????????????
*/
t
=
FreeRoot(t);
return
t;
}
void
InternalDelete(typekeykey,btreet)
{
int
i,
冒险岛sf
,j,m;
btreel,r;
int
lvl;
level
--
;
if
(level
<
0
){
Error(
0
,key);
/*
?????????δ?????????
*/
flag
=
0
;
return
;
}
for
(i
=
0
,j
=
t
->
d
-
1
;it
->
k[m])
?
(i
=
m
+
1
):(j
=
m));
if
(key
==
t
->
k){
/*
?????????
*/
if
(t
->
v
!=
NULL)
free(t
->
v);
/*
????????????
*/
if
(level
==
0
){
/*
????????????????λ???????
*/
DelFromNode(t,i);
btree_count
--
;
flag
=
1
;
/*
??????????????????????
*/
return
;
}
else
{
/*
?????λ???????
*/
lvl
=
level
-
1
;
/*
????????
*/
r
=
t
->
p;
while
(lvl
>
0
){
r
=
r
->
p[r
->
d];
lvl
--
;
}
t
->
k
=
r
->
k[r
->
d
-
1
];
t
->
v
=
r
->
v[r
->
d
-
1
];
r
->
v[r
->
d
-
1
]
=
NULL;
key
=
r
->
k[r
->
d
-
1
];
}
}
else
if
(key
>
t
->
k)
/*
i==t->d-1??п??????
*/
i
++
;
InternalDelete(key,t
->
p);
/*
???????
*/
if
(flag
==
0
)
return
;
if
(t
->
p
->
d
<
M){
if
(i
==
t
->
d)
/*
???????????з????????
*/
i
--
;
/*
?????????????????????
*/
l
=
t
->
p;
r
=
t
->
p[i
+
1
];
if
(r
->
d
>
M)
MoveLeftNode(t,i);
else
if
(l
->
d
>
M)
MoveRightNode(t,i);
else
{
JoinNode(t,i);
/*
??????????????????????????
*/
return
;
}
flag
=
0
;
/*
????????????????????м????????????
*/
}
}
/*
*???????????????????????????
*/
void
JoinNode(btreet,
int
d)
{
btreel,r;
int
i,j;
l
=
t
->
p[d];
r
=
t
->
p[d
+
1
];
/*
?????????????????????
*/
l
->
k[l
->
d]
=
t
->
k[d];
l
->
v[l
->
d]
=
t
->
v[d];
/*
?????????е????м??????????????????
*/
for
(j
=
r
->
d
-
1
,i
=
l
->
d
+
r
->
d;j
>=
0
;j
--
,i
--
){
l
->
k
=
r
->
k[j];
l
->
v
=
r
->
v[j];
l
->
p
=
r
->
p[j];
}
l
->
p[l
->
d
+
r
->
d
+
1
]
=
r
->
p[r
->
d];
l
->
d
+=
r
->
d
+
1
;
/*
?????????????
*/
free(r);
/*
???????????????????????????
*/
for
(i
=
d;i
<
t
->
d
-
1
;i
++
){
t
->
k
=
t
->
k[i
+
1
];
t
->
v
=
t
->
v[i
+
1
];
t
->
p[i
+
1
]
=
t
->
p[i
+
2
];
}
t
->
d
--
;
node_sum
--
;
}
/*
*??????????????????????????Щ??????????????
*/
void
MoveLeftNode(btreet,
int
d)
{
btreel,r;
int
m;
/*
??????????
*/
int
i,j;
l
=
t
->
p[d];
r
=
t
->
p[d
+
1
];
m
=
(r
->
d
-
l
->
d)
/
2
;
/*
?????????????????????
*/
l
->
k[l
->
d]
=
t
->
k[d];
l
->
v[l
->
d]
=
t
->
v[d];
/*
??????????????????????????????????????
*???????????????????m-1????+??????
*/
for
(j
=
m
-
2
,i
=
l
->
d
+
m
-
1
;j
>=
0
;j
--
,i
--
){
l
->
k
=
r
->
k[j];
l
->
v
=
r
->
v[j];
l
->
p
=
r
->
p[j];
}
l
->
p[l
->
d
+
m]
=
r
->
p[m
-
1
];
/*
?????????????????????????λ????
*/
t
->
k[d]
=
r
->
k[m
-
1
];
t
->
v[d]
=
r
->
v[m
-
1
];
/*
?????????е????м????????????m??λ??
*/
r
->
p[
0
]
=
r
->
p[m];
for
(i
=
0
;id
-
m;i
++
){
r
->
k
=
r
->
k[i
+
m];
r
->
v
=
r
->
v[i
+
m];
r
->
p
=
r
->
p[i
+
m];
}
r
->
p[r
->
d
-
m]
=
r
->
p[r
->
d];
l
->
d
+=
m;
r
->
d
-=
m;
}
/*
*??????????????????????????Щ??????????????
*/
void
MoveRightNode(btreet,
int
d)
{
btreel,r;
int
m;
/*
??????????
*/
int
i,j;
l
=
t
->
p[d];
r
=
t
->
p[d
+
1
];
m
=
(l
->
d
-
r
->
d)
/
2
;
/*
?????????е????м????????????m??λ??
*/
r
->
p[r
->
d
+
m]
=
r
->
p[r
->
d];
for
(i
=
r
->
d
-
1
;i
>=
0
;i
--
){
r
->
k[i
+
m]
=
r
->
k;
r
->
v[i
+
m]
=
r
->
v;
r
->
p[i
+
m]
=
r
->
p;
}
/*
?????????????????????
*/
r
->
k[m
-
1
]
=
t
->
k[d];
r
->
v[m
-
1
]
=
t
->
v[d];
/*
??????????????????????????????????????
*/
r
->
p[m
-
1
]
=
l
->
p[l
->
d];
/*
???????????????????m-1????+??????
*/
for
(i
=
l
->
d
-
1
,j
=
m
-
2
;j
>=
0
;j
--
,i
--
){
r
->
k[j]
=
l
->
k;
r
->
v[j]
=
l
->
v;
r
->
p[j]
=
l
->
p;
}
/*
?????????????????????????λ????
*/
t
->
k[d]
=
l
->
k;
t
->
v[d]
=
l
->
v;
l
->
d
-=
m;
r
->
d
+=
m;
}
/*
*???????????????????????????????
*/
void
DelFromNode(btreet,
int
d)
{
int
i;
/*
?????д?????????????????
*/
for
(i
=
d;i
<
t
->
d
-
1
;i
++
){
t
->
k
=
t
->
k[i
+
1
];
t
->
v
=
t
->
v[i
+
1
];
}
t
->
d
--
;
}
/*
*?????????????????????????
*/
btreeNewRoot(btreet)
{
btreetemp;
temp
=
(btree)malloc(
sizeof
(node));
temp
->
d
=
1
;
temp
->
p[
0
]
=
t;
temp
->
p[
1
]
=
NewTree;
temp
->
k[
0
]
=
InsKey;
temp
->
v[
0
]
=
InsValue;
btree_level
++
;
node_sum
++
;
return
(temp);
}
/*
*???????????????????????
*/
btreeFreeRoot(btreet)
{
btreetemp;
temp
=
t
->
p[
0
];
free(t);
btree_level
--
;
node_sum
--
;
return
temp;
}
void
Error(
int
f,typekeykey)
{
if
(f)
printf(
"
Btreeserror:Insert%d!
"
,key);
else
printf(
"
Btreeserror:delete%d!
"
,key);
}
int
height(btreet)
{
return
btree_level;
}
int
count(btreet)
{
return
btree_count;
}
double
payload(btreet)
{
if
(node_sum
==
0
)
return
1
;
return
(
double
)btree_count
/
(node_sum
*
(
2
*
M));
}
btreedeltree(btreet)
{
level
=
btree_level;
btree_level
=
0
;
return
delall(t);
}
btreedelall(btreet)
{
int
i;
level
--
;
if
(level
>=
0
){
for
(i
=
0
;i
<
t
->
d;i
++
)
if
(t
->
v
!=
NULL)
free(t
->
v);
if
(level
>
0
)
for
(i
=
0
;i
<=
t
->
d;i
++
)
t
->
p
=
delall(t
->
p);
free(t);
}
return
NULL;
}
/*
endofbtrees.c
*/
上一篇:
传奇外传私服 2010年12月存档 - 杨琦(四极管) - 博客频道 - CSDN.NET2007年01月存档 - oRbIt 的专栏 - 博
下一篇:下面没有链接了
最新奇迹私服发布
请使用1024*768分辨率浏览本站以达到游戏最佳视觉效果
打击盗版支持正版游戏 任何组织或个人未经同意,不得使用和传播盗版游戏,如有侵犯利益请来电告知说明,本站72小时内删除。