B树保存到硬盘的问题,苦思冥想不得其解,望高人指点一二

HelloHalo 2006-03-18 07:30:35
数据结构书上关于外部排序的说明“在B-树上进行查找,首先在磁盘上查找到节点,然后将节点装入内存,调用内部查找算法查找相关关键字”

我的问题是,如果B-树定义的时候是每个节点包含N个关键字和N+1个指向子节点的指针,而指针指向的是内存地址。怎么做到把B-树和数据文件保存到磁盘上之后那个指向子节点的指针仍然指向数据文件相关的节点?

不知道我说明白没有。。。。
...全文
435 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
joeqi 2006-04-16
  • 打赏
  • 举报
回复
把数据文件划分成由固定大小组成的块, 某个块就相当于一个B树的结点,然后son数组记录的不是内存地址,而是这些块的编号就行了.
stonepeter 2006-04-15
  • 打赏
  • 举报
回复
楼上我的回答可能是有问题的。思考和学习中!
stonepeter 2006-04-15
  • 打赏
  • 举报
回复
楼主的问题我没有看懂。
我们一起看看B-树的数据结构
B-树的存储结构
#define Max l000 //结点中关键字的最大数目:Max=m-1,m是B-树的阶
#define Min 500 //非根结点中关键字的最小数目:Min=┌m/2┐-1
typedef int KeyType; //KeyType应由用户定义
typedef struct node{ //结点定义中省略了指向关键字代表的记录的指针
 int keynum; //结点中当前拥有的关键字的个数,keynum《Max
 KeyType key[Max+1]; //关键字向量为key[1..keynum],key[0]不用。
 struct node *parent; //指向双亲结点
 struct node *son[Max+1];//孩子指针向量为son[0..keynum]
}BTreeNode;
typedef BTreeNode *BTree;
-----------------------------------
如果每个结点你都想记录到对应的文件的话,按说明是要新增一个文件指针作为结点内容的。
typedef struct node{ //结点定义中省略了指向关键字代表的记录的指针
 int keynum; //结点中当前拥有的关键字的个数,keynum《Max
 KeyType key[Max+1]; //关键字向量为key[1..keynum],key[0]不用。
 struct node *parent; //指向双亲结点
 struct node *son[Max+1];//孩子指针向量为son[0..keynum]
FILE *fp[Max+1]; // 文件
}BTreeNode;
digifish 2006-03-22
  • 打赏
  • 举报
回复
差不多就是这个意思.
HelloHalo 2006-03-22
  • 打赏
  • 举报
回复
那如果B树的结构改成这样呢?

把指向下一节点的指针改称那个节点的编号,编号按层次顺序,这样遍历的时候读入第一个节点,然后按编号查找其余节点。是不是要容易一些?

Hellohuan 2006-03-22
  • 打赏
  • 举报
回复
en!
tudou614 2006-03-20
  • 打赏
  • 举报
回复
mk
digifish 2006-03-20
  • 打赏
  • 举报
回复
需要自己保存一些额外的标志位来纪录每一节点与内存中的那个节点对应,然后读入内存的时候,给节点分配内存,并且动态的加入到B树中。
lbaby 2006-03-19
  • 打赏
  • 举报
回复
可以按照一定的遍历顺序储存,只要写和读都是按照同一个顺序,那么就不会错,

对B树的结构不熟,不能帮你更多了
HelloHalo 2006-03-19
  • 打赏
  • 举报
回复
没人理我。。。。

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧