算法导论读书笔记之btree
来源:互联网 发布:如何申请顶级域名 编辑:程序博客网 时间:2024/05/18 02:10
btree.h:
#defineTRUE1#defineFALSE0#definet3typedef struct B_TREE {shortleaf;unsigned intn;charkey[2 * t];structB_TREE*c[2 * t + 1];} btree;struct BTREE {btree*root;};typedef struct B_TREE_RETURN {btree*node;intindex;} BTRR;void disk_read(btree*);void disk_write(btree*);
btree.c:
#include "btree.h"#include <stdlib.h>void disk_read(btree *c) {}void disk_write(btree *c) {}BTRR*b_tree_search(btree *x, char k){int i;i = 1;while (i <= x->n && k > x->key[i])i += 1;if (i <= x->n && k == x->key[i])return &((BTRR){x, i});else if(x->leaf)return NULL;else{disk_read(x->c[i]);return b_tree_search(x->c[i], k);}}void b_tree_create(struct BTREE *T){btree *x;x = malloc(sizeof(btree));x->leaf = TRUE;x->n = 0;disk_write(x);T->root = x;}void b_tree_split_child(btree *x, int i){btree *z, *y;int j;z = malloc(sizeof(btree));y = x->c[i];z->leaf = y->leaf;z->n = t - 1;for (j = 1; j <= t - 1; j++)z->key[j] = y->key[j + t];if (!y->leaf)for (j = 1; j <= t; j++)z->c[j] = y->c[j + t];y->n = t - 1;for (j = x->n + 1; j >= i + 1; j--)x->c[j + 1] = x->c[j];x->c[i + 1] = z;for (j = x->n; j >= i; j--)x->key[j + 1] = x->key[j];x->key[i] = y->key[t];x->n += 1;disk_write(y);disk_write(z);disk_write(x);}void b_tree_insert_nofull(btree*, int);void b_tree_insert(struct BTREE *T, int k){btree *r, *n, *s;r = T->root;if (r->n == 2 * t - 1){s = malloc(sizeof(btree));T->root = s;s->leaf = FALSE;s->n = 0;s->c[1] = r;b_tree_split_child(s, 1);b_tree_insert_nofull(s, k);} elseb_tree_insert_nofull(r, k);}void b_tree_insert_nofull(btree *x, int k){int i;i = x->n;if (x->leaf) {while (i >= 1 && k < x->key[i]){x->key[i + 1] = x->key[i];i = i - 1;}x->key[i + 1] = k;x->n = x->n + 1;disk_write(x);} else {while (i >= 1 && k < x->key[i])i = i - 1;i = i + 1;disk_read(x->c[i]);if (x->c[i]->n == 2 * t - 1) {b_tree_split_child(x, i);if (k > x->key[i])i = i + 1;}b_tree_insert_nofull(x->c[i], k);}}
main.c:
#include "btree.h"#include <stdio.h>int main(void){int i;struct BTREE T;//char num[] = {'F', 'S', 'Q', 'K', 'C', 'L', 'H', 'V', 'W', 'M', 'R', 'N', 'P', 'A', 'B', 'X', 'Y', 'D', 'Z', 'E'};char test[] = {'G', 'M', 'P', 'X', 'A', 'C', 'D', 'E', 'J', 'K', 'N', 'O', 'R', 'S', 'T', 'U', 'V', 'Y', 'Z','B','Q', 'L', 'F', 'I'};b_tree_create(&T);for (i = 0; i < sizeof(test) / sizeof(char); i++) {b_tree_insert(&T, test[i]);printf("%c\n", test[i]);}pause();return 0;}
0 0
- 算法导论读书笔记之btree
- 《算法导论》中BTree的代码实现~
- 实现算法导论第三版中的BTree
- 算法导论读书笔记之钢条切割问题
- 《算法导论》读书笔记之插入排序
- 《算法导论》读书笔记之归并排序
- [算法导论读书笔记]二项堆
- 算法导论读书笔记1
- 算法导论读书笔记2
- 《算法导论》读书笔记
- 读书笔记 《算法导论》 C1
- 读书笔记 《算法导论》 C2
- 读书笔记 《算法导论》 C3
- 读书笔记 《算法导论》 C4
- 读书笔记 《算法导论》 C5
- 读书笔记 《算法导论》 C15
- 读书笔记 《算法导论》 Appendix
- 读书笔记:"算法导论"之RANDOMIZED-SELECT(快速选择算法)
- 尊敬的用户:您访问的域名有误或网页不存在,您可以使用我们提供的以下服务
- 问题解决:java.sql.SQLException:Value '0000-00-00' can not be represented as java.sql.Date
- [算法第一轮复习] 并查集 + 路径压缩
- Quartz 2D绘图基本用法
- 什么是线程安全和线程不安全
- 算法导论读书笔记之btree
- 换乘方案-百万公交
- CQU Weekly Training Contest 5 - Graph Theory & Dp
- php常用方法extract与compact
- python知识点总结--中篇
- 蓝桥杯 取球概率 随机模拟
- java 线程运行状态
- Android 利用广播监视网络是否连接
- Android ListView中的ViewHolder的优化(逛博客时看到的优化)