社区
C语言
帖子详情
B-树删除的算法!请教!
六月初六
2003-06-01 12:39:43
谢谢!
...全文
84
1
打赏
收藏
B-树删除的算法!请教!
谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
六月初六
2003-06-01
打赏
举报
回复
/*贴出我的算法 还未调试 差删除函数
*/
#include"stdio.h"
#include"alloc.h"
#include"stdlib.h"
#include"conio.h"
#define NULL 0
#define BOOL int
#define TRUE 1
#define FALSE 0
#define DEPTH int
#define RECORD int
#define M 3
#define KEYTYPE int
#define ERROR 1
typedef struct BTNode
{
int keynum;
struct BTNode *parent;
KEYTYPE key[M+1];
struct BTNode *ptr[M+1];
RECORD *recptr[M+1];
}BTNod,*BTree;
typedef struct
{
BTNode *pt;
int i;
int tag;
}Result;
int Search(BTree T,KEYTYPE K)
{
int i;
for(i=1;(T->key[i]>=K)&&(i<T->keynum);i++);
printf(",%d\t%d\n",i-1,T->key[i-1]);
return i-1;
}
Result SearchBTree(BTree T,KEYTYPE K)
{
BTree p,q;
BOOL found=FALSE;
int i=0;
Result Re;
p=T;
q=NULL;
while(p&&(!found))
{
i=Search(p,K);
if(i>0&&p->key[i]==K)
{
found=TRUE;
}
else
{
q=p;
p=p->ptr[i];
}
}
if(!found)
{
Re.pt=p;
Re.i=i;
Re.tag=(p?1:0);
}
else
{
Re.pt=q;
Re.i=i;
Re.tag=0;
}
return Re;
}
BOOL Insert(BTree T,int i,KEYTYPE K,BTree q)
{
int n;
for(n=T->keynum;n>i;n--)
{
T->key[n]=T->key[n-1];
T->ptr[n]=T->ptr[n-1];
T->recptr[n]=T->recptr[n-1];
}
T->key[i]=K;
T->ptr[i]=q;
T->keynum++;
return TRUE;
}
BOOL split(BTree T,int i,BTree q)
{
int n;
int j;
if(!(q=(BTNode *)malloc(sizeof(BTNode))))exit(ERROR);
q->keynum=0;
j=T->keynum;
for(n=0;i<j;i++,n++)
{
q->key[n]=T->key[i+1];
q->ptr[n]=T->ptr[i+1];
q->recptr[n]=T->recptr[i+1];
q->keynum++;
T->keynum--;
}
q->parent=T->parent;
return TRUE;
}
BTree NewRoot(BTree T,BTree q,KEYTYPE K,BTree ap)
{
if(!(q=(BTNode *)malloc(sizeof(BTNode))))exit(ERROR);
q->keynum=0;
Insert(q,0,0,T);
Insert(q,1,K,ap);
q->parent=NULL;
return q;
}
BTree InsertBTree(BTree T,KEYTYPE K,BTree q,int i)
{
KEYTYPE x=K;
BTree ap=NULL;
BOOL finished=FALSE;
int s;
while(q&&(!finished))
{
Insert(q,i,x,ap);
if(q->keynum<M)
{
finished=TRUE;
}
else
{
s=M/2;
split(q,s,ap);
x=q->key[s+1];
q=q->parent;
if(q)i=Search(q,x);
}
}
if(!finished)T=NewRoot(T,q,x,ap);
return T;
}
BOOL CreateBTree(BTree T)
{
KEYTYPE K;
Result Re;
clrscr();
scanf("%d",&K);
while(K)
{
Re=SearchBTree(T,K);
if(!Re.tag)T=InsertBTree(T,K,Re.pt,Re.i);
else{printf("AAA");}
scanf("%d",&K);
}
return TRUE;
}
BTree InitBTree()
{
return NULL;
}
void printBTree(BTree T)
{
int i;
if(!T)return;
printBTree(T->ptr[0]);
for(i=1;i<T->keynum;i++)
{
printf("%d",T->key[i]);
printBTree(T->ptr[i]);
}
}
void main()
{
BTree T;
T=InitBTree();
CreateBTree(T);
printBTree(T);
}
SCI论文攻略---完整版!!!!
举报
删除
此信息 PRS (站内联系TA) 第二部分:构思与撰文 一、写作框架和各部分要求 Title: Be short, accurate, and unambiguous; Give your paper a distinct personality; Begin with the...
[整理I]精选微软等公司数据结构+
算法
面试100题 [第1-40题]
精选微软等公司,数据结构+
算法
,经典面试100题 --------之前40题--------------------------
算法
面试:精选微软等公司...把二元查找
树
转变成排序的双向链表题目:输入一棵二元查找
树
,将该二元查找
树
转换成一个排...
暑期实习--
算法
1、假设淘宝一天有5亿条成交数据,求出销量最高的100个商品并给出
算法
的时间复杂度。先用哈希,统计每个商品的成交次数,然后再用在N个数中找出前K大个数的方法找出成交次数最多的前100个商品。优化方法:可以把5亿...
MATLAB 中文论坛相关帖子整理
79、如何
删除
矩阵中的NaN. 164 80、用平行截面法讨论由曲面z=x^2-y^2构成的马鞍面形状。... 164 81、如何利用ode45解方程... 165 82、Matlab图片如何批处理?pic变量逐一读取文件夹所有图片名... 165...
06-数据库检索:如何使用B-
树
对海量磁盘数据建立索引?
06-数据库检索:如何使用B-
树
对海量磁盘数据建立索引? 你好,我是陈东。 在基础篇中,我们学习了许多和检索相关的数据结构和技术。但是在大规模的数据环境下,这些技术的应用往往会遇到一些问题,比如说,无法将...
C语言
69,336
社区成员
243,078
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章