cs186lab2

Task1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YB40YNhL-1616041973384)(C:\Users\10374\AppData\Roaming\Typora\typora-user-images\image-20210304103604249.png)]

根据Inner Node实现Leaf Node的fromBytes方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F3w8fHFo-1616041973392)(C:\Users\10374\AppData\Roaming\Typora\typora-user-images\image-20210304103921617.png)]

Inner Node第一个byte表示节点类型,0是内部节点,1是叶子节点,后一个int表示有多少个主键数,孩子节点的个数是主键数+1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oHWjuvKZ-1616041973393)(C:\Users\10374\AppData\Roaming\Typora\typora-user-images\image-20210304104616979.png)]

就是将buffer中的二进制码转换成节点。

该方法的意思即先获取方法,然后通过获取nodeType,然后建立keys和children的列表,再次从buffer中获取key数量和值,其中children存放的也是页号,最后创建innernode

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YbGatryf-1616041973396)(C:\Users\10374\AppData\Roaming\Typora\typora-user-images\image-20210304105122694.png)]

Leaf Node第一个byte表示类型,然后一个long表示右兄弟的页号,如果没有就为-1 ,后一个int表示一个leaf node的包含的数目,最后就是值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aNYdiRpM-1616041973398)(C:\Users\10374\AppData\Roaming\Typora\typora-user-images\image-20210304105839003.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TaHqPpmc-1616041973400)(C:\Users\10374\AppData\Roaming\Typora\typora-user-images\image-20210304110022319.png)]

其中leafNode有两个构造方法,因为题目是重用一个已有的节点,而不是创建新的节点,因此选择下面一个构造方法。

Task2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S1tcthSP-1616041973400)(C:\Users\10374\AppData\Roaming\Typora\typora-user-images\image-20210304110154644.png)]T

实现get,getLeftmostLeaf,put,remove等方法

get方法

由BPlusTree出发,InnerNode的是递归方法,leafNode是基本方法。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-efOW8ghS-1616041973401)(C:\Users\10374\AppData\Roaming\Typora\typora-user-images\image-20210304145027785.png)]

通过根节点向下寻找leafNode,最后返回leafNode的key的id

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AA0IdAds-1616041973402)(C:\Users\10374\AppData\Roaming\Typora\typora-user-images\image-20210304145351645.png)]

InnerNode的递归方法,通过已有的比较的方法numLessThanEqual进行比较,然后取得子节点,并对子节点进行递归

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D71vYvOK-1616041973403)(C:\Users\10374\AppData\Roaming\Typora\typora-user-images\image-20210304145652322.png)]

leafNode直接返回当前节点

getLeftmostLeaf

只需要实现InnerNode和LeafNode中的就行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1MN7mQ0x-1616041973404)(C:\Users\10374\AppData\Roaming\Typora\typora-user-images\image-20210304145841938.png)]

该方法是获得最左叶子结点,直接获得第一个孩子节点,并进行递归

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j6SXRKOW-1616041973405)(C:\Users\10374\AppData\Roaming\Typora\typora-user-images\image-20210304145952214.png)]

直接返回叶子节点

put方法

先开一个新坑……待填

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值